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

约束

发布时间:2020-12-12 14:00:14 所属栏目:MsSql教程 来源:网络整理
导读:1.PRIMARY?KEY约束 2.FOREIGN?KEY约束/级联更新删除 3.UNIQUE约束 4.CHECK约束 5.?DEFAULT约束 6.在创建约束时忽略无效的数据 7.临时使已存在的约束失效 ? 1.PRIMARY?KEY约束 主键一张表只能有 一个,唯一且不为空 。联合主键中各值也不能为空。 ALTER TABLE

1.PRIMARY?KEY约束

2.FOREIGN?KEY约束/级联更新删除

3.UNIQUE约束

4.CHECK约束

5.?DEFAULT约束

6.在创建约束时忽略无效的数据

7.临时使已存在的约束失效

?

1.PRIMARY?KEY约束

主键一张表只能有一个,唯一且不为空。联合主键中各值也不能为空。

ALTER TABLE test_pk
ADD CONSTRAINT pk_test_pk
PRIMARY KEY (id,gender)

2.FOREIGN?KEY约束/级联更新删除

一张表外键可以有很多个。外键参照的必须是没有重复的值,而主键和Unique都能保证值的不重复。如果不唯一,那么参照了还有什么意义!

通常说外键可以为空,是指当该列属性可以为空时可以insert空值,而不是指所插的值不在被参照表中而改插空值的意思。?

ALTER table test_key
ADD CONSTRAINT fk_test_key
FOREIGN KEY (classid) REFERENCES test_pk (id)

?

级联:?在默认情况下(NO?ACTION)下,不能在被引用表中删除或更新被引用列。如果想实现的功能,需要添加?cascde功能。

PS:当外键引用本表时不允许级联操作,以防死循环。

?

CREATE TABLE emp_address(
add_id int NOT NULL,add_detail varchar(50) NOT NULL,emp_id int,CONSTRAINT fk_test_key
FOREIGN KEY (classid) REFERENCES test_pk (id)
ON UPDATE NO ACTION,ON DELETE CASCADE
)

?

3.UNIQUE约束

唯一约束和主键不一样,唯一约束不会自动防止你设置一个NULL值,是否允许NULL值取决于表中相应的NULL选项的设置。然而,如果允许使用NULL,那么只能插入一个NULL(虽然一个NULL不等于另外一个NULL但是在唯一约束看来,两个NULL是相等的。)

ALTER TABLE test_pk
add CONSTRAINT uniq_test_key
UNIQUE  (table_id)

?

4.CHECK约束

ALTER TABLE Customers
ADD CONSTRAINT CH_customers
CHECK (Date<=GETDATE())

?

5.?DEFAULT约束

当插入的列设有DEFAULT约束,则当没该列时,默认为默认值。

PS?当insert?NULL值到DEFAULT约束列时,结果还是NULL。

ALTER TABLE test_pk
add CONSTRAINT default_test_key
default 'UNKNOW'for tableid

?

6.在创建约束时忽略无效的数据

当你想在一张已有数据的表内增加约束,而该约束与之前已存在的数据发生冲突时,可以添加WITH?NOCHECK?忽略之前的无效的数据。

不能禁用主键或唯一约束。

ALTER TABLE Customers
WITH NOCHECK
ADD CONSTRAINT CN_Customer
CHECK
(Phone like '[0-9][0-9][0-9])[0-9][0-9][0-9][0-9][0-9][0-9]')

7.临时使已存在的约束失效

当你想插入的数据和之前已经建好的约束冲突时,可以临时使已存在的约束失效。

只对?CHECK?和FOREIGN?KEY????有效。

--临时使约束失效
ALTER TABLE Customers
NOCHECK
CONSTRAINT CN_Customer
--插入不符合约束的数据
insert ...
--使约束复原
ALTER TABLE Customers
CHECK
CONSTRAINT CN_Customer

(编辑:李大同)

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

    推荐文章
      热点阅读