快速理解MySQL中主键与外键的实例教程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了快速理解MySQL中主键与外键的实例教程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3426字,纯文字阅读大概需要5分钟。
内容图文
![快速理解MySQL中主键与外键的实例教程](/upload/InfoBanner/zyjiaocheng/585/87487fc302f7433cbdb5b9dc882284c7.jpg)
主键与外键的关系,通俗点儿讲,我现在有一个论坛,有两张表,一张是主贴 thread,一张是回帖 reply
先说说主键,主键是表里面唯一识别记录的字段,一般是帖子id,体现在访问的时候,例如是
thread.php?id=1 表示我要访问的是帖子id是1 的帖子~
再来说说外键,当我们删除某个帖子的时候,需要执行另一个操作,就是删除所有回帖,如果正常情况下,我们需要执行两次delete操作(thread和 reply),这时候如果存在外键,例如,在reply 表里面建立一个指向thread表的主键(id)的外键(这个外键绑的字段,必须是对应帖子的id),并指定响应 delete ,那你在删除 thread 的时候,mysql 自己会帮你把 reply 表中这个帖子的回复都删掉,而不需要你手动再去执行一次reply表的delete操作~
至于两者之间的关系,在刚才的例子中,reply 表的外键,指向的就是 thread 表的主键~~
搞个例子,简单演示一下使用,做dage和xiaodi两个表,大哥表是主键,小弟表是外键:
建表:
CREATE TABLE `dage` ( `id` int(11) NOT NULL auto_increment, `name` varchar(32) default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `xiaodi` ( `id` int(11) NOT NULL auto_increment, `dage_id` int(11) default NULL, `name` varchar(32) default '', PRIMARY KEY (`id`), KEY `dage_id` (`dage_id`), CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
插入个大哥:
mysql> insert into dage(name) values('铜锣湾');
Query OK, 1 row affected (0.01 sec)
mysql> select * from dage;
+----+--------+ | id | name | +----+--------+ | 1 | 铜锣湾 | +----+--------+ 1 row in set (0.00 sec)
插入个小弟:
mysql> insert into xiaodi(dage_id,name) values(1,'铜锣湾_小弟A');
Query OK, 1 row affected (0.02 sec)
mysql> select * from xiaodi;
+----+---------+--------------+ | id | dage_id | name | +----+---------+--------------+ | 1 | 1 | 铜锣湾_小弟A | +----+---------+--------------+
把大哥删除:
mysql> delete from dage where id=1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`bstar/xiaodi`, CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`))
提示:不行呀,有约束的,大哥下面还有小弟,可不能扔下我们不管呀!
插入一个新的小弟:
mysql> insert into xiaodi(dage_id,name) values(2,'旺角_小弟A');
2ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`bstar/xiaodi`, CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`))
提示:小子,想造反呀!你还没大哥呢!
把外键约束增加事件触发限制:
mysql> show create table xiaodi;CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)
mysql> alter table xiaodi drop foreign key xiaodi_ibfk_1;
Query OK, 1 row affected (0.04 sec) Records: 1 Duplicates: 0 Warnings:
mysql> alter table xiaodi add foreign key(dage_id) references dage(id) on delete cascade on update cascade;
Query OK, 1 row affected (0.04 sec) Records: 1 Duplicates: 0 Warnings: 0
再次试着把大哥删了:
mysql> delete from dage where id=1;
Query OK, 1 row affected (0.01 sec)
mysql> select * from dage;
Empty set (0.01 sec)
mysql> select * from xiaodi;
Empty set (0.00 sec)
得,这回对应的小弟也没了,没办法,谁让你跟我on delete cascade了呢!
例子说明的应该蛮清楚了吧,其他功能对应手册自己实践吧!:-)
您可能感兴趣的文章:
- MySQL 创建主键,外键和复合主键的语句
- MySQL 主键与索引的联系与区别分析
- MySQL中的主键以及设置其自增的用法教程
- sqlserver数据库主键的生成方式小结(sqlserver,mysql)
- mysql把主键定义为自动增长标识符类型
- Oracle与Mysql主键、索引及分页的区别小结
- Mysql主键相关的sql语句集锦
- MySQL索引之主键索引
- MySQL中主键为0与主键自排约束的关系详解(细节)
内容总结
以上是互联网集市为您收集整理的快速理解MySQL中主键与外键的实例教程全部内容,希望文章能够帮你解决快速理解MySQL中主键与外键的实例教程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。