mysql 添加外键 完整_详解mysql添加外键的方法
本文主要向大家介绍了mysql添加外键的方法,通过具体的实例让大家了解,希望对大家学习mysql有所帮助。
为已经添加好的数据表添加外键:
语法:alter
table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);
例:
alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id)
//FK_ID是外键的名称
/*
CREATE
TABLE `tb_active` (
`id`
int(11) NOT NULL AUTO_INCREMENT,
`title`
varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`content`
text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`user_id`
int(11) NOT NULL,
PRIMARY
KEY (`id`),
KEY
`user_id` (`user_id`),
KEY
`user_id_2` (`user_id`),
CONSTRAINT
`FK_ID` FOREIGN KEY (`user_id`) REFERENCES `tb_user` (`id`)
)
ENGINE=InnoDB DEFAULT CHARSET=latin1
*/
删除外键
语法:
ALTER TABLE table-name DROP FOREIGN KEY key-id;
例:
ALTER TABLE `tb_active` DROP FOREIGN KEY `FK_ID`
自动键更新和删除:
外键可以保证新插入的记录的完整性,但是,如果在REFERENCES从句中已命名的表删除记录会怎么样?在使用同样的值作为外键的辅助表中会发生什么?
很明显,那些记录也应该被删除,否则在数据库中就会有很多无意义的孤立记录,MYSQL可以通过向FOREIGN
KEY...REFERENCES修饰符添加一个ON DELETE或ON
UPDATE子句简化任务,它告诉了数据库在这种情况如何处理孤立任务
关键字
含义
CASCADE
删除包含与已删除键值有参照关系的所有记录
SET
NULL 修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段)
RESTRICT
拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置)
NO
ACTION 啥也不做
请注意,通过ON
UPDATE 和 ON DELETE规则,设置MYSQL能够实现自动操作时,如果键的关系没有设置好,可能会导致严重的数据破坏,
例如:如果一系列的表通过外键关系和ON
DELETE CASCADE
规则连接时,任意一个主表的变化都会导致甚至只和原始删除有一些将要联系的记录在没有警告的情况被删除,所以,我们在操作之前还要检查这些规则的,操作之后还要再次检查.
添加外键
alter
table locstock add foreign key locstock_ibfk2(stockid) references product(stockid)
locstock
为表名, locstock_ibfk2 为外键名 第一个括号里填写外键列名, product为表名,第二个括号里是写外键关联的列名
删除外键
alter
table locstock drop foreign key locstock_ibfk2
查看表有哪些外键
show
create table locstock
[CONSTRAINT
symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES
tbl_name (index_col_name, ...)
[ON
DELETE {RESTRICT
| CASCADE | SET NULL | NO ACTION}]
[ON
UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
所有tables必须是InnoDB型
,它们不能是临时表。
在引用表中,必须有一个索引,外键列以同样的顺序被列在其中作为第一列。这样一个索引如果不存在,它必须在引用表里被自动创建。
在引用表中,必须有一个索引,被引用的列以同样的顺序被列在其中作为第一列。
不支持对外键列的索引前缀。这样的后果之一是BLOB和TEXT列不被包括在一个外键中, 这是因为对这些列的索引必须总是包含一个前缀长度。
如果CONSTRAINTsymbol 被给出,它在数据库里必须是唯一的。如果它没有被给出,InnoDB自动创建这个名字。
本文由职坐标整理并发布,希望对同学们学习MySQL有所帮助,更多内容请关注职坐标数据库MySQL数据库频道!
mysql 添加外键 完整_详解mysql添加外键的方法相关推荐
- mysql临键锁_详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)
详解 MySql InnoDB 中的三种行锁(记录锁.间隙锁与临键锁) 前言 InnoDB 通过 MVCC 和 NEXT-KEY Locks,解决了在可重复读的事务隔离级别下出现幻读的问题.MVCC ...
- mysql如何查看事务日记_详解 Mysql 事务和Mysql 日志
事务特性 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节. 2.一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破 ...
- mysql分区表truncate分区数据_详解MySQL分区表
前言: 分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表.但是对于应用程序来讲,分区的表和没有分区的表是一样的.换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理 ...
- mysql如何进行压测_详解MySQL如何按表创建千万级的压测数据
有时我们要对系统做压测,或者数据库压力测试,这时候需要对某些表插入几百万或者上千万数据,下面介绍下怎么利用MySQL循环和存储过程对特定表的创建千万行数据. 1. 准备测试表 CREATE TABLE ...
- mysql影响行数解析_详解MySQL的数据行和行溢出机制
一.行 有哪些格式? 你可以像下面这样看一下你的mysql行格式设置. 其实mysql的数据行有两种格式,一种就是图中的 compact格式,还有一种是redundant格式. compact是一种紧 ...
- 外键查询_详解MySQL数据库删除所有表的外键约束、禁用外键约束相关脚本
概述 数据库的外键虽然能保证数据数据一致性和完整性,但是也一定程度地影响了数据更新的性能.在开发中,我们使用PowerDesigner建立物理数据模型时,为了结构的清晰,增加可读性,会创建表与表之间的 ...
- mysql 外键设置_详解MySQL外键设置
MySQL外键设置是学习MySQL数据库过程中不能不提的,下面就会为您详细介绍MySQL外键设置的方法,希望对您学习MySQL外键设置方面能有所帮助. 外键的作用: 保持数据一致性,完整性,主要目的是 ...
- mysql 默认事务隔离级别_详解MySQL事务的四大特性和隔离级别
1.事务的四大特性(ACID) 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2.一致性( ...
- mysql 主键溢出检查_详解MySQL 表中非主键列溢出情况监控
今天,又掉坑了. 之前踩到过MySQL主键溢出的情况,通过prometheus监控起来了. 这次遇到的坑,更加的隐蔽. 是一个log表里面的一个int signed类型的列写满了.快速的解决方法当然还 ...
最新文章
- jquery each
- java的mock测试框架
- Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPoi
- CF932G-Palindrome Partition【PAM】
- 虚拟机管理解决方案-VMware篇
- Android Html.fromhtml
- Helm 3 完整教程(十四):Helm 函数讲解(8)数学计算函数
- mongodb创建超级管理员_MongoDB 用户、库、表的管理
- 七月算法机器学习 7 工作流程与模型调优 Kaggle案例泰坦尼克号问题
- 【freeradius】使用radclient调试radius协议
- 智能电单车解决方案需要解决那些问题
- cpp中string类
- hdu 4585 Shaolin两种方法(暴力和STL map set)
- android 北斗测试,安卓手机查看是否支持北斗导航系统的详细检测方法
- 阿里云ECS(centos)中安装Tomcat
- python菜鸟教程mac安装_Python菜鸟教程 | 多平台安装
- 微信公众平台系列 一
- 创新的时机 – 黄金点游戏
- 两因素重复测量方差分析,史上最详细SPSS教程!
- C语言 有a,b,c,d4个数,要求按从大到小的顺序输出。