完整性约束命名子句
[SQL Server:sp_helpconstraint ]SOL提供了完整性约束命名子名CONSTRAINT,用来对完整性约束条件命名,有了名字的完整性约束条件可以灵活地修改、删除完整性约束条件。
1、完整性约束命名子句(三类约束) 语法格式(掌握):
CONSTRAINT<完整性约束条件名>[PRIMARY KEY短语|FOREIGN KEY短语|CHECK短语]
注意:学号应该定义为字符串类型
例:
建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。
列级定义:
CREATE TABLE Student
(
Sno NUMERIC(6) CONSTRAINT C1 CHECK(So BETWEEN 90000
/* c1为当前约束条件的名字 ,使用的是 check 约束*/
AND 99999) CONSTRAINT StudentKey PRIMARY KEY(Sno),
/* StudentKey 为当前约束条件的名字 */
/* PRIMARY KEY 主键是 sno 学号*/
Sname CHAR(20) CONSTRAINT C2 NOT NULL,
/* c2 是约束的名字,约束条件是 not null:不能为空*/
Sage NUMERIC(3) CONSTRAINT C3 CHECK(Sage<30),
Ssex CHAR(2) CONSTRAINT C4 CHECK(Ssex IN('男','女'))
);
表级定义(建议使用):
CREATE TABLE Student
(
Sno NUMERIC(6),
Sname CHAR(20),
Sage NUMERIC(3),
Ssex CHAR(2),
CONSTRAINT StudentKey PRIMARY KEY(Sno),
CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999),
CONSTRAINT C2 CHECK(sname IS NOT NULL),
CONSTRAINT C3 CHECK(Sage<30),
CONSTRAINT C4 CHECK(Ssex IN('男','女'))
);
2.修改表中的完整性限制
使用ALTER TABLE语句修改表中的完整性限制。
例:去掉student表中对性别的限制。
ALTER TABLE Student
DROP CONSTRAINT C4;
例:
修改表Student中的约束条件,要求年龄由小于30改为小于40。
修改的方案是先删除原来的约束条件,再增加新的约束条件
/* 先删除原来的约束 */
ALTER TABLE Student
DROP CONSTRAINT C3;
/* 再增加新的约束 */
ALTER TABLE Student
ADD CONSTRAINT C3 CHECK(Sage < 40);
总结实例:
部门(部门号,部门名)主键:部门号
职工(职工号,姓名,性别,出生日期,家庭住址,所属部门)主键:职工号,外键:所属部门
工资(职工号,发放日期,基本工资,岗位津贴,扣款)主键:(职工号,发放日期)Mssq数据完整性约束,外键:职工号
1 各个属性数据类型合理
2 部门名取唯一值
3 性别只能取“男“或”女“两个值
4 实现关系的两个不变性
要求用命名的表级约束实现以上各约束。
create table 部门(
部门号 char(4),
部门名 varchar(100),
constraint pk primary key(部门号),
constraint uk unique(部门名),
constraint ck check(部门名 is not null)
)
create table 职工(
职工号 char(12),
姓名 varchar(50),/* 可变长度的字符串 */
性别 char(2),
出生日期 date,
家庭住址 varchar(100),
所属部门 char(4),
constraint zk primary key (职工号),
constraint fk foreign key (所属部门)references 部门(部门号),
/* 外键必须与外键所参照的主键表(部门表)的主键完全一样(在类型和宽度下完全一样) */
constraint sk check(性别 in('男','女'))
)
create table 工资(
职工号 char(12),
/* 外键必须与外键所参照的主键表(职工表)的主键完全一样(在类型和宽度下完全一样) */
发放日期 date,
基本工资 money,
岗位津贴 money,
扣款 money,
constraint zgk primary key (职工号,发放日期),
constraint sbk foreign key (职工号)references 职工(职工号)
/*定义外键,并参照职工表中的职工号*/
)
select * from 部门
select * from 职工
select * from 工资
(编辑:92站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|