外键约束
外键约束
foreign key
外键约束的要求:
父表和字表必须使用相同的存储引擎,禁止使用临时表;
数据库引擎只能是InnoDB;
外键列和参照列必须具有相似的数据类型,数字的长度或者是否有符号必须一样,字符长度可以不不一样;
外键列和参照列必须创建索引,参照列没有索引,mysql回自动创建索引;
-----------
下面创建两个数据表
1(父表)省份表两个字段
id (主键)
省份名称
2(子表)用户表三个字段
id (主键)
用户名称
省份编号(外键对应省表的主键id类型一样,因为需要把这个设置为外键约束)
-------------------
字表通过省份编号去在父表中查询省份名称;
------------
如果要创建外键约束,那么在父表最后加上一句
foreign key (省份编号字段) references 省份表 (省份id);
这样就创建一个外键约束,
上面两个表,也就是说用户表中的省份标号是外键,相当于省份表
中的id,那么用户表的省份编号与省份表的id字段类型必须一样;
-------------
添加外键的语法
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...) REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
---------
查看索引;
show indexes from test2G;
--------
一个实际的例子
create table emp( emp_id char(8) primary key, //员工号 emp_name char(30) //员工名 ); create table salary( id char(8), //(员工号) salary flaot, //薪资 foreign key (id) references emp (emp_id) //添加外键约束 ); ----------
外键约束的参照操作:也据说说父表与字表建立了关联或者约束,这个时候父表进行操作的时候,子表也可以设置相应操作;
cascade;从父表删除的时候,字表相应字段删除
Set null;从父表删除的时候,子表设置为null;这种情况子表字段需要没有设置为not null
restrict;拒绝对父表删除或者更新
No action;与restrict一样
- 04-02.总结switch,for,while,do。while跳转语句
- 图书管理系统【总结】
- JDBC【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】
- JDBC【事务、元数据、改造JDBC工具类】
- JDBC【数据库连接池、DbUtils框架、分页】
- HTTP常见面试题
- Java基础-18(01)总结Map,HashMap,HashMap与Hashtable区别,Collections工具类
- 一个oracle查询引起的bug (r4笔记第59天)
- Java基础-18(02)总结Map,HashMap,HashMap与Hashtable区别,Collections工具类
- 特殊的物化视图刷新 (r4笔记第77天)
- 通过单例模式模拟RAC连接 (r4笔记第76天)
- 网站上的验证码是怎么产生的?
- Java基础-17(01)总结,登录注册案例,Set集合,HashSet
- mongoDB初探第一篇(r4笔记第75天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 我在大厂写React,学到了什么?
- leetcode(4)寻找正序数组中位数
- jvm源码解析(二)HashMap
- 硬件笔记(23)---- PCB的保护走线
- TabLayout+ViewPager实现切页的示例代码
- jvm源码分析(四)ThreadPoolExecutor
- python zip,lambda,map函数代码实例
- python实现控制台输出彩色字体
- Mysql免安装版的使用
- jvm源码解析(八)动态代理是如何实现的,JDK Proxy于CGLib有什么区别
- jvm源码解析(五)synchronized和ReentrantLock
- 手把手教你构建自定义的Mimikatz二进制文件
- APACHE OFBIZ XMLRPC远程代码执行漏洞分析
- Intelspy:一款功能强大的自动化网络侦察扫描工具
- Prometheus入门教程(二):Prometheus + Grafana实现可视化、告警