(3)插入到SC表
INSERT INTO SC VALUES('20100001','1',92) INSERT INTO SC VALUES('20100002','2',80) 请写出插入其余行的插入语句,并运行。 (4)检查插入到表中的数据 3. 修改约束
对数据库中已经存在的表,可对其增加约束或修改已存在的约束: (1)添加约束
ALTER TABLE Course ADD UNIQUE(Cname)
ALTER TABLE Course ADD FOREIGN KEY (Cpno) REFERENCES Course(Cno)
? 掌握如何添加约束 ? 掌握如何声明唯一约束
(2)修改约束
ALTER TABLE SC DROP CONSTRAINT SC_CHECK
ALTER TABLE SC ADD CONSTRAINT SC_CHECK CHECK(Grade >=0 AND Grade<=100)
? 掌握如何修改约束 ? 理解命名约束的优点
二、检查完整性约束
通过修改数据库中的数据检查完整性约束条件的作用。 1.检查主键约束
(1)执行下面的语句修改Student表,观察语句能否正确运行,解释为什么? INSERT INTO Student VALUES('20100101','李斌','男',20,'CS','1001',0) INSERT INTO Student VALUES('20100001','李斌','男',20,'CS','1001',0) UPDATE Student SET Sno='20100021' WHERE Sname = '张立'
(2)执行下面的语句修改SC表,观察语句能否正确运行,解释为什么? INSERT INTO SC VALUES('20100001','1',78) INSERT INTO SC VALUES('20100001',null,78) 2.检查唯一约束
执行下面的语句修改Course表,观察语句能否正确运行,解释为什么? INSERT INTO Course VALUES('8','JAVA',7, 3) INSERT INTO Course VALUES('9','数据结构',7, 3)
3.检查默认值、允许空值列
运行如下的语句:
INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES('20100102','张盛','男','1008') 观察插入数据行的数值
SELECT * FROM Student WHere Sno='20100102' 4.检查非空约束
下面的语句包含空值,检查运行结果,解释为什么?
INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES('20100103','张盛','男',NULL) INSERT INTO Student(Sno,Sname,Ssex) VALUES('20100104','张盛','男') 5.检查CHECK约束
执行下面的语句,解释其运行结果。
INSERT INTO SC VALUES('20100001','4',95) INSERT INTO SC VALUES('20100001','4',102)
INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES('20100103','张盛','男','1008') INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES('20100104','张盛','','1008') 6.检查外键约束
(1)执行下面的语句检查外键约束的作用 INSERT INTO SC VALUES('20100301','1',95) INSERT INTO SC VALUES('20100001','10',95) UPDATE SC SET Cno = '10' Where Cno='1' UPDATE Course SET Cno = '10' Where Cno='3' (2)执行下面的语句检查对被引用表的约束
DELETE Student WHERE Sno='20100021' DELETE Student WHERE Sno='20100001'
UPDATE Course SET Cno = '10' WHERE Cname = '数据库系统原理'
三、触发器的定义及使用
1.定义触发器
(1)定义一个触发器,实现有关学分的完整性约束:当向SC表插入一行选课记录时,自动将该课程的学分累加到该学生的总学分中。 CREATE TRIGGER tr_INSERT ON SC FOR INSERT AS --声明变量 DECLARE @sno char(8)
GO
DECLARE @cridit int DECLARE @cno char(4) --提取插入的数据
SELECT @sno=Sno,@cno=Cno FROM inserted --提取学生的总学分
SELECT @cridit = Ccredit FROM SC join Course ON (SC.Cno = Course.Cno) WHERE SC.Cno = @cno --更新总学分
UPDATE Student SET Stotal = Stotal + @cridit WHERE Sno = @sno
(2)定义一个触发器,实现对SC表的操作登记:当用户向SC表插入或修改时,记录该操作到数据库中。
? 创建日志登记表:
CREATE TABLE LOG_TABLE ( username char(10), --操作人员 date datetime, --修改时间 Sno char(8) , --学生学号 Cno char(4) --课程号 )
? 创建日志登记触发器:
CREATE TRIGGER tr_UPDATE ON SC FOR INSERT,UPDATE AS DECLARE @sno char(8) DECLARE @cno char(4) DECLARE @new smallint SELECT @sno=Sno,@cno=Cno FROM inserted
INSERT INTO LOG_TABLE VALUES(CURRENT_USER,getdate(),@Sno,@Cno); GO
(3)执行插入操作,触发触发器: INSERT INTO SC VALUES('20100001','6',95) (4)验证触发器是否触发 select * from student select * from LOG_TABLE
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库实验4(2)在线全文阅读。
相关推荐: