数据库实验⼀数据定义与数据操纵
⼀、实验⽬的
(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 NULLregexp like
);
(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 读者(借书证号),
图书编号 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’,‘431126************’);
INSERT INTO 读者 VALUES(‘20062001’,‘张江’,‘四川绵阳中⼼医院’,‘男’,‘西南科技⼤
学’,‘12345678912’,‘431126************’);
INSERT INTO 读者 VALUES(‘20061234’,‘郭敬明’,‘四川江油305’,‘男’,‘西南科技⼤
学’,‘12345678913’,‘431126************’);
INSERT INTO 读者 VALUES(‘20071235’,‘李晓明’,‘四川成都⼯商银⾏’,‘男’,‘西南科技⼤
学’,‘12345678914’,‘431126************’);
INSERT INTO 读者 VALUES(‘20081237’,‘赵鑫’,‘四川成都⼯商银⾏’,‘⼥’,‘西南科技⼤
学’,‘12345678915’,‘431126************’);
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’,‘yy yy/mm/dd’),’’,’’);
INSERT INTO 借阅
VALUES(‘2’,‘20071235’,‘1005063’,TO_DATE(‘2010/10/20’,‘yyyy/mm/dd’),TO_DATE(‘2011/02/20’,‘yy yy/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’,‘yy yy/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(⾝份证编
ALTER TABLE 读者 MODIFY(⾝份证编号 VARCHAR(18) CHECK((LENGTH(⾝份证编号)=18) AND REGEXP_LIKE(⾝份证编
号,’{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 列名 数据类型;来修改表。解决⽅法:使⽤AL
TER TABLE 表名 MODIFY(列名数据类型);来修改表。
3、插⼊、修改或删除数据后,⽆法⽴即查询到数据的更改,需要将PLSQL关闭,重启才能查询。解决⽅法:这是因为PLSQL默认不提交事务造成的,只要使⽤COMMIT;提交事务后就可以⽴即查看到数据的变动。
4、创建表时,如果表中包含了外码,需要先创建外码所在表,否则创建会失败;删除表时,如果表中的列被其它表作为了外码,需要先删除其它将改表中列作为外码的表,删除数据时也是如此。
5、在修改图书表时,设置是否借出列的长度时,设置字符长度为1,修改失败。解决⽅法:设置长度为2,因为中⽂⼀个字占2个字符,所以设置字符长度为1已经⼩于数据中的长度了,所以修改会失败。
四、实验⼼得体会
通过本次实验,学会了PLSQL的使⽤,熟练的掌握了使⽤SQL语句对数据库表的增删改操作和数据的增删改操作,以及CHECK对数据的约束⽅法和REGEXP_LIKE正则匹配,对数据库有了更加直观的体会和感悟。对数据库的设计和完整性约束有了更加深刻的认识,数据库设计必须严谨,数据约束要规范,创建表⽰要先确定表创建的顺序。
1. 0-9

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。