mysql中外键的作用

外键的好处:

可以使得两张表关联,保证数据的一致性和实现一些级联操作;


/*==============================================================*/

/* DBMS name:      MySQL 5.0                                    */
/* Created on:     2017\10\18 星期三 11:36:35                      */
/*==============================================================*/


drop table if exists A;

drop table if exists B;

/*==============================================================*/
/* Table: A                                                     */
/*==============================================================*/
create table A
(
   id                   int(11) not null,
   name                 varchar(255),
   primary key (id)
);

/*==============================================================*/
/* Table: B                                                     */
/*==============================================================*/
create table B
(
   bid                  int(25) not null,
   id                   int(11),
   adress               varchar(255),
   primary key (bid)
);

alter table B add constraint FK_Reference_1 foreign key (id)

      references A (id) on delete restrict on update restrict;

案例操作一:

select * from a

id     name

111   henan

222    jian

select * from b

bid  id    adres

14   222   东北


insert into  b values(15,333,'beijing');

[SQL] insert into  b values(15,333,'beijing');
[Err] 1452 - Cannot add or update a child row: a foreign key constraint fails (`db_ljf`.`b`, CONSTRAINT `FK_Reference_1` FOREIGN KEY (`id`) REFERENCES `a` (`id`))

提示:小子,想造反呀!你还没大哥呢!

案例二:

delete from a  where id=222

[SQL] delete from a  where id=222

[Err] 1451 - Cannot delete or update a parent row: a foreign key constraint fails (`db_ljf`.`b`, CONSTRAINT `FK_Reference_1` FOREIGN KEY (`id`) REFERENCES `a` (`id`))

提示:有外键约束,且为Restrict当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。

提示:不行呀,有约束的,大哥下面还有小弟,可不能扔下我们不管呀!

http://www.jb51.net/article/90729.htm

案例三:

delete from b  where bid=14

select * from b

bid id adress


select * from a




MySQL外键约束On Delete、On Update各取值的含义

 

先看On Delete属性,可能取值如上图为:No Action, Cascade,Set Null, Restrict属性。

当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。

当取值为Cascade时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。

当取值为Set Null时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。




当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。

当取值为Cascade时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。

当取值为Set Null时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

http://blog.sina.com.cn/s/blog_5d359d310100w5mb.html

 










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值