SQL SERVER基础语法 四
用于规定表中的数据规则。
如果存在违反约束的数据行为,行为会被约束终止。
约束可以在创建表时规定或在创建表之后通过ALTER TABLE进行约束。
在创建表的时候添加约束
create TABLE table_name ( column_name1 data_type(size) constraint_name, column_name2 data_type(size) constraint_name, column_name3 data_type(size) constraint_name, ... );
强制列不接受NUL值。
示例
create table test ( ID INT NOT NULL, name varchar(255) NOT NULL, age int );
删除 NOT NULL约束
ALTER TABLE table_name MODIFY column_name int NULL
唯一标识数据库表中的每条记录。
UNIQUE和PRIMARY KEY约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY约束拥有自动定义的UNIQUE约束。
示例
create table tables_name ( t_id int NOT NULL UNIQUE, ...... );
如果需要多个列的约束,前面加上CONSTRAINT关键 字
示例
create table table_name ( p_id int NOT NULL, firstname carchar(255) NOT NULL, ... CONSTRAINT uc_persionID UNIQUE (p_id,firstname) )
创建完表之后,添加约束
ALTER TABLE table_name ADD UNIQUE (p_id)
撤销约束
ALTER TABLE table_name DROP CONSTRAINT uc_persionID
约束唯一标识数据库表中的每条记录
主键必须包含唯一的值
主键列不能包含NULL值
每个表都应该有一个主键,每个表也只有一个主键。
示例
alter table table_name ADD PRIMAIRY KEY(column_name)
alter table table_name add contraint pk_id primary key (id)
撤销primary key 约束
alter table table_name DROP PRIMARY KEY
或者
alter table table_name drop constraint pk_id
一个表中的foreign key指向另一个表中的UNIQUE KEY(唯一约束的键)
foreign key约束用于预防破坏表之间连接的行为。也能防止非法数据插入外键列,它必须是指向的那个表中的值之一。
示例
CREATE TABLE orders ( o_id int NOT NULL PRIMARY KEY, orderno int NOT NULL, p_id int foreign key references persions(p_id) )
foreign key定义多个列的约束
create table orders ( o_id int not null, orderno int not null, p_id int, primary keyy (o_id), constraint fk_perorders foreign key (p_id) references persions(p_id) )
创建表之后使用alter的foreign key约束
alter table orders add foreign key (p_id) references persion(p_id)
或
alter table orders add constraint fk_perorders foreign key(p_id) references persions(p_id)
撤销约束
alter table orders drop foreign key fk_perorders
或
alter table orders drop constraint fk_perorders
总结:
一、删除时,未指定cascade时
1)删除父表/数据
a.因为子表与父表一一对应,删除父表数据时,需要先把子表对应数据删除否则无法删除
b. 同理,删除表的时候,也需要先删除子表再删除父表
解决方案:
a.指定cascade,删除父表、数据
CASCADE指当删除主表中被引用列的数据时,级联删除子表中相应的数据行。
b.禁用约束(子表的外键约束)
ALTER TABLE 表名 disable constraint 约束名;
2)删除子表:可以删除子表或者数据不报错
二、更新时
a.更新父表会违反约束
b.可以更新子表
c.没有针对约束的级联更新
三、插入时
a.父表可以插入
b.子表插入会违反约束
用于限制列中的值的范围
对单个列定义check约束,这个列只允许特定的值。
对一个表定义check约束,会基于行中其它列的值在特定的列中对值进行限制。
删除check约束
alter table table_name drop constraint 外键名
向列中插入默认值
示例
create table persions ( p_id int not null, ..... city varchar(255) default 'sandnes' )
alter插入默认值
alter table persons add constraint ab_c default 'sandnes' for city
撤销约束
alter table persons alter column city drop default
用于在表中创建索引,在不读取整个表的情况下,索引吏用数据库应用程序可以更快地查找数据。
注:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,因为索引本身也需要更新。
语法
允许使用重复的值
create index index_name ON table_name(column_name)
创建唯一索引。
create UNIQUE INDEX index_name ON table_name (column_name)
删除索引
drop index index_name on table_name