SQL SERVER专题实行7 数据库的完整性控制

打印 上一主题 下一主题

主题 643|帖子 643|积分 1929



  1. USE JX
  2. go
  3. SET NOCOUNT ON
  4. go
  5. --**********1、创建选课表SC,属性为Sno、Cno、Tno和Grade,数据类型分别为char(5)、char(3)、char(5)和decimal(3,1),主码为(Sno,Cno,Tno),主码名为PK_SCT*************************--
  6. --********** Begin **********--
  7. create table SC(
  8.     Sno char(5) ,
  9.     Cno char(3) ,
  10.     Tno char(5) ,
  11.     Grade decimal(3,1),
  12.     CONSTRAINT PK_SCT PRIMARY KEY (Sno, Cno, Tno)
  13. );
  14. --********** End **********--
  15. go
  16. --**********2、创建Student的主码PK_Sno **********--
  17. --********** Begin **********--
  18. alter table Student add constraint PK_Sno primary key(Sno)
  19. --********** End **********--
  20. go
  21. --**********3、创建Course的主码PK_Cno **********--
  22. --********** Begin **********--
  23. alter table Course add constraint PK_Cno primary key(Cno)
  24. --********** End **********--
  25. go
  26. --**********4、创建Teacher的主码PK_Tno **********--
  27. --********** Begin **********--
  28. alter table Teacher add constraint PK_Tno primary key(Tno)
  29. --********** End **********--
  30. go
  31. --**********5、向Student中插入一个学生的完整信息('21005','测试君','男','2003-09-09','物联网工程',35) **********--
  32. --********** Begin **********--
  33. INSERT INTO Student(Sno,Sname,Ssex,Sbirth,Sdept,Total)
  34. values('21005','测试君','男','2003-09-09','物联网工程',35)
  35. --********** End **********--
  36. go
  37. --**********6、向Student中插入一个学生的Sname和Sdept信息,内容分别为'测试君'和'软件工程' **********--
  38. --********** Begin **********--
  39. INSERT INTO Student(Sname,Sdept)
  40. values('测试君','软件工程' )
  41. --********** End **********--
  42. ---------------为确保通关,以下内容请不要删除-----------------
  43. go
  44. SELECT A.NAME AS 表名,B.NAME AS 主码名 FROM SYSOBJECTS A,SYSOBJECTS B
  45. WHERE A.ID=B.PARENT_OBJ AND A.XTYPE='U' AND B.XTYPE='PK' order by A.NAME
  46. go
复制代码

  1. USE JX
  2. go
  3. SET NOCOUNT ON
  4. go
  5. --**********1、创建选课表SC,属性为Sno、Cno、Tno和Grade,数据类型分别为char(5)、char(3)、char(5)和decimal(4,1),要求同时创建名为PK_SCT的主码(Sno,Cno,Tno),名为FK_Sno的外码,使得SC中的Sno与Student的Sno间具有参照完整性,且在删除已有选课信息的学生时级联执行,禁止修改已有选课信息的学号为当前学生表中不存在的学号*************--
  6. --------------------------********** Begin **********--
  7. CREATE table SC
  8. (
  9. Sno char(5),
  10. Cno char(3),
  11. Tno char(5),
  12. Grade decimal(4,1)
  13. constraint PK_SCT primary key(Sno,Cno,Tno),
  14. constraint FK_Sno foreign key(Sno) references Student(Sno) on delete cascade
  15. )
  16. ----------------------------********** End **********--
  17. go
  18. --**********2、在SC中增加名为FK_Cno的外码,使得SC中的Cno与Course的Cno间具有参照完整性,且有同学选修该课程时该门课程不能删除**********--
  19. -----------------------********** Begin **********--
  20. alter table SC
  21. add constraint FK_Cno foreign key(Cno) references Course(Cno)
  22. -----------------------********** End **********--
  23. go
  24. --**********3、在SC中增加名为FK_Tno的外码,使得SC中的Tno与Teacher的Tno间具有参照完整性 **********--
  25. -----------------------********** Begin **********--
  26. alter table SC
  27. add constraint FK_Tno foreign key (Tno) references Teacher(Tno)
  28. -----------------------********** End **********--
  29. go
  30. --**********4、分别向SC表中插入如下几个元组:('21001','3,'5',78)、('21001','5,'2',89)、('21004','4,'1',78)和('22039','8,'9',98)**********--
  31. --------------------------********** Begin **********--
  32. insert into SC(Sno,Cno,Tno,Grade)
  33. values('21001','3','5',78)
  34. insert into SC(Sno,Cno,Tno,Grade)
  35. values('21001','5','2',89)
  36. insert into SC(Sno,Cno,Tno,Grade)
  37. values('21004','4','1',78)
  38. insert into SC(Sno,Cno,Tno,Grade)
  39. values('22039','8','9',98)
  40. ---------------------------********** End **********--
  41. go
  42. --**********5、修改选课表中值为'21004'的Sno为'20001'**********--
  43. --------------------------********** Begin **********--
  44. update SC
  45. set Sno='20001'
  46. where Sno='21004'
  47. --------------------------********** End **********--
  48. go
  49. --**********6、删除Student中学号为'21004'的学生信息 **********--
  50. -------------------------********** Begin **********--
  51. delete
  52. from Student
  53. where Sno='21004'
  54. --------------------------********* End **********-----------------
  55. go
  56. select obj.name 外码名,obj2.name 从表名,obj3.name 主表名,delete_referential_action_desc 删除违约操作,
  57. update_referential_action_desc 更新违约操作
  58. from sys.foreign_keys fk,sysobjects obj,sysobjects obj2,sysobjects obj3
  59. where fk.object_id=obj.id and fk.parent_object_id = obj2.id and fk.referenced_object_id = obj3.id
  60. order by obj2.name
  61. SELECT * FROM SC
  62. go
复制代码

  1. USE JX
  2. go
  3. SET NOCOUNT ON
  4. go
  5. --**********1、为Student增加一列注册时间Registime,数据类型为smalldatetime,并设置默认约束条件D_Registime值为'2022-01-01 23:59:00'*************************--
  6. --********** Begin **********--
  7. ALTER TABLE Student ADD Registime smalldatetime CONSTRAINT D_Registime DEFAULT '2022-01-01 23:59:00'
  8. --********** End **********--
  9. go
  10. --**********2、为Student在姓名Sname上增加一个约束名为UQ_Sname的唯一性约束条件,一个约束名为CK_Sname的不能取空值约束条件**********--
  11. --********** Begin **********--
  12. ALTER TABLE Student ADD CONSTRAINT UQ_Sname UNIQUE (Sname)
  13. ALTER TABLE Student ADD CONSTRAINT CK_Sname CHECK (Sname IS NOT NULL)
  14. --********** End **********--
  15. go
  16. --**********3、为Student增加一个在姓名Ssex上的约束条件CK_Ssex,使得该属性只能录入性别'男'或'女' **********--
  17. --********** Begin **********--
  18. ALTER TABLE Student ADD CONSTRAINT CK_Ssex CHECK (Ssex IN ('男', '女'))
  19. --********** End **********--
  20. go
  21. --**********4、向Student表中插入一个学号为'21005'、姓名为'测试君'的学生信息**********--
  22. --********** Begin **********--
  23. INSERT INTO Student (Sno, Sname) VALUES ('21005', '测试君')
  24. --********** End **********--
  25. go
  26. --**********5、将学号为'21005'的学生性别设置为'无' **********--
  27. --********** Begin **********--
  28. UPDATE Student SET Ssex = '无' WHERE Sno = '21005'
  29. --********** End **********--
  30. go
  31. --**********6、将姓名为'测试君'的学生姓名修改为'李强' **********--
  32. --********** Begin **********--
  33. UPDATE Student SET Sname = '李强' WHERE Sname = '测试君'
  34. --********** End **********--
  35. ---------------为确保通关,以下内容请不要删除-----------------
  36. go
  37. SELECT A.NAME AS 表名,B.NAME AS 约束名,B.XTYPE AS 约束类型
  38. FROM SYSOBJECTS A,SYSOBJECTS B
  39. WHERE A.ID=B.PARENT_OBJ AND A.XTYPE='U' AND B.XTYPE IN('D','UQ','C') order by B.NAME
  40. SELECT * FROM Student
  41. go
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

渣渣兔

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表