MySql 外键

来源:互联网 发布:项目经理考试软件app 编辑:程序博客网 时间:2024/06/03 22:55

经常忘记外键的创建方式,今天给自己做一个笔记吧!

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 指定在父表有子表关联时,父表不能做更新或删除操作

0 0