MySQL的外键约束
一、建立外键约束
语法如下:
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (col_name, ...)
REFERENCES tbl_name (col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
1.CONSTRAINT [symbol]]
指定约束名字,不写则系统自动生成外键约束名;
2.MySQL强制外键约束的列上必须要有索引, [index_name]
指定索引名,不写则系统自动生成索引名,如果已经存在可以用于支持外键约束的索引,那么指定的索引名则无效,采用已有的索引;
3. [ON DELETE reference_option]
和[ON UPDATE reference_option]
指定主表update和delete操作时,子表对应的数据怎么响应;
建立外键约束例子如:
create table tab1 (id int primary key);
create table tab2 (
id int primary key,
col1 int,
foreign key (col1)
references tab1(id)
);
下面看一下[ON DELETE reference_option]
和[ON UPDATE reference_option]
的reference_option
都有哪些参数:
1.CASCADE,级联删除/级联更新,即主表delete或update了被其他表引用的数据,对应子表的数据也被delte或update;
2.SET NULL,当主表delete或update了被其他表引用的数据,对应子表的数据被设为null,注意子表的外键不能设为not null;
3.RESTRICT,主表不允许delete或update被其他表引用的数据;当没有指定任何[ON DELETE reference_option]
和[ON UPDATE reference_option]
,默认是采用RESTRICT;
4.NO ACTION,在MySQL中,等效于RESTRICT;
5.SET DEFAULT,InnoDB和NDB中无法使用才参数。
二、添加外键约束
语法如下:
ALTER TABLE tbl_name
ADD [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (col_name, ...)
REFERENCES tbl_name (col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
基本的语法参数在上文已经解释了。
三、删除外键约束
语法如下:
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;
fk_symbol
即外键约束名,如果不知道具体是什么,可以使用show create table tab_name\G
来查看。
四、外键约束注意事项
1.外键上无法插入主表没有的数据,也无法更新为主表没有的数据;
2.外键上必须要有索引,主表上对应的列最好也创建索引,因为当子表外键插入数据时,也是需要到主表对应的列上去检查数据是否存在,有索引可以提高效率;
3.如果一个表被其他表的外键引用,则这个表无法被删除;如果通过set foreign_key_checks=0
强制删除主表,则子表无法插入任何数据。
上一篇: MySQL外键约束的参照操作
下一篇: MySql的关系(外键)
推荐阅读
-
mysql-怎么查询主表的外键值、mybatis代码怎么写
-
MYSQL中的中文模糊搜索除了使用全文索引外还有什么办法呢?
-
mysql在表中添加多个外键/增加外键/级联约束_MySQL
-
MySQL外键使用及说明详解
-
mysql处理添加外键时提示error 150 问题的解决方法_MySQL
-
mysql处理添加外键时提示error 150 问题的解决方法
-
MySQL使用外键实现级联删除与更新的方法
-
MYSQL建立外键失败几种情况记录Can't create table不能创建表
-
MySQL外键使用及说明详解
-
MySQL添加外键时报错:1215 Cannot add the foreign key constraint的解决方法