在MySQL中如何设置主键和外键

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

我上周刚刚完成了项目中的外键约束。
相当复杂。

2 02 3 年3 月1 5 日,我在公司服务器上做出来的。
我记得当时用的是InnoDB引擎。

创建外键很简单。
记住在编写 SQL 语句时要小心。
创建表父级(id INT PRIMARY KEY,名称 VARCHAR(1 00)); 然后是子数组。
创建表子(id INT PRIMARY KEY,parent_id INT,描述VARCHAR(2 5 5 ),约束fk_parent_id外键(parent_id)参考父(id)在删除级联更新级联); 这里的CASCADE非常重要。
当父表中的数据被删除时,子表中相应的数据也会被删除。

如果要向现有表添加外键,请使用 ALTER TABLE。
ALTER TABLE child 添加约束 fk_parent_id FOREIGN KEY(parent_id) REFERENCES Parent(id) ON DELETE CASCADE ON UPDATE CASCADE; 不要忘记阅读返回的错误消息。

要处理外键,您可以使用 SHOW CREATE TABLE child;查看定义。
ALTER TABLE 还用于删除外键。
更改表子级删除外键 fk_parent_id; 删除后检查数据。
容易出现问题。

优化策略很重要。
写操作会变慢。
索引是关键。
不要忘记对父表中引用的列进行索引。
更改表父级添加索引 idx_id(id); 必须精心选择 ON DELETE 的行为。
RESTRICT 的性能最好。

对于批量操作,外键检查可能会暂时禁用。
设置 FOREIGN_KEY_CHECKS = 0; 执行后重新启动。
设置 FOREIGN_KEY_CHECKS = 1 ; 但风险相当高。
很容易出现数据不一致的情况。

有很多常见的错误。
数据类型不兼容是最常见的。
ERROR 1 005 (HY000):无法创建表(错误号:1 5 0) 原因是 INT 和 INT UNSIGNED 混淆了。

还有一些未建立索引的引用列。
错误 1 2 1 5 (HY000):无法添加外键约束 检查存储引擎是否为MyISAM。

排除故障时,查看 SHOW ENGINE INNODB STATUS 非常有帮助; 显示引擎 INNODB 状态; 查找“最后一个外键错误”部分。

还必须检查数据的一致性。
SELECT COUNT() FROM child WHERE Parent_id NOT IN (SELECT id FROM Parent); 这句话非常重要。

总外键约束很有用。
虽然性能会慢一点,但是数据肯定是正确的。
在大多数情况下都建议这样做。
仅在并发量特别高的场景下才考虑不使用。

算了。
这是你的。

MySQL安装后如何设置外键_MySQL外键约束配置方法

上周我在公司的数据库项目上设置外键时遇到了问题。
2 02 3 年,我们希望使用MySQL数据库在部门表和员工表之间建立外键关系。
首先,遵循推荐的方法并在创建表时定义外键约束。
创建部门表(父表)和员工表(子表),员工表通过外键链接到部门表的主键。
SQL 创建表部门( dept_id INT 主键自动递增, 部门名称 VARCHAR(1 00) NOT NULL UNIQUE ) ENGINE=InnoDB;
创建表员工( emp_id INT 主键自动递增, emp_name VARCHAR(1 00) NOT NULL; 部门_ID INT, 外键 (dept_id) 参考部门 (dept_id) 删除限制 当以级联方式更新时 ) 引擎=InnoDB;
重要的是,父表的引用列 (dept_id) 必须是主键或唯一键,子表的外键列 (dept_id) 必须与父表的引用列具有完全相同的数据类型,并且必须指定 ONDELETE 和 ONUPDATE 操作。

后来,我们遇到了另一种情况,我们需要向现有员工表添加外键。
我通过 ALTERTABLE 语句添加了外键约束。
SQL 更改表人员 添加列 dept_id INT。
添加约束 fk_employee_department 外键 (dept_id) 参考部门 (dept_id) 删除时设置为NULL 级联更新;
在这个过程中,我们遇到了一些挑战。
首先,我们检查存储引擎是否必须是InnoDB,然后检查数据类型是否匹配,父表引用的列上是否有索引,以及现有数据是否满足外键约束。

最终,我们成功设置了外键约束,保证了数据的一致性和查询的优化。
不过这个过程还是有些复杂,需要细心的工作。
你会明白的。
如果以后遇到类似的问题可以参考这个方法。