🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 添加外键 mysql中提供了两种方式增加外键. 多索引,外键本身是一个索引,外键要求外键字段本身也是一种普通索引. #### 方法一 (在创建表的时候增加外键(类似主键) ) 语法: 在从表中创建 ~~~ create table articles( foreign key(从表外键字段) references 主表(主表主键); ); ~~~ 创建完外键之后,多了个MUL,多索引.外键本身是一个索引,外键要求外键字段本身也是一种普通索引. ~~~ +---------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+---------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user_id | int(11) | YES | MUL | NULL | | +---------+---------+------+-----+---------+----------------+ ~~~ 通过命令 : show create table posts 查看 : ~~~ | posts | CREATE TABLE `posts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `user_id` (`user_id`), //创建外键时自动增加的普通索引 CONSTRAINT `posts_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) //外键索引 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | ~~~ #### 方法二(在从表创建表后增加外键) 语法 : ~~~ alter table 从表 add [constraint `外键名`] foreign key(从表外键字段) references 主表(主表主键); ~~~ 查看结果 ~~~ | posts | CREATE TABLE `posts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `user_user` (`user_id`), //使用了指定的外键名称 "user_user" CONSTRAINT `user_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | ~~~ 在创建外键的时候可以额外指定外键的名称. #### 修改/删除外键 外键不允许修改,只能删除后再添加外键. 语法: ~~~ alter table 从表 drop foreign key `外键名称` ~~~ 外键名称外面要加反引号,英文标点符号的波浪线号. 删除外键的时候不能删除跟随外键创建的普通索引,只会删除外键自己. #### 删除普通索引 语法: ~~~ alter table 从表 drop index `索引名称`; ~~~