数据库原理20/5/26课堂笔记

  1 CREATE TABLE SC(
  2 Sno CHAR(5) ,
  3 Cno CHAR(3) ,
  4 Grade   int,
  5 Primary key (Sno, Cno)),
  6 Foreign key (Sno) References Student(Sno),
  7 Foreign key (Cno) References Course(Cno))

被参照方在参照完整性定义时需要做出更多的说明。

增强版:

  1 CREATE TABLE SC(
  2 Sno CHAR(5) ,
  3 Cno CHAR(3) ,
  4 Grade   int ,
  5 Primary key (Sno, Cno)),
  6 Foreign key (Sno) References Student(Sno)
  7 ON DELETE CASCADE ON UPDATE CASCADE,
  8 Foreign key (Cno) References Course(Cno)
  9 ON DELETE NO ACTION ON UPDATE CASCADE)

NO ACTION----拒绝执行

CASCADE----连带修改

SC参照student,定义写在SC中。但是,起作用的却是在student上的操作。

发生在SC上的数据修改操作,如果引起问题,一律是 拒绝执行,可选项只是给 被参照方的

  1 Foreign key (Sno) References Student(Sno)
  2 ON DELETE CASCADE

上面的意思是:

SC的sno列 引用 student的sno列,当student的sno数值被删除的时候,比如删掉了一名学生,在student里。那么,会在SC里连带删除他的选课记录

实体完整性,参照完整性称为 关系数据库的 两个不变性

列值非空 列值唯一:UNIQUE;NOT NULL

取值范围:CHECK (Ssex in (‘Male’,‘Female’))  离散取值范围,用了个关键词 check

  1 CREATE TABLE Student (
  2 Sno  CHAR(5) ,
  3 Sname  CHAR(20) UNIQUE,
  4 Ssex   CHAR(2)  NOT NULL,
  5 Sage  INT,
  6 Sdept CHAR(15),
  7 CHECK (Ssex in (‘Male’,‘Female’)),
  8 CHECK (Ssex=‘Female’OR Sname NOT LIKE ‘MS.%’));
  9 PRIMARY KEY (Sno))

取值范围如果是 数值,也可以写成 Grade >=0 AND Grade <=100,表达一个区间

倒数第二句,这一句有两列Ssex和Sname。这一句表达的是两列之间的取值关系,字面意思是 Ssex=‘Female’或者 Sname NOT LIKE ‘MS.%’

p->q另一种形式是?not p or q

Ssex=‘male’->  Sname NOT LIKE ‘MS.%’

这个例子的主旨是用户定义完整性CHECK语句可以建立多列 之间的关联

另一个例子:

  1 CREATE TABLE Teacher(
  2 Tno   CHAR(5) ,
  3 Tname  CHAR(20) CONSTRAINT C1  NOT NULL,
  4 Tsex  CHAR(2)  CONSTRAINT C2  CHECK (Tsex in (‘Male’, ‘Female’)),
  5 Job  CHAR(10) ,
  6 Sal  INT,
  7 Deduct  INT,
  8 PRIMARY KEY (Tno),
  9 CONSTRAINT C3  CHECK (Sal + Deduct >=3000))

先关注这里 CHECK (Sal + Deduct >=3000),表示 表里任意一行 Sal列 + Deduct列 >=3000,这是一种双列取值范围的约束

  1 ALTER TABLE Student ADD CONSTRAINT C2 CHECK (Sage BETWEEN 17 AND 25)

这里为Student添加了一条 完整性规则即 CHECK (Sage BETWEEN 17 AND 25),但是,不是在CREATE TABLE里加入的,而是已经有了Student表后边再把CHECK (Sage BETWEEN 17 AND 25)加进去

也可以删除掉

  1 ALTER TABLE Student DROP CONSTRAINT C2

约束名重复会报错,

定义的时候没取名系统会自动赋一个名字,这个名字通过图形界面可以看见,当然,也可以通过DBMS提供的特殊函数,查看约束名字和内容,这些都属于DBMS的特有功能,不在SQL范围内

ALTER TABLE Student ADD CONSTRAINT能够执行成功的前提是student里现有的数据符合想要加入的 条件比如上边的例子。假如student里有人年龄16岁,和表里现有数据冲突,会执行不成功。

posted @ 2020-05-26 22:32  淇实是我  阅读(235)  评论(0编辑  收藏  举报