MySQL外键索引
先建两个表,文章表(articles)和评论表(comments)。它们之间的关系是一对多,即一篇文章有多条评论。1
2
3
4
5
6
7
8
9CREATE TABLE `articles` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL DEFAULT '',
`author` varchar(255) NOT NULL DEFAULT '',
`content` text NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1 | CREATE TABLE `comments` ( |
通过对比这两张表发现都是使用InnoDB
引擎,因为MyISAM
不支持外键。我们给comments
表设置了外键art_id
,对应articles
表的主键,这两个字段类型必须保持一致,即都是int(11) unsigned
。
接下来分别插入数据1
2
3INSERT INTO `articles` (`id`, `title`, `author`, `content`, `created_at`, `updated_at`)
VALUES
(9, '第一章', 'jack', 'A long long time ago...', '2018-04-27 20:27:15', '2018-04-27 20:56:32');
1 | INSERT INTO `comments` (`id`, `art_id`, `content`, `created_at`, `updated_at`) |
可以看到此时评论表的art_id
和文章表的id
都是9。
然后我们试着更新一下文章表的主键1
update articles set id = 1 where id = 9;
执行成功后,评论表里的art_id
就变成1了。这就是外键,更多应用在级联约束的场景中,省去代码操作,MySQL直接解决了关联问题。