-
2021-12-28 21:59:34更多相关内容
-
mysql--外键(froeign key)
2021-01-19 01:03:22如果一个实体的某个字段指向另一个实体的主键,就称为外键被指向的实体,称之为主实体(主表),也叫父实体(父表)。负责指向的实体,称之为从实体(从表),也叫子实体(子表)作用:用于约束处于关系内的实体增加子表记录...如果一个实体的某个字段指向另一个实体的主键,就称为外键
被指向的实体,称之为主实体(主表),也叫父实体(父表)。
负责指向的实体,称之为从实体(从表),也叫子实体(子表)
作用:
用于约束处于关系内的实体
增加子表记录时,是否有与之对应的父表记录
如果主表没有相关的记录,从表不能插入
先插入主表数据后再插入从表数据:
在删除或者更新主表记录时,从表应该如何处理相关的记录
设置级联操作:
在主表数据发生改变时,与之关联的从表数据应该如何处理
使用关键字:
on update
on delete
来标识
允许的级联动作:
cascade关联操作,如果主表被更新或删除,从表也会执行相应的操作
set null,表示从表数据不指向主表任何记录
restrict:拒绝主表的相关操作
alter table t_student add foreign key (class_id) references t_class (class_id)
on delete set null; # 在删除外键时,将从表的外键值设置为null
修改外键:
先删除这个表的外键,然后再增加
alter table tb_name drop froeign key 外键名称
外键名称在建立外键时可以自定义名称,如果不自定义,会按照mysql自动生成一个名称
show create table tb_name;
alter table t_student drop foreign key t_student_ibfk_1;
删除外键后不会对表中的数据造成任何影响,改变的只是对表的一种约束
alter table t_student add foreign key (class_id) references t_class (class_id)
on delete set null; # 在删除外键时,将从表的外键值设置为null
注:on delete 与on update 可以同时出现,
但在on delete 或on update 后不能同时出现cascade、set null、restrict,只能有一个
关于restrict的外键约束此处没有写,与其他两个一样
restrict:拒绝主表的相关操作,在主表更新或者删除数据时,在从表中存在与主表主键相关的数据,则不允许对主表数据进行更新或者删除
在不设置任何级联关系约束时,主表默认会是restrict
在restrict约束下,如果想要删除主表数据,除了可以删除没有与子表数据相关的数据外,
可以先修改子表中的外键(修改时,外键必须也要关联到主表的主键,否则不能修改成功)
也可以先删除与想要删除的主表数据的子表数据,再去删除此条主表数据
-
为什么Mysql重命名我的外键?
2021-02-02 04:08:47您必须使用CONSTRAINT关键字来命名约束:mysql> ALTER TABLE JOB_LISTENER ADD CONSTRAINT FK_JOBS FOREIGN KEY (job_id)REFERENCES job(id);如果需要创建索引,这会自动将索引命名为相同的名称.mysql> SHOW ...您必须使用CONSTRAINT关键字来命名约束:
mysql> ALTER TABLE JOB_LISTENER ADD CONSTRAINT FK_JOBS FOREIGN KEY (job_id)
REFERENCES job(id);
如果需要创建索引,这会自动将索引命名为相同的名称.
mysql> SHOW CREATE TABLE JOB_LISTENER\G
*************************** 1. row ***************************
Table: JOB_LISTENER
Create Table: CREATE TABLE `JOB_LISTENER` (
`job_id` int(11) DEFAULT NULL,
KEY `FK_JOBS` (`job_id`),
CONSTRAINT `FK_JOBS` FOREIGN KEY (`job_id`) REFERENCES `job` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
If the CONSTRAINT symbol clause is given, the symbol value, if used, must be unique in the database. A duplicate symbol will result in an error similar to: ERROR 1022 (2300): Can’t write; duplicate key in table ‘#sql- 464_1’. If the clause is not given, or a symbol is not included following the CONSTRAINT keyword, a name for the constraint is created automatically.
有时您必须在两行之间阅读.在上面的段落中,我从最后一句中推断出必须使用CONSTRAINT关键字为约束命名,因为如果不这样做,则会自动创建约束名称.
提示:请注意,约束名称在数据库中必须是唯一的,而不仅仅是在表中.举个例子,这是SQL标准的一部分.所以你可能没想到这一点,所以要小心不要使用重复的约束名称.
而在某些实现中,您可以在同一数据库中的多个表中使用相同的索引名称(SQL标准不包括索引实现,因为a_horse_with_no_name提醒我).
-
MySQL外键(foreign key)使用及说明详解
2021-01-20 01:42:15外键也称之为外键约束: foreign key外键: 外面的键, 一张表的一个字段(非主键)指向另外一个表的主键, 那么该字段就称之为外键.外键所在的表称之为子表(附表); 外键所指向的主键所在的表称之为父表(主表)一、增加外键...外键也称之为外键约束: foreign key
外键: 外面的键, 一张表的一个字段(非主键)指向另外一个表的主键, 那么该字段就称之为外键.
外键所在的表称之为子表(附表); 外键所指向的主键所在的表称之为父表(主表)
一、增加外键
将一个表的字段与另外一张表的主键进行关联(实体与实体之间的联系)
增加外键有两种形式
方案1: 在创建表的时候就增加外键: 在表字段之后使用foreign key
foreign key(外键字段) references 主表(主键);
方案2: 在创建表之后增加外键: 指定外键名字
alter table 表名 add constraint 外键名 foreign key(外键字段) references 父表(主键字段)
查看指定的外键名
外键增加的基础条件: 外键字段必须与引用表(父表主键)的数据类型严格保持一致
二、删除外键
外键不能被修改,只能先删除后新增.
alter table 表名 drop foreign key 外键名;
三、外键作用
外键也称之为外键约束: 主要作用在于对数据进行约束.
约束1: 外键对子表的数据写操作约束: (增加和更新): 如果子表中插入的数据所对应的外键在父表不存在: 不能成功.
约束2: 外键对父表也有数据约束: 当父表操作一个记录,但是该记录被子表所引用的时候,那么父表的操作将会被限制(更新: 主键和删除)
四、外键约束
外键约束: 可以通过在建立外键的时候, 对外键进行约束控制.
约束控制有三种模式
严格模式: district(默认的)
置空模式: set null,对子表的限制: 当父表删除一个被子表引用的记录的时候,会自动的将子表中对应的父表引用(外键)设置成NULL
级联模式: cascade, 级联操作: 当父表对一个被子表引用的数据进行操作的时候,会自动的连带更新子表对应的数据.(更新操作)
模式设定语法: 在外键增加之后(foreign key(外键字段) references 父表(主键)),增加on关键字, 指定操作方式和约束模式. 一个常用的约束模式如下
on update cascade -- 级联操作: 父表更新,子表跟着变
on delete set null; -- 父表删除, 子表置空
更新父表主键
删除父表记录
外键要增加成功的前提条件
子表的外键字段的数据类型必须与父表的主键的字段类型要一致
如果想要在父表进行数据删除的时候, 子表对应的模式为置空: set null,前提是子表对应的外键字段允许为空
如果是在表创建之后增加外键: 一定要考虑表中的数据是否满足外键条件
-
MySQL删除表的时候忽略外键约束的简单实现
2020-12-16 14:16:18删除表不是特别常用,特别是对于存在外键关联的表,删除更得小心。但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的表来重新创建也是常有的事情;另外在测试的时候,也有需要重新创建数据库... -
如何在mysql中重命名外键?
2021-07-16 16:59:22We've just completed a long-running migration on a large table, and ended up with the following constraint on our conversation_tags table:CONSTRAINT `conversation_tags_ibfk_1` FOREIGN KEY (`tag_id`) R... -
MySQL数据库命名规范及约定
2020-12-15 10:44:02一、【操作规范】1. 如无备注,则表中的第一个id字段一定是主键且为自动增长;2. 如无备注,则数值类型的字段请使用UNSIGNED属性;3. 如无备注,排序字段order_id在程序中默认使用降序排列;4. 如无备注,所有字段都... -
Mysql外键约束
2021-01-18 20:31:51MySQL有两种常用的引擎类型:MyISAM和InnoDB。目前只有InnoDB引擎类型支持外键约束。InnoDB中外键约束定义的语法如下:[CONSTRAINT [symbol]] FOREIGN KEY[index_name] (index_col_name, ...)REFERENCES tbl_name ... -
Mysql外键的使用
2020-07-07 22:04:42Mysql外键的使用 外键是一个非常非常好用的一个东西,同时也是很多种关系数据库都有的一种功能,简单的来说就是可以将两张表之间建立一个关联,可以做到操作一张表的时候,另外一个表的数据也会同步发生变化。 ... -
数据库外键理论及MySQL外键实现规定
2021-12-17 10:35:301. 关系数据库外键概念理论(大学时学习的概念) 教材是:王珊,萨师煊老师的数据库系统概论——第五版,这里直接丢截图了。 有三类完整性约束,分别是:实体完整性、参照完整性以及用户定义的完整性。 其中实体... -
Mysql外键约束的创建与删除
2022-02-20 17:45:28在Mysql中使用外键,可以有效地将多个表格的数据“联动”起来,打破独立状态,互相影响。本文简要介绍Mysql外键约束的创建与删除。 -
mysql基本约定与命名规范
2016-10-20 15:17:08一、约定 1、如无特殊需求,所有表使用innodb引擎 2、如无特殊需求,所有主键均为自增类型 3、如无特殊需求,所有字段均为NOT NULL,并给定默认值 4、所有字段均设置备注,枚举字段需要说明每...二、命名规范 ... -
mysql外键
2022-01-05 11:12:50外键 外键:foreign key,外面的键(键不在自己表中),如果一张表中有一个字段(非主键)指向另外一张表中的主键,那么该字段称之为外键. 增加外键 1.外键可以在创建表的时候或者创建表之后增加(但是要考虑数据的问题) ... -
可能做一个MySQL外键的两个可能的表之一?
2021-02-02 14:32:45也就是说,“外键”列包含必须存在于一组目标表之一中的id值。通常,目标表以某种方式相关,例如一些常见的数据超类的实例。您还需要外键列旁边的另一列,以便在每行上,您可以指定引用的目标表。CREATE TABLE ... -
详解MySQL的外键约束
2021-01-19 20:41:24创建表格首先登录mysql,如mysql-uroot-ppassword打开一个...创建一个父表,我们命名为province,如mysql>createtableprovince(->idsmallintauto_incrementkey,->namevarchar(10)NOTNULL->);创建一个子... -
重命名MySQL中的外键列
2021-02-02 04:08:48扩展@Dewey 's answer, here' s一个小脚本,以有用的方式重命名由Hibernate生成的FK ("FK__" + table name + "__" + referenced table name) .SELECT CONCAT("alter table ", TABLE_NAME, " drop foreign key ", ... -
mysql外键约束怎么添加和删除?
2021-02-02 09:36:31问:mysql外键约束怎么添加和删除?答:已有表中添加外键约束:alter table add [constraint 外键约束名] foreign key(字段名) references (主键字段);示例:-- 创建一个主表mysql> create table department(->... -
MySQL外键(两列做主键)
2019-04-09 22:57:35目的:用两列创建主键 表一 create table ta1( id int not null primary key auto_increment, pid int not null, ...由于这种写法无法再表二无法进行外键的关联 顾写成下面的格式 表一的变形 create table t... -
详解mysql添加外键的方法
2021-01-19 07:27:31本文主要向大家介绍了mysql添加外键的方法,通过具体的实例让大家了解,希望对大家学习mysql有所帮助。为已经添加好的数据表添加外键:语法:altertable 表名 add constraint FK_ID foreign key(你的外键字段名) ... -
MySQL命令行&MySql外键设置详解
2014-06-07 18:10:32MySQL命令行&MySql外键设置详解 MySQL 命令行 第一招、mysql服务的启动和停止 net stop mysql net start mysql 第二招、登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -u... -
可以对两个可能的表之一执行MySQL外键吗?
2021-01-28 01:24:07也就是说,“外键”列包含一个ID值,该ID值必须存在于一组目标表中的一个中。通常,目标表以某种方式关联,例如作为某些常见数据超类的实例。您还需要在外键列旁边添加另一列,以便可以在每一行上指定引用的目标表。... -
mysql 外键创建实例
2021-01-19 00:20:50SQL FOREIGN KEY 外键实例教程外国的SQL关键的制约因素外键在一个表点,主键在另一就座。让我们说明了外国钥匙与一个例子。看看以下两个表格:在“人”表:LastName FirstName Address City1 Hansen Ola Timoteivn ... -
navicat中的mysql创建外键
2017-08-24 09:20:13写在前面:昨天在做到navicat中去创建表外键的时候遇到很多的问题和细节再此和大家分享一下,也会说说在工作中遇到的一些实际的问题分享给大家。 首先需要准备的是软件,这里我的mysql5.0.22和navicat11.1.13的。... -
MySql外键约束
2019-10-27 16:16:24MySQL外键约束学习简记 增加外键约束 使用默认名 alter table 表名 add foreign key( 当前表中的列名 ) references 被引用表名(被引用表的列名); 自定义命名 alter table 表名 add constraint 外键名字 foreign key... -
MySQL外键约束
2019-07-28 14:44:22外键约束:foreign key 简称: FK 外键在同一张表中可以有多个外键存在,而主键PK只能有一个 举个例子来说明外键约束,创建学生表和班级表,通过学生的编号来查询他所在的班级。 drop table if exists t_student; ... -
使用Navicat for MySQL添加外键约束
2022-01-21 23:44:55现在我想把t_blog表中的typeID属性设置为外键,关联t_blogType表中的id属性。 1,右键t_blog表,设计表,选择外键属性 2,然后会出现一个设置外键的界面,一共有七列。简单介绍一下这几列的意思: “名”: ... -
Mysql外键设置
2018-04-03 15:33:02mysql添加外键为已经添加好的数据表添加外键:语法:alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);例: alter table tb_active add constraint FK_... -
在MYSQL中怎么设置外键?(小白必看)
2021-06-02 18:34:15步骤: 1.选中字段(需要设外键的字段)点击“外键”; 2.外键命名:fk_主表_从表; 3.选字段(从表的字段);