约束

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

 

你可能感兴趣的:(sqlserver,约束)