经常忘记外键的创建方式,今天给自己做一个笔记吧!
create table t1(
id int primary key auto_increment,
name varchar(128)
)
create table t2(
id int primary key auto_increment,
name varchar(128)
)
create table ft1(
id int primary key auto_increment,
name varchar(128),
t1_id int not null,
t2_id int not null,
foreign key (t1_id) references t1(id)
)
在这里可以通过简单foreign key (t1_id) references t1(id)在创建表的时候建立外键索引
如果在创建表时忘记创建索引, 也可以通过
alter table ft1 add foreign key(t2_id) references t2(id);添加索引
索引的删除:
首先使用show create table ft1 查看表结构
ft1 | CREATE TABLE `ft1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(128) DEFAULT NULL,
`t1_id` int(11) NOT NULL,
`t2_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `t1_id` (`t1_id`),
KEY `t2_id` (`t2_id`),
CONSTRAINT `ft1_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`),
CONSTRAINT `ft1_ibfk_2` FOREIGN KEY (`t2_id`) REFERENCES `t2` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
然后使用 alter table ft1 drop foreign key `ft1_ibfk_1`;删除外键
on delete on update的联动操作有四种
no action 指定在父表有子表关联时,父表不能做更新或删除操作
cascade 表示父表在更新或者删除时,更新或者删除子表记录(谨慎)
set null 当删除父表记录是, 对应关联字段会被设置为NULL(这个操作需要谨慎, 很可能导致数据丢失)
restrict 指定在父表有子表关联时,父表不能做更新或删除操作