数据库完整性约束

实体完整性定义

PRIMARY KEY定义,RDBMS一般在主码上自动建立索引,主码唯一且必填

CREATE TABLE Student

(

Sno CHAR(9) PRIMARY KEY,      /*定义列级主码*/

Sname CHAR(20) NOT NULL,

...

);

 

CREATE TABLE Student

(

Sno CHAR(9),

Sname CHAR(20),

...

PRIMARY KEY (Sno,Sname)       /*定义表级联合主码*/

);

 

参照完整性定义

FOREIGN KEY定义,指明这些外码参照哪些表的主码外码数据类型必须和外部依赖相同,非空?

CREATE TABLE SC

(

Sno CHAR(9) NOT NULL FOREIGN KEY REFERENCES Student (Sno),       /*定义列级外码*/

Cno CHAR(9) NOT NULL,

...

PRIMARY KEY (Sno,Cno),

FOREIGN KEY (Cno) REFERENCES Course (Cno)         /*定义表级外码*/

);

 

参照完整性检查和违约处理

1.NO ACTION:拒绝执行

2.CASCADE:级连操作,当修改参照表一元素导致与参照表不一致,修改参照表中所有造成不一致的元素

3.设置为空值:对于参照完整性,除了定义外码,还应定义外码列是否允许空值

 

CREATE TABLE SC

(

Sno CHAR(9) NOT NULL,

Cno CHAR(4) NOT NULL,

Grade SMALLINT,

PRIMARY KEY (Sno,Cno),

FOREIGN KEY (Sno) REFERENCES Student (Sno)

  ON DELETE CASCADE

  ON UPDATE CASCADE,

FOREIGN KEY (Cno) REFERENCES Course (Cno)

  ON DELETE NO ACTION

  ON UPDATE CASCADE

);

 

用户定义的完整性

1.属性上的约束条件定义

(1)不允许取空值

CREATE TABLE SC

(

Sno CHAR(9) NOT NULL,

...

);

 

(2)列值唯一

CREATE TABLE DEPT

(

Dname CHAR(9) UNIQUE,

...

);

 

(3)用CHECK短语指定列值应该满足的条件

CREATE TABLE Student

(

Ssex CHAR(2) CHECK (Ssex IN ('男','女')),

...

);

 

2.元组上的约束条件的定义

CREATE TABLE Student

(

Sname CHAR(8) NOT NULL,

Ssex CHAR(2),

...

CHECK (Ssex='女' OR Sname NOT LIKE 'MS.%')       /*定义了元组级的约束条件,可设置不同属性相互约束*/

);

 

3.完整性约束条件检查和违约处理

RDBMS检查约束条件是否满足,不满足拒绝执行

 

完整性约束命名子句CONSTRAINT

1.完整性约束命名子句

CONSTRAINT <完整性约束条件名> [PRIMARY KEY 短语 |FOREIGN KEY 短语 | CHECK 短语]

 

CREATE TABLE Student

(

Sno NUMERIC(6)

  CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 999999),

Sname CHAR(20)

  CONSTRAINT C2 NOT NULL,

Cno NUMERIC(6) NOT NULL,

CONSTRAINT StudentKey PRIMARY KEY (Sno),

CONSTRAINT StudentForKey FOREIGN KEY (Cno) REFERENCES Course(Cno)

);

 

2.修改表中的完整性限制ALTER TABLE

ALTER TABLE StudentDROP CONSTRAINT C2;     /*删除原来的完整性约束命名子句C2*/

 

ALTER TABLE Student DROP CONSTRAINT C1;     /*删除原来的完整性约束命名子句C1,重定义C1*/

ALTER TABLE Student ADD CONSTRAINT C1 CHECK (Sno BETWEEN 20000 AND 30000),


转载于http://blog.csdn.net/lulu_jiang/article/details/5388648

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值