外键约束
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 test2\G;
--------
一个实际的例子
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一样
本文分享自 交互设计前端开发与后端程序设计 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!