mysql数据库添加外键的四种方式

文章介绍了在MySQL中添加外键的四种方法:1)建表时直接使用FOREIGNKEY;2)使用CONSTRAINT指定外键名称;3)ALTER语句后期添加;4)使用数据库管理工具如Navicat进行设计表添加外键。并提供了相关文档下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、添加外键的四种方式

1、 建表时直接使用FOREIGN KEY,这种方式外键名称自动生成。如下图。

FOREIGN KEY (user_id) REFERENCES t_user(id)

在这里插入图片描述
2、 建表时使用CONSTRAINT指定外键名称。如下图。

CONSTRAINT fk_student_class FOREIGN KEY(user_id) REFERENCES t_user(id)

在这里插入图片描述
3、 在建表以后使用ALTER语句添加外键。

ALTER TABLE t_info ADD FOREIGN KEY (user_id) REFERENCES t_user(id);

在这里插入图片描述
4、 使用第三方工具
下图以navicat为例:
(1)选择要添加外键的表—>右键—>设计表,如下图。

在这里插入图片描述
(2)按下图操作添加外键。
在这里插入图片描述

二、文档下载

word文档下载:mysql数据库添加外键的四种方式

### MySQL 约束的使用方法及示例 #### 什么是约束? 约束是一种用于维护数据库中表之间关系的机制。它通过定义两个表之间的关联来确保数据的一致性和完整性。在约束的作用下,子表中的某些字段必须匹配父表中的对应字段值,或者可以为空。 #### 创建表时设置约束 在创建表的过程中可以直接指定约束。以下是具体的语法: ```sql CREATE TABLE 子表名 ( 字段1 数据类型, 字段2 数据类型, ... CONSTRAINT 约束名称 FOREIGN KEY (子表字段) REFERENCES 父表名(父表字段) ); ``` 例如,在 `tb_employee` 表中添加 `deptId` 的约束,指向 `tb_dept` 表的主 `id`[^3]: ```sql CREATE TABLE tb_employee ( id INT PRIMARY KEY, name VARCHAR(50), deptId INT, CONSTRAINT fk_emp_dept FOREIGN KEY (deptId) REFERENCES tb_dept(id) ); ``` #### 修改表时添加约束 如果需要在已存在的表上添加约束,可以通过 `ALTER TABLE` 命令实现: ```sql ALTER TABLE 子表名 ADD CONSTRAINT 约束名称 FOREIGN KEY (子表字段) REFERENCES 父表名(父表字段); ``` 例如,向已有表 `tb_employee` 添加约束[^2]: ```sql ALTER TABLE tb_employee ADD CONSTRAINT fk_emp_dept FOREIGN KEY (deptId) REFERENCES tb_dept(id); ``` #### 删除约束 当不再需要某个约束时,可以将其删除。具体命令如下: ```sql ALTER TABLE 子表名 DROP FOREIGN KEY 约束名称; ``` 例如,移除名为 `fk_emp_dept` 的约束: ```sql ALTER TABLE tb_employee DROP FOREIGN KEY fk_emp_dept; ``` #### 查看约束 要查看当前数据库中存在的约束及其相关信息,可以查询系统表或执行以下语句: ```sql SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '数据库名' AND REFERENCED_TABLE_NAME IS NOT NULL; ``` 这将返回所有与目标数据库相关的信息[^1]。 #### 约束下的数据删除行为 默认情况下,如果尝试删除父表中被子表引用的数据记录,则会抛出错误提示违反约束条件。为了改变这种行为,可以在定义时加入级联选项(CASCADE 或 SET NULL)。例如: - **ON DELETE CASCADE**:当父表中的记录被删除时,自动删除子表中对应的记录。 - **ON UPDATE CASCADE**:当父表中的主更新时,同步更新子表中的值。 示例代码如下: ```sql CREATE TABLE tb_employee ( id INT PRIMARY KEY, name VARCHAR(50), deptId INT, CONSTRAINT fk_emp_dept FOREIGN KEY (deptId) REFERENCES tb_dept(id) ON DELETE CASCADE ); ``` 上述配置表示,一旦部门表 (`tb_dept`) 中某条记录被删除,员工表 (`tb_employee`) 中与此部门相关联的所有记录也会随之删除。 --- ### 总结 MySQL 约束提供了强大的功能以保障跨表间的关系一致性。无论是创建新表还是调整现有结构,都可以灵活运用这些技术手段满足实际需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小马穿云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值