mysql主键和外键的连接_MySQL主键和外键使用及说明
MySQL主键和外键使用及说明
一、外键约束
MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。
外键的使用条件:
1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);
2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;
3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;
外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作;
外键的定义语法:
语法详解
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
该语法可以在 CREATE TABLE 和 ALTER TABLE 时使用,如果不指定CONSTRAINT symbol,MYSQL会自动生成一个名字。
ON DELETE、ON UPDATE表示事件触发限制,可设参数:
RESTRICT(限制外表中的外键改动)
CASCADE(跟随外键改动)
SET NULL(设空值)
SET DEFAULT(设默认值)
NO ACTION(无动作,默认的)
语法详解
简单演示一下使用,做dage和xiaodi两个表,大哥表是主键,小弟表是外键
建表:
1CREATE TABLE `dage` (
2 `id` int(11) NOT NULL auto_increment,
3 `name` varchar(32) default '',
4 PRIMARY KEY (`id`))
5 ENGINE=InnoDB DEFAULT CHARSET=latin1;
6
7CREATE TABLE `xiaodi` (
8 `id` int(11) NOT NULL auto_increment,
9 `dage_id` int(11) default NULL,
10 `name` varchar(32) default '',
11 PRIMARY KEY (`id`),
12 KEY `dage_id` (`dage_id`),
13 CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)
14) ENGINE=InnoDB DEFAULT CHARSET=latin1;
插入个大哥:
1mysql> insert into dage(name) values('铜锣湾');
2Query OK, 1 row affected (0.01 sec)
3mysql> select * from dage;
4+----+--------+
5| id | name |
6+----+--------+
7| 1 | 铜锣湾 |
8+----+--------+
91 row in set (0.00 sec)
插入个小弟:
1mysql> insert into xiaodi(dage_id,name) values(1,'铜锣湾_小弟A');
2Query OK, 1 row affected (0.02 sec)
3
4mysql> select * from xiaodi;
5+----+---------+--------------+
6| id | dage_id | name |
7+----+---------+--------------+
8| 1 | 1 | 铜锣湾_小弟A |
9+----+---------+--------------+
把大哥删除:
1mysql> delete from dage where id=1;
2ERROR 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`))
提示:不行呀,有约束的,大哥下面还有小弟,可不能扔下我们不管呀!
插入一个新的小弟:
1mysql> 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`))
3
提示:小子,想造反呀!你还没大哥呢!
把外键约束增加事件触发限制:
1mysql> show create table xiaodi;
2
3 CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)
4
5mysql> alter table xiaodi drop foreign key xiaodi_ibfk_1;
6Query OK, 1 row affected (0.04 sec)
7Records: 1 Duplicates: 0 Warnings:
8mysql> alter table xiaodi add foreign key(dage_id) references dage(id) on delete cascade on update cascade;
9Query OK, 1 row affected (0.04 sec)
10Records: 1 Duplicates: 0 Warnings: 0
再次试着把大哥删了:
1mysql> delete from dage where id=1;
2Query OK, 1 row affected (0.01 sec)
3
4mysql> select * from dage;
5Empty set (0.01 sec)
6
7mysql> select * from xiaodi;
8Empty set (0.00 sec)
哎呦,这回对应的小弟也没了,没办法,谁让你跟我on delete cascade(级联限制)了呢!
mysql主键和外键的连接_MySQL主键和外键使用及说明相关推荐
- mysql索引类型和区别是什么意思_mysql主键索引和普通索引之间的区别是什么
索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.MySQL提供多种索引类型供选择:普通索引 .唯一性索引.主键索引 .全文索引等等.下面本篇文章就来给大家介绍一下主键索 ...
- mysql command为sleep时项目可以连接_Mysql中Sleep进程连接数过多问题解决
解决方法 批量删除 sleep 进程状态的连接数. 1).一种直接在MySQL命令控制台操作: mysql> show processlist; mysql> SELECT concat( ...
- mysql command为sleep时项目可以连接_mysql数据库常连接造成大量sleep状态怎么办
设置max_execution_time 来阻止太长的读SQL.那可能存在的问题是会把所有长SQL都给KILL 掉.有些必须要执行很长时间的也会被误杀. 自己写个脚本检测这类语句,比如order by ...
- mysql怎么写主外键_mysql主外键约束怎么写?
mysql主键约束的写法:"CREATE TABLE 表名(字段名 数据类型 PRIMARY KEY)":mysql外键约束的写法:"CREATE TABLE 表名(FO ...
- MySQL 之 约束 (主键、唯一、非空、自增、外键)
MySQL 之 约束 (主键.唯一.非空.自增.外键) 目的:使得数据更准确,更完整. 约束的分类: 1.键约束 (1)主键约束 (2)唯一键约束 (3)外键约束 2.非空约束 3.默认值约束 4.自 ...
- mysql存在外键的连接_MySQL(外连接、自然连接、新增-追加-删除外键、外键条件-约束)...
外连接(outer join) left join:左外连接(左连接),以左表为主表 right join:右外连接(右连接),以右表为主表 基本语法:左表 left/right join 右表 on ...
- mysql主键能当外键吗_MySQL主键跟外键
定义主键和外键主要是为了维护关系数据库的完整性,总结一下:1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄. 身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号 ...
- mysql多表连接 索引_MySQL多表查询之外键、表连接、子查询、索引
一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, ...
- 主码索引、聚集索引、非主码索引(辅助索引)、唯一索引、外键索引、复合索引、非主码索引、聚集主码(聚集索引)、单列索引、多列索引、普通索引等...
强烈建议看了第一个参考文献再来看这个篇博文,因为此处不准备讲底层数据结构的实现. 索引:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构.其 ...
- mysql建表时外检怎么创建_MySQL创建表时加入的约束以及外键约束的的意义
1,创建表时加入的约束 a) 非空约束,not null b) 唯一约束,unique c) 主键约束,primary key d) 外键约束,foreign key 1,非空约束,针对某个字段设置其 ...
最新文章
- HLG 1539 选课
- cocos creator 获取当前时间_前端开发者入门 Creator 必读吧
- 【Android Gradle 插件】ProductFlavor 配置 ( applicationId 配置 | SdkVersion 相关配置 | version 应用版本配置 )
- 【Python】分享14条非常实用的Pandas函数方法,建议珍藏!!
- 扎心!程序员泪奔的8个瞬间
- java人种_实在看不出藏族有大量矮黑血统
- 作者:黎建辉(1973-),男,博士,中国科学院计算机网络信息中心研究员、博士生导师。...
- 中台不火,天理难容!
- python多线程实现for循环_Python多线程实现同时执行两个while循环
- Linux进程间通信——使用消息队列
- 自动驾驶软件开发人才现状_浅析自动驾驶的重要一环:感知系统发展现状与方向...
- [TJOI2015]弦论(后缀数组or后缀自动机)
- python中关于图例legend在图外的画法简析
- steam怎么设公用计算机,steam怎样设置家庭共享 steam家庭共享设置办法
- 大学生计算机专业顶岗实习日记24篇
- 做到这五点,才算是好用户体验 -- 转自周鸿祎在UPA用户体验大会上的演讲
- Win10系统异常应该怎么修复
- oracle数据库查询,sql没问题,数据库也有数据,方法没错,项目运行就是查不出数据
- ASP.NET(C#)对接国际验证码接口DEMO示例
- 使用Webcam实现拍照功能
热门文章
- 聊聊 Tomcat 的单机多实例
- 【jQuery】jQ处理xml文件和xml字符串
- 现代语音信号处理之语音特征参数估计
- 深度学习之Bottleneck Layer or Bottleneck Features
- 树莓派——使用SDK定期备份本地文件到OSS(自用)
- qt制作一个简易的听小说工具
- 天锋w2019_三星看了想打人,华强北神机天锋W2019现世,专卖店都难辨真假
- rds基于什么开发_玩物得志: 基于DataWorks+MaxCompute+MC-Hologres 构建大数据平台
- #pragma push_macro(new) 及扩展操作
- Android飞机大战小游戏