MySQL 外键约束

外键用来保证参照完整性,MySQL数据库的MyISAM存储引擎本身并不支持外键。

create table parent(

id int not null,

primary key(id))engine=innodb;

create table child(

id int,parent_id int,

foreign key(parent_id) references parent(id)

)engine=innodb;

被引用(references)的表称为父表,引用的表称为子表。

mysql> show create table child\G;

Create Table: CREATE TABLE `child` (

  `id` int(11) DEFAULT NULL,

  `parent_id` int(11) DEFAULT NULL,

  KEY `parent_id` (`parent_id`),

  CONSTRAINT `child_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

外键定义时的on delete和on update表示在对父表进行delete和update操作时,对子表所做的操作,可定义的子表操作有:

CASCADE:表示当父表发生delete或update操作的时候,对相应的子表中的数据页进行delete或update操作;

SET NULL:表示当父表发生delete或update操作的时候,相应的子表中的数据被更新为null值,但是子表中相对应的列必须允许为NULL值;

NO ACTION:表示当父表发生delete或update操作的时候,抛出错误,不允许这类操作发生;

RESTRICT:表示当父表发生delete或update操作的时候,不允许这类操作发生。

    oracle还提供了一种延时检查的外键约束;MySQL就是即时约束。对应oracle来说,对于建立外键的列,一定不要忘记给这个列增加一个索引。而InnoDB存储引擎在外键建立时会自动的对该列增加一个索引。

禁用外键检查:

mysql> set foreign_key_checks=0;

mysql> load data …;

mysql> set foreign_key_checks=1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我曾阿牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值