一、实验目的
(1)熟悉oracle环境
(2)熟练掌握和使用PL-SQL建立数据库基本表
(3)使用PL/SQL developer操作数据库
(4)熟练掌握SQL 建立关系,及增删改数据
二、实验环境
PLSQL Developer 12
Oracle Database 11 home
三、实验步骤、出现的问题及解决方案
实验步骤:
1、以SYSTEM登录数据库,打开PL/SQL developer,以用户:SYSTEM,登录orcl数据库。
2、注册用户S512017****
(1)打开Users文件夹,新建用户,用户名:S512017****。
(2)在角色权限中选择:CONNECT和DBA
3、重新以新用户S512017**** 登录数据库
4、修改日期格式
5、创建表
(1)创建图书分类表
CREATE TABLE 图书分类
(
图书分类号 VARCHAR(100) PRIMARY KEY,
类名 VARCHAR(100) NOT NULL
);
(2)创建书目表
CREATE TABLE 书目
(
ISBN VARCHAR(100) PRIMARY KEY,
书名 VARCHAR(100) NOT NULL,
作者 VARCHAR(100) NOT NULL,
出版单位 VARCHAR(100) NOT NULL,
单价 DECIMAL(8,2) NOT NULL,
图书分类号 VARCHAR(100) REFERENCES 图书分类(图书分类号)
);
(3)创建图书表
CREATE TABLE 图书
(
图书编号 VARCHAR(100) PRIMARY KEY,
ISBN VARCHAR(100) REFERENCES 书目(ISBN),
是否借出 VARCHAR(100) NOT NULL,
备注 VARCHAR(100)
);
(4)创建读者表
CREATE TABLE 读者
(
借书证号 VARCHAR(100) PRIMARY KEY,
姓名 VARCHAR(100) NOT NULL,
单位 VARCHAR(100) NOT NULL,
性别 VARCHAR(100) NOT NULL,
地址 VARCHAR(100) NOT NULL,
联系电话 VARCHAR(100) NOT NULL,
身份证编号 VARCHAR(100) NOT NULL
);
(5)创建罚款分类表
CREATE TABLE 罚款分类
(
罚款分类号 VARCHAR(100) PRIMARY KEY,
罚款名称 VARCHAR(100) NOT NULL,
罚金 INT NOT NULL
);
(6)创建借阅表
CREATE TABLE 借阅
(
借阅流水号 VARCHAR(100) PRIMARY KEY,
借书证号 VARCHAR(100) REFERENCES 读者(借书证号),
图书编号 VARCHAR(100) REFERENCES 图书(图书编号),
借书日期 DATE,
归还日期 DATE,
罚款分类号 VARCHAR(100) REFERENCES 罚款分类(罚款分类号),
备注 VARCHAR(100)
);
(7)创建预约表
CREATE TABLE 预约
(
预约流水号 VARCHAR(100) PRIMARY KEY,
借书证号 VARCHAR(100) REFERENCES 读者(借书证号),
ISBN VARCHAR(100) REFERENCES 书目(ISBN),
预约时间 DATE
);
成功创建表:
6、插入数据
(1)插入图书分类数据
INSERT INTO 图书分类 VALUES(‘100’,‘文学’);
INSERT INTO 图书分类 VALUES(‘200’,‘科技’);
INSERT INTO 图书分类 VALUES(‘300’,‘哲学’);
commit;
(2)插入书目数据
INSERT INTO 书目 VALUES(‘7040195836’,‘数据库系统概论’,‘王珊’,‘高等教育出版社’,39.00,‘200’);
INSERT INTO 书目 VALUES(‘9787508040110’,‘红楼梦’,‘曹雪芹’,‘人民出版社’,20.00,‘100’);
INSERT INTO 书目 VALUES(‘9787506336239’,‘红楼梦’,‘曹雪芹’,‘作家出版社’,34.30,‘100’);
INSERT INTO 书目 VALUES(‘9787010073750’,‘心学之路’,‘张立文’,‘人民出版社’,33.80,‘300’);
commit;
(3)插入图书数据
INSERT INTO 图书 VALUES(‘2001231’,‘7040195836’,‘否’,’’);
INSERT INTO 图书 VALUES(‘2001232’,‘7040195836’,‘是’,’’);
INSERT INTO 图书 VALUES(‘1005050’,‘9787506336239’,‘否’,’’);
INSERT INTO 图书 VALUES(‘1005063’,‘9787508040110’,‘是’,’’);
INSERT INTO 图书 VALUES(‘3007071’,‘9787010073750’,‘是’,’’);
commit;
(4)插入读者数据
INSERT INTO 读者 VALUES(‘20051001’,‘王菲’,‘四川绵阳西科大计算机学院’,‘女’,‘西南科技大学’,‘12345678911’,‘431126199910030001’);
INSERT INTO 读者 VALUES(‘20062001’,‘张江’,‘四川绵阳中心医院’,‘男’,‘西南科技大学’,‘12345678912’,‘431126199910030002’);
INSERT INTO 读者 VALUES(‘20061234’,‘郭敬明’,‘四川江油305’,‘男’,‘西南科技大学’,‘12345678913’,‘431126199910030003’);
INSERT INTO 读者 VALUES(‘20071235’,‘李晓明’,‘四川成都工商银行’,‘男’,‘西南科技大学’,‘12345678914’,‘431126199910030004’);
INSERT INTO 读者 VALUES(‘20081237’,‘赵鑫’,‘四川成都工商银行’,‘女’,‘西南科技大学’,‘12345678915’,‘431126199910030005’);
commit;
(5)插入罚款分类数据
INSERT INTO 罚款分类 VALUES(‘1’,‘延期’,10);
INSERT INTO 罚款分类 VALUES(‘2’,‘损坏’,20);
INSERT INTO 罚款分类 VALUES(‘3’,‘丢失’,30);
commit;
(6)插入借阅数据
INSERT INTO 借阅 VALUES(‘1’,‘20081237’,‘3007071’,TO_DATE(‘2010/09/19’,‘yyyy/mm/dd’),TO_DATE(‘2010/09/20’,‘yyyy/mm/dd’),’’,’’);
INSERT INTO 借阅 VALUES(‘2’,‘20071235’,‘1005063’,TO_DATE(‘2010/10/20’,‘yyyy/mm/dd’),TO_DATE(‘2011/02/20’,‘yyyy/mm/dd’),‘1’,’’);
INSERT INTO 借阅 VALUES(‘3’,‘20071235’,‘2001232’,TO_DATE(‘2011/09/01’,‘yyyy/mm/dd’),’’,’’,’’);
INSERT INTO 借阅 VALUES(‘4’,‘20061234’,‘1005063’,TO_DATE(‘2011/9/20’,‘yyyy/mm/dd’),’’,’’,’’);
INSERT INTO 借阅 VALUES(‘5’,‘20051001’,‘3007071’,TO_DATE(‘2011/9/10’,‘yyyy/mm/dd’),’’,’’,’’);
INSERT INTO 借阅 VALUES(‘6’,‘20071235’,‘1005050’,TO_DATE(‘2011/10/20’,‘yyyy/mm/dd’),TO_DATE(‘2012/02/20’,‘yyyy/mm/dd’),‘1’,’’);
commit;
(7)插入预约数据
INSERT INTO 预约 VALUES(‘1’,‘20081237’,‘9787508040110’,TO_DATE(‘2011/09/11’,‘yyyy/mm/dd’));
commit;
7、修改表
(1)修改修改读者表
ALTER TABLE 读者 MODIFY(联系电话 VARCHAR(11) CHECK(LENGTH(联系电话)=11));
ALTER TABLE 读者 MODIFY(身份证编号 VARCHAR(18) CHECK((LENGTH(身份证编号)=18) AND REGEXP_LIKE(身份证编号,’1{10}[0-1]{1}[0-9]{1}[0-3]{1}[0-9]{1}[0-9,x]{4}$’)));
(2)修改修改图书表
ALTER TABLE 图书 MODIFY(是否借出 VARCHAR(2) CHECK(是否借出=‘是’ OR 是否借出=‘否’));
(3)修改借阅表
ALTER TABLE 借阅 MODIFY(借书日期 DATE NOT NULL);
8、修改数据
UPDATE 图书分类 SET 类名=‘思想’ WHERE 类名=‘哲学’;
10、删除数据
DELETE FROM 借阅 WHERE 借阅流水号=‘6’;
11、删除表
DROP TABLE 预约;
DROP TABLE 借阅;
DROP TABLE 罚款分类;
DROP TABLE 读者;
DROP TABLE 图书;
DROP TABLE 书目;
DROP TABLE 图书分类
出现的问题及解决方案:
1、oracle不支持INSERT INTO 表名(列名1,列名2,…,列名n) VALUES(值1,值2,…,值n), (值1,值2,…,值n)…(值1,值2,…,值n);语法来一次插入多个数据。解决方法:将值拆开成多次插入,一次插入一条。
2、oracle不支持ALTER TABLE 表名ALTER COLUMN 列名 数据类型;来修改表。解决方法:使用ALTER TABLE 表名 MODIFY(列名 数据类型);来修改表。
3、插入、修改或删除数据后,无法立即查询到数据的更改,需要将PLSQL关闭,重启才能查询。解决方法:这是因为PLSQL默认不提交事务造成的,只要使用COMMIT;提交事务后就可以立即查看到数据的变动。
4、创建表时,如果表中包含了外码,需要先创建外码所在表,否则创建会失败;删除表时,如果表中的列被其它表作为了外码,需要先删除其它将改表中列作为外码的表,删除数据时也是如此。
5、在修改图书表时,设置是否借出列的长度时,设置字符长度为1,修改失败。解决方法:设置长度为2,因为中文一个字占2个字符,所以设置字符长度为1已经小于数据中的长度了,所以修改会失败。
四、实验心得体会
通过本次实验,学会了PLSQL的使用,熟练的掌握了使用SQL语句对数据库表的增删改操作和数据的增删改操作,以及CHECK对数据的约束方法和REGEXP_LIKE正则匹配,对数据库有了更加直观的体会和感悟。对数据库的设计和完整性约束有了更加深刻的认识,数据库设计必须严谨,数据约束要规范,创建表示要先确定表创建的顺序。
0-9 ↩︎