数据库实验—关系模型的完整型约束

在这里插入图片描述

  • 用SQL语句为表Departments增加新列Did,并将Did列设置为IDENTITY数据类型

    • 列名 数据类型 约束 identity(a,b)
      a:序号初始值,b:每次自增的大小
      不填写则默认为(a=1,b=1)
    alter table Department add Did int identity(1,1)
    
  • 用SQL语句为表Major增加新列Mid,并将Mid列设置为IDENTITY数据类型

    alter table Major add Mid int identity(1,1)
    
  • 用SQL语句为表Tutors增加新列TutID,并将该列设置为UNIQUEIDENTIFIER数据类型

    • 微软:一个16 字节的GUID。
    alter table Tutors add TutID uniqueidentifier
    
  • 利用NEWID()函数为表Tutors中的TutID属性列赋值

    • 题目说的有点不清楚,意思是:将刚刚添加的属性将其所有元组的TutID都使用newid()赋值
    update Tutors set TutID=newid()
    
  • 将TutID属性列设置为表Tutors的主键

    -- 先将刚刚的属性列声明非空值,然后才能添加为主键
    alter table Tutors alter column TutID uniqueidentifier not null
    -- 声明主键,记得给主键约束起名字
    alter table Tutors add constraint PK_TutID primary key(TutID)
    
  • ① 用SQL语句创建表Teachers与Tutors之间的参照关系,要求“在创建或重新启用时不检查现有数据”且满足级联更新相关字段和级联删除相关字段的约束
    ② 用SQL语句验证:先查询“T011”教师的授课记录,然后删除Teachers表中编号为“T011”教师的记录后,在查询Tutors表,看有什么变化?

    • cascade:级联
    --先删除原本的外键约束
    alter table Tutors drop constraint FK_Tut_Tno
    -- 添加新的外键约束并且
    alter table Tutors with nocheck
    	add constraint FK_Tut_Tno 
    	foreign key(Tno) references Teachers(Tno)
    	on delete cascade
    	on update cascade
    
  • 用SQL语句给表Students创建DEFAULT约束
    (1)Sgender:’男’
    (2)Snative:’广东潮州’

    alter table Students add constraint DF_Sgender default '男' for Sgender
    alter table Students add constraint DF_Snative default '广东潮州' for Snative
    
  • 用SQL语句给表Students创建CHECK约束
    本科生的入学年龄限制在14~40岁之间,此约束对表Students中已有数据做检查。

    alter table Students add constraint Check_Age 
    check (convert(int, left(Sno,4)) - year(Sbirth) between 14  and 40
    
  • 用CREATE语句创建一数据库表TEST_S,表结构与Students表相同,要求语句中需包含一下约束的定义

    • (1)PRIMARY KEY:Sno
    • (2)FOREIGN KEY:Dno,Mno
    • (3)DEFAULT:Sgender=‘男’
    • (4)CHECK:Sgender只能取‘男’或‘女’
    • 注意事项:Sgender default '男'
      如果在创建表过程中要添加默认值的约束只能添加在声明属性的后面,不能像其他那样可以在声明完属性列之后添加,其他创建约束方式与上面做的题差不多,
      声明方式都是↓:
      constraint +约束名+约束类型+约束语句
    • 第一种创建方式:(这种创建方式能保证约束有名字,除了默认值做不了之外。推荐
    	create table TEST_S(
    		Sno char(10),
    		Sname varchar(4),
    		Sgender nchar(1) default '男',
    		Sbirth smalldatetime,
    		Dno char(2),
    		Sclass char(8),
    		Mno char(4),
    		Snative nvarchar(20),
    		constraint PK_Sno primary key(Sno),
    		constraint FK_Dno foreign key(Dno) references Department,
    		constraint FK_Mno foreign key(Mno) references Major,
    		constraint Check_Sgender check (Sgender = '男' or Sgender = '女' )
    	)
    
    • 第二种创建方式:(这种基本就是将约束名字写在属性列声明后面,也推荐
    	create table TEST_S(
    		Sno char(10) constraint PK_Sno primary key(Sno),
    		Sname varchar(4),
    		Sgender nchar(1) default '男' check (Sgender = '男' or Sgender = '女' ),
    		Sbirth smalldatetime,
    		Dno char(2) constraint FK_Dno foreign key(Dno) references Department,
    		Sclass char(8),
    		Mno char(4) constraint FK_Mno foreign key(Mno) references Major,
    		Snative nvarchar(20)
    	)
    
    • 第三种创建方式:就是完完全全不写constraint+约束名(!不推荐!)
  • 用SQL语句在Students表中增加CHECK约束:Sno的长度必须为10个字符长度

    alter table Students add constraint Check_Sno check (len(Sno)=10)
    
  • 用SQL语句在Courses表中增加CHECK约束:Chours、Ccredit的取值不允许小于等于0

    alter table Courses add constraint Check_hours_credit 
    check (Chours > 0 and Ccredit > 0)
    
  • 用SQL语句在Teachers表中增加CHECK约束:Tprof的取值只能是:助教、讲师、副教授或教授

    alter table Teachers add constraint Check_Tprof 
    check (Tprof in ('助教','讲师','副教授','教授'))
    
  • 用SQL语句删除Teachers表中Check_Tprof和Check_Tcomm的CHECK约束,如果有的话就删除,没有则理解删除约束语句即可。

    alter table Teachers drop check Check_Tprof
    alter table Teachers drop check Check_Tcomm
    
posted @ 2023-06-29 00:06  竹等寒  阅读(9)  评论(0编辑  收藏  举报  来源