Navicat 在添加mysql表的外键时报错1005,error150,

本文介绍如何在MySQL中使用表设计器管理外键,包括添加、编辑和删除外键的过程,并提供了解决常见错误的方法。

MySQL 表外键

外键是一个在关联式表中符合另一个表主键的栏位。外键可以用作交叉参考表。

在表设计器的 外键 选项卡管理表外键。只需简单地点击或双击一个外键栏位来编辑。右击来显示弹出菜单或使用外键工具栏,能让你创建新的、编辑或删除选择的外键栏位。

注意:MySQL 3.23.44 或以上版本支持外键。

添加外键

添加一个外键

在表设计器中打开表。
打开 外键 选项卡。
右击并在弹出菜单中选择 添加外键 或在工具栏点击 添加外键。
编辑外键属性。
注意:两个表必须是 InnoDB 类型(或如果你有 solidDB 类型 solidDB for MySQL)。在参考表中,必须有一个索引,在外键列以相同排序编入第一列。由 MySQL 4.1.2 开始,如果该索引不存在,它将会在参考表中自动创建。

编辑外键

编辑一个外键

在表设计器中打开表。
打开 外键 选项卡。
只需点击或双击外键来编辑。
注意:MySQL 4.0.13 或以上版本支持。

删除外键

删除一个外键

在表设计器中打开表。
打开 外键 选项卡。
在要删除的外键上右击并在弹出菜单中选择 删除外键 或在工具栏点击 删除外键。
在对话窗口确认删除。
注意:MySQL 4.0.13 或以上版本支持。

error 1005: can not create table(error150)

1.首先确保自己的表为innoDB类型,若不是,可以更新表的引擎

alter table work engine =innodb;

然后可以查看表(这里work为表名)的结构

show create table work;

2.若Navicat依然报错,建议用命令行添加外键约束

alter table 表A add constraint 外键名 foreign key (person_no) references 表C(person_no) ON UPDATE CASCADE ON DELETE CASCADE

ON DELETE

restrict(约束):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。

no action:意思同restrict.即如果存在从数据,不允许删除主数据。

cascade(级联):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。

set null:当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)

ON UPDATE

restrict(约束):当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。

no action:意思同restrict.

cascade(级联):当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。

set null:当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

注:NO ACTION和RESTRICT的区别:只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执行,后者具有最高的优先权执行。

### 如何在 Navicat 中设置 #### 使用对象设计器创建 为了简化操作并减少手动编写复杂SQL语句的需求,Navicat 提供了一个直观的对象设计器来帮助用户管理数据库中的各种对象。对于而言,在图形界面下完成其定义变得异常简单。 1. 打开目标格的设计视图; 2. 转至“关系”标签页; 3. 添加新的约束,并指定本地列与参照及其相应列;此需要注意的是,所选作为的字段应当匹配父内的主或唯一索引的数据类型[^1]。 #### 关于 InnoDB 存储引擎的要求 值得注意的是,MySQL 数据库仅限于使用 InnoDB 存储引擎才能支持特性。因此,在尝试建立之前,请确认当前使用的存储引擎为 InnoDB。此,当在上执行插入、更新或删除动作,会依据预先设定的行为规则处理关联记录,比如 `CASCADE` 或者 `SET NULL` 等模式[^2]。 #### 解决常见错误提示 有可能会遇到诸如 Error Code: 1005 的情况,这通常是因为违反了某些条件所致,例如试图引用不存在的列名或是不兼容的数据类型等问题。为了避免此类问题的发生,务必仔细核对双方结构的一致性和完整性,同确保被引用的列已经建立了合适的索引[^3]。 ```sql ALTER TABLE child_table ADD CONSTRAINT fk_name FOREIGN KEY (child_column) REFERENCES parent_table(parent_column); ``` 上述命令展示了如何通过 SQL 语法直接向现有添加一个新的约束实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值