大数据学习
bigdata learning
Toggle navigation
大数据学习
主页
openGauss数据库
Flume
MongoDB
Hadoop
数据库实验
Kafka
Zookeeper
Hbase
Manual
Spark
Neo4j
InfluxDB
RabbitMQ
Flink
About Me
归档
标签
实验07-实体完整性
无
2022-10-13 23:43:42
38
0
0
bigdata
# 实验7、实体完整性 ## 7.1 试验目的 学习实体完整性的建立,以及实践违反实体完整性的出现结果。 ## 7.2 试验内容 1. 通过在数据库db_uni中建立表,进行各类实体完整性约束,在没有违反实体完整性的前提下插入并更新一条记录。 2. 演示违反实体完整性的插入操作。 3. 演示违反实体完整性的更新操作。 4. 演示事务的处理,包括事务的建立、处理以及出错时的事务回滚。 5. 通过建立表,插入数据,演示当与现有的数据环境不等时,无法建立实体完整性以及参照完整性。 ## 7.3 实验步骤 输入如下命令,运行并观察和记录结果。 1. 实体完整性约束定义及在符合约束条件下的插入与更新操作。 * 列级实体完整性约束 ```sql CREATE TABLE Stu_Union1 (Sno CHAR(8) NOT NULL UNIQUE, Sname CHAR(8), Ssex CHAR(3), Sage INT, Sdept CHAR(20) ); DROP TABLE Stu_Union1; CREATE TABLE Stu_Union2 (Sno CHAR(8) CONSTRAINT PK_Stu_Union2 PRIMARY KEY, Sname CHAR(8), Ssex CHAR(3), Sage INT, Sdept CHAR(20) ); DROP TABLE Stu_Union2; --当Sname不唯一时,也可以作为候选键,在Sno和Sname选择一个作为主键。 CREATE TABLE Stu_Union3 (Sno CHAR(8) CONSTRAINT PK_Stu_Union3 PRIMARY KEY, Sname CHAR(8) UNIQUE, Ssex CHAR(3), Sage INT, Sdept CHAR(20) ); DROP TABLE Stu_Union3; ``` * 表级实体完整性约束 ```sql --建表后定义完整性约束 CREATE TABLE Stu_Union3(Sno CHAR(8) NOT NULL UNIQUE, Sname CHAR(8), Ssex CHAR(3), Sage INT, Sdept CHAR(20)); ALTER TABLE Stu_Union3 ADD CONSTRAINT PK_Stu_Union3 PRIMARY KEY(Sno); DROP TABLE Stu_Union3; --建表时创建 CREATE TABLE Stu_Union(Sno CHAR(8) NOT NULL UNIQUE, Sname CHAR(8), Ssex CHAR(3), Sage INT, Sdept CHAR(20), CONSTRAINT PK_Stu_Union PRIMARY KEY(Sno)); --当主键为多个属性组成时 CREATE TABLE Report1 (Sno VARCHAR(6) , Tno VARCHAR(6) , Cno VARCHAR(6) , Score DECIMAL( 5,1 ), CONSTRAINT PK_Rept1 PRIMARY KEY(Sno, Tno, Cno) ); DROP TABLE Report1; CREATE TABLE Report2 (Sno VARCHAR(6) , Tno VARCHAR(6) , Cno VARCHAR(6) , Score DECIMAL( 5,1 ) ); ALTER TABLE Report2 ADD CONSTRAINT PK_Rept2 PRIMARY KEY(Sno, Tno, Cno); ALTER TABLE Report2 DROP CONSTRAINT PK_Rept2;/*删除实体完整性约束*/ DROP TABLE Report2; ``` * 符合约束条件的插入与更新 ```sql INSERT INTO Stu_Union VALUES('S07','王兵','M',23,'CS'); UPDATE Stu_Union SET Sno=' ' WHERE Sdept='CS'; UPDATE Stu_Union SET Sno='S02' WHERE Sname='王兵'; SELECT * FROM Stu_union; ``` 2. 违反实体完整性的插入操作。 ```sql INSERT INTO Stu_Union VALUES('S02','黄山','M',23,'CS'); ``` 3. 违反实体完整性的更新操作。 ```sql UPDATE Stu_Union SET Sno=NULL WHERE Sno='S02'; ``` 4. 用客户端工具gsql,以系统管理员nbuuser用户登录数据库db_uni,事务的处理,包括事务的建立、处理以及出错时的事务回滚。 * 正常事务的处理。 ```sql START TRANSACTION; SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE; INSERT INTO Stu_Union VALUES('S09','李永','M',25,'EE'); INSERT INTO Stu_Union VALUES('S03','黄浩','F',25,'EE'); INSERT INTO Stu_Union VALUES('S05','汪浩','F',26,'EE'); SELECT * FROM Stu_union; COMMIT; ``` * 事务的处理中出错时的事务回滚。 ```sql START TRANSACTION; SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE; INSERT INTO Stu_Union VALUES('S07','李宁','M',25,'EE'); SELECT * FROM Stu_union; INSERT INTO Stu_Union VALUES('S09','王琦','F',22,'CS'); SELECT * FROM Stu_union; COMMIT; ``` * 检验事务回滚。 ```sql SELECT * FROM Stu_union; ``` * 删除表。 ```sql DROP TABLE Stu_union; ``` 5. 通过建立Scholarship表,插入数据,观察当与现有的数据环境不符时,建立实体完整性和参照完整性的情况。 * 建立Scholarship表,插入数据并显示结果。 ```sql CREATE TABLE Scholarship (M_ID VERCHAR(10), Stu_id CHAR(8), R_Money INT); INSERT INTO Scholarship VALUES('M01','S07',5000); INSERT INTO Scholarship VALUES('M01','S08',8000); SELECT * FROM Scholarship; ``` * 修改表的实体完整性,观察执行情况。 ```sql ALTER TABLE Scholarship ADD CONSTRAINT PK_Scholarship PRIMARY KEY(M_ID); ``` * 修改表的参照完整性,观察执行情况。 ```sql ALTER TABLE Scholarship ADD CONSTRAINT FK_Scholarship FOREIGN KEY(Stu_id) REFERENCES Students(Sno); ``` * 删除表。 ```sql DROP TABLE Scholarship; ``` ## 7.4 实验要求 1. 实验之前请细细阅读实验总体要求与说明指导书 2. 在openGauss环境中,完成以上实验(1)-(5)步所有SQL数据定义操作,并完成实验报告。
上一篇:
实验06-SQL的空值和空集处理
下一篇:
实验08-参照完整性
文档导航