首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql 设置外键约束(foreign key

建立外键约束可以采用列级约束语法级约束语法,如果仅仅对单独的一个数据列建立外键约束,则使用列级约束语法即可;如果需要对多个列组合创建外键约束,或者需要为外键约束指定名字则必须使用级约束语法。...,但这种列级的约束语法建立的外键约束不会生效,MySQL提供这种列级约束语法仅仅是标准SQL保持良好的兼容性。...因此,如果需要MySQL中的外键约束生效,应使用级约束语法。...) references teacher_table1(teacher_id) ); 如果使用级约束语法,则可以需要使用foreign key来指定本的外键列,并使用references来指定参照哪个主表...使用级约束语法可以使用外键的约束指定约束名,如果创建外键约束没有指定约束名,则MySQL会为该外键约束命名为table_name_ibfk_n,其中table_name是从名,而n是从1开始的整数

5.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

Mysql - 删除时出现: Cannot delete or update a parent row: a foreign key constraint fails

现象 MySQL在删除一张时出现 ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint...fails 原因 可能是在Mysql中,删除的另一张设置了foreign key的关联,造成无法更新或删除数据; 解决方案 可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况。...禁用外键约束 SET FOREIGN_KEY_CHECKS = 0; 然后就可以删除了 删除完成后再启动外键约束 SET FOREIGN_KEY_CHECKS = 1; 查看当前FOREIGN_KEY_CHECKS...的值可用如下命令 SELECT @@FOREIGN_KEY_CHECKS; 注意 这样设置只会影响当前会话, 不会影响全局 若想设置全局变量的话,可以这样写 SET GLOBAL FOREIGN_KEY_CHECKS

1.7K10

MySql的内连接连接

本篇博客主要介绍的内容是连接,在MySql中表的连接分为内连接连接,下面,我们直接进入主题把 内连接连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接...-- 语法 select 字段 from 1 inner join 2 on 连接条件 and 其他条件; 对于内连接,我们还是通过案例来进行练习,加强理解: 显示SMITH的名字部门名称 --...本质是差不多的 外连接连接分为左外连接右外连接 左外连接 如果联合查询,左侧的完全显示我们就说是左外连接 -- 语法 select 字段名 from 名1 left join 名2 on...-- 当左边右边没有匹配时,也会显示左边的数据 select * from stu left join exam on stu.id=exam.id; 这就是左外连接,看完了左外连接,我们更加容易理解右外连接了...-- 语法 select 字段 from 名1 right join 名2 on 连接条件; 下面,我们还是通过案例来对右外连接进行实际的运用,加强理解: 对stuexam联合查询,把所有的成绩都显示出来

21850

SQL FOREIGN KEY 约束- 保障之间关系完整性的关键规则

SQL FOREIGN KEY 约束 SQL FOREIGN KEY 约束用于防止破坏之间关系的操作。FOREIGN KEY 是一张中的字段(或字段集合),它引用另一张中的主键。...FOREIGN KEY 约束防止将无效数据插入到外键列中,因为它必须是父中包含的值之一。...在 CREATE TABLE 时使用 SQL FOREIGN KEY 以下 SQL 在创建 "Orders" 时在 "PersonID" 列上创建了一个 FOREIGN KEY: 对于 MySQL:...FOREIGN KEY (PersonID) REFERENCES Persons(PersonID) ); 在 ALTER TABLE 时使用 SQL FOREIGN KEY 要在已经创建的情况下在...TABLE Orders DROP CONSTRAINT FK_PersonOrder; 通过这些 SQL 语句,您可以在数据库中定义管理 FOREIGN KEY 约束,以确保之间的关系得到维护。

16910

MySQL的内外连接视图

内外连接 一、的内外连接 连接分为内连外连。 1....语法: select 字段 from 1 inner join 2 on 连接条件 and 其他条件; 例如: 显示 JAMES 的名字部门名称 用前面的写法直接用笛卡尔积: select...外连接连接分为左外连接右外连接。 (1)左外连接 如果联合查询,左侧的完全显示,我们就称作是左外连接。...如果这个学生没有成绩,也要将学生的个人信息显示出来 我们使用左外连接,将学生的信息在左边显示,当左边右边没有匹配时,也会显示左边的数据: select * from stu left join...语法: select 字段 from 名1 right join 名2 on 连接条件; 对 stu exam 联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来

12110

MySQL中创建外键的错误:1215 Cannot add the foreign key constraint

引言: MySQL中经常会需要创建父子表之间的约束,这个约束是需要建立在主外键基础之上的,这里解决了一个在创建主外键约束过程中碰到的一个问题。 1....问题的提出 创建两个: product: 商品 sealer: 供货商  相应的SQL如下:    product: DROP TABLE IF EXISTS...碰到错误 在创建外键之时,使用的SQL碰到错误信息如下: alter table `product' add CONSTRAINT `sid_ref` FOREIGN KEY (`sid`)...问题分析 主外键更多的是某的主键与子表的某个列进行关联,要求是具备相同的数据类型属性,问题会不会出现在这里?...解决的办法 修改product.sid中的数据类型,添加unsigned字段的长度,将其设置为相同即可。 5.

2.4K50

MySQL的insert into select 引发锁

MySQL一般我们在生产上备份数据通常会用到 这两种方法: INSERT INTO SELECT CREATE TABLE AS SELECT 注:本文仅针对MySQL innodb引擎,事务是可重复读...NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `c` (`c`) ) ENGINE=InnoDB; insert...因此从MySQL5.5版本开始引入了MDL锁,来保护的元数据信息,用于解决或者保证DDL操作与DML操作之间的一致性。 注意: 新不会自动创建创建和原表相同的索引。...,CREATE TABLE AS SELECT 是DDL语句(数据定义语言,用于定义管理 SQL 数据库中的所有对象的语言 ),执行完直接生效,不提供回滚,效率比较高。...其次,功能不同,INSERT INTO SELECT只是插入数据,必须先建;CREATE TABLE AS SELECT 则建插入数据一块完成。

2K10

MySQL连接

连接 当需要同时显示多个的字段时,就可以用连接来实现这样的功能。...从大类上分,连接可分为内连接连接,它们之间的最主要区别是,内连接仅选出两张中互相匹配的记录,而外连接会选出其他不匹配的记录。 ?...查找出雇员的名字所在的部门,雇员名称部门分别存在empdept中,因此需要使用连接进行查询: ?...外连接可分为左连接连接连接:包含所有的左边中的记录甚至是右边中没有和它匹配的记录 右连接:包含所有的右边中的记录甚至是左边中没有和它匹配的记录 ?...记录联合 将两个的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来,这个时候,就需要用unionunion all关键字来实现这样的功能,语法如下: SELECT * FROM t1

2K20

MySQL的insert into select 引发锁

MySQL一般我们在生产上备份数据通常会用到 这两种方法: INSERT INTO SELECT CREATE TABLE AS SELECT 注:本文仅针对MySQL innodb引擎,事务是可重复读...NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `c` (`c`) ) ENGINE=InnoDB; insert...因此从MySQL5.5版本开始引入了MDL锁,来保护的元数据信息,用于解决或者保证DDL操作与DML操作之间的一致性。 注意: 新不会自动创建创建和原表相同的索引。...,CREATE TABLE AS SELECT 是DDL语句(数据定义语言,用于定义管理 SQL 数据库中的所有对象的语言 ),执行完直接生效,不提供回滚,效率比较高。...其次,功能不同,INSERT INTO SELECT只是插入数据,必须先建;CREATE TABLE AS SELECT 则建插入数据一块完成。

6.1K31
领券