如何在MySQL中实现外键约束?外键的创建与管理完整教程!

上周我尝试了 MySQL 外键,实际上有点乏味。

2 02 3 年3 月1 0日,我的朋友进行了数据库迁移,外键约束失效了。

让我们从创建外键开始。
最好在创建表时完成此操作。
例如:
sql 创建表父级( id INT 主键自动递增, 名称 VARCHAR(1 00) );
创建表子项( id INT 主键自动递增, 父 ID INT, 描述 VARCHAR(2 5 5 ), 约束 fk_parent_id 外键 (parent_id) 引用parent(id) 在级联上删除,在级联上更新 );
使用 DELETE CASCADE 时请记住这一点。
当父表中的记录被删除时,子表中的相关记录也会被删除。

当表创建完成后想要添加外键,可以使用ALTER TABLE:
sql 更改表子项 添加约束 fk_parent_id 外键 (parent_id) 引用 Parent(id);
如果你读错了,不要添加错误的东西。
例如,父表的 ID 为 INT UNSIGNED,子表的 Parent_id 为 INT。

要检查外键信息,请使用SHOW CREATE TABLE child;看到它。

要删除外键,请使用:
sql 更改表子项删除外键 fk_parent_id;
但是,删除后,应用程序必须自行处理数据。
只是上次忘记改密码了,熬夜了。

在优化方面,外键会比较慢。
例如,如果要批量插入数据,则使用:
sql 设置 FOREIGN_KEY_CHECKS = 0; -
执行粘贴操作 设置 FOREIGN_KEY_CHECKS = 1 ;
但是,由于这很容易出错,因此您需要确保数据没有问题。

索引为必填项。
例如父表的ID列没有索引,则无法检查外键,报ERROR 1 5 0。

最大的问题是数据类型不一致。
INT 和 INT UNSIGNED 只是有点不同。

要解决此问题,请首先查看 ERROR 1 2 1 5 或 ERROR 1 4 5 2 使用 SHOW ENGINE INNODB STATUS 检查最新的外键错误。

还有一个命令 SELECT COUNT() FROM child WHERE Parent_id NOT IN (SELECT id FROM Parent);它可以检查不一致的数据。

总的来说,外键是个好东西。
虽然速度较慢,但​​数据绝对是正确的。
在大多数情况下很有用。

SQL 怎样删除有外键约束的表

1 、直接使用SQL模板: SELECT CONCAT('DROP TABLE IF EXISTS ', table_name, ';') FROM information_schema.tables WHERE table_schema = 'YourDatabaseName'; 2 .设置外键检查:SET FOREIGN_KEY_CHECKS=0; -
DROP 语句 SET FOREIGN_KEY_CHECKS=1 ; 3 、国外主要制约因素的选择:
CASCADE:如果父表被删除,子表也会自动删除。

SETNULL:删除父表并将子表的外键设置为空。

NOACTION:拒绝删除父表。

RESTRICTED:拒绝删除父表。
你自己掂量一下。

sql数据库中同一字段怎么添加多个外键约束呀 ? 具体如图 谢谢大神啦

说白了,这段代码就是在关系数据库中创建一个段级表,通过外键链接到学生表和职业表。

很简单,我们来分解一下:
1 .首先,最重要的报告。
学号和课程号都是外键,分别指向学生表和课程表的学号和课程号字段。
例如,如果在成绩列表中看到学号“1 2 3 4 5 6 ”,则可以在学生表中找到详细的学生信息。

2 另外,score字段是一个浮点数,可以存储分数,可以是实数。

3 还有一个关键部分。
pk_student_number为主键,使用clustering关键字,也就是说索引和表数据存储在一起,可以提高查询效率。

一开始我认为第一个关键计划是合理的,但后来我发现我错了。
如果学号或课程号重复,就会造成主键冲突。
等等,有一个。
外键约束 fk_student number 和 fk_course number 确保数据完整性并防止插入无效的外键值。

实用建议:设置外键时,请确保引用表和字段并且它们的数据类型匹配。
这个策略比较棘手,很多人都没有注意。
一旦给出,想要改正就非常困难。
我认为在创建表之前设计整个数据库的ER图是值得的,这样可以更清楚地看到表之间的关系。