加入收藏 | 设为首页 | 会员中心 | 我要投稿 52站长网 (https://www.52zhanzhang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

数据库:完整性约束(定义,修改,实例)

发布时间:2023-01-08 14:05:22 所属栏目:MsSql教程 来源:转载
导读: 完整性约束命名子句
[SQL Server:sp_helpconstraint ]SOL提供了完整性约束命名子名CONSTRAINT,用来对完整性约束条件命名,有了名字的完整性约束条件可以灵活地修改、删除完整性约束条件。

完整性约束命名子句

[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 工资

(编辑:52站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!