T-SQL基础之外键约束

发布时间:2019-05-02  栏目:MySQL  评论:0 Comments

率先成立测试表

use test;
create table test01
(
id1 int not null,
id2 int not null
);
create table test02
(
id11 int not null,
id22 int not null
);
alter table test01 add constraint pk_id1
  primary key(id1);

设想如下事关

图片 1

test0贰表中的id1一依赖于test0第11中学的id1,由此为test0二创制外键

alter table test02 add constraint fk_id11
  foreign key(id11) references test01(id1);

注意:test0一表中的id一亟须为主键恐怕唯一索引,不然不恐怕创造基于id壹的外键。

 

创立外键之后,大家将发掘不可能在test0第22中学输入不在test0一的id一范围内的多少

图片 2图片 3

insert into test02 values(1,1);

View Code

图片 4图片 5

消息 547,级别 16,状态 0,第 1 行
INSERT 语句与 FOREIGN KEY 约束"fk_id11"冲突。该冲突发生于数据库"test",表"dbo.test01", column 'id1'。
语句已终止。

View Code

假定在创造外键在此以前就曾经在test02中有了不在test0一的id一范围内的数码,则开创外键会失利

图片 6图片 7

alter table test02 drop constraint fk_id11;
insert into test02 values(1,1);
alter table test02 add constraint fk_id11
  foreign key(id11) references test01(id1);

View Code

图片 8图片 9

消息 547,级别 16,状态 0,第 1 行
ALTER TABLE 语句与 FOREIGN KEY 约束"fk_id11"冲突。该冲突发生于数据库"test",表"dbo.test01", column 'id1'。

View Code

这儿能够因此with nocheck挑选,强制跳过现存数据检查

alter table test02 with nocheck
  add constraint fk_id11
  foreign key(id11) references test01(id1);

固然如此在test0一表中id一设置为了主键,不容许null,不过在test02表中的id2能够允许null值

alter table test02 alter column id11 int null;
insert into test02 values(null,1);

 

当大家从test0一举行删除或修改数据操作的时候,如若在test0二表中也有连带数据则会报错,拒绝操作;

图片 10图片 11

insert into test01 values(2,1);
insert into test02 values(2,1);
update test01 set id1=3 where id1=2;

View Code

图片 12图片 13

消息 547,级别 16,状态 0,第 1 行
UPDATE 语句与 REFERENCE 约束"fk_id11"冲突。该冲突发生于数据库"test",表"dbo.test02", column 'id11'。
语句已终止。

View Code

那时大家得以经过级联操作来共同删除或退换三个表中的数码。

alter table test02 drop constraint fk_id11;
alter table test02 with nocheck
    add constraint fk_id11
    foreign key(id11) references test01(id1)
    on update cascade;
update test01 set id1=3 where id1=2;

这么test02表中的数据也会相应修改

 

级联操作包蕴cascade/set null/set default,跟在操作on delete/on
update之后

里面cascade是做同样修改;set null是test0二表中相应数据修改为null;set
default则是呼应数额修改为暗中认可值。

 

留下评论

网站地图xml地图