SQL SERVER基础语法 四

 

 

 

 

1.约束(Constraints)

 

用于规定表中的数据规则。

如果存在违反约束的数据行为,行为会被约束终止。

约束可以在创建表时规定或在创建表之后通过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,
   ...  
);

  

 

 2.NOT NULL约束

 强制列不接受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 

  

3.UNIQUE约束

 

唯一标识数据库表中的每条记录。

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

  

4.PRIMARY KEY约束

 

 

 约束唯一标识数据库表中的每条记录

主键必须包含唯一的值

主键列不能包含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

  

5.FOREIGN KEY约束

 一个表中的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.子表插入会违反约束 

 

6.check约束

 用于限制列中的值的范围

对单个列定义check约束,这个列只允许特定的值。

对一个表定义check约束,会基于行中其它列的值在特定的列中对值进行限制。

 

删除check约束

alter table table_name
drop constraint 外键名

  

7.DEFAULT约束

向列中插入默认值

示例

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

  

8.create index语句

用于在表中创建索引,在不读取整个表的情况下,索引吏用数据库应用程序可以更快地查找数据。

注:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,因为索引本身也需要更新。

语法

允许使用重复的值

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

  

 

posted @ 2021-02-16 21:47  云中翱翔的鹏鸟  阅读(87)  评论(0编辑  收藏  举报