mysql添加外键失败 error 1822
时间: 2023-11-05 11:54:01 浏览: 34
MySQL添加外键失败错误码1822通常是由于你在尝试创建一个外键时,外键对应的列数据类型与被引用的列数据类型不匹配所导致的。下面是可能导致错误的一些常见情况:
1. 外键列和被引用列的数据类型不同,例如,外键列定义为INT类型,而被引用列定义为VARCHAR类型。
2. 外键列长度不足以容纳被引用列的长度,例如,外键列定义为VARCHAR(10),而被引用列定义为VARCHAR(20)。
3. 外键列和被引用列的字符集不同。
4. 外键列或被引用列没有建立索引。
解决方法:
1. 确认外键列和被引用列的数据类型、长度和字符集是否一致。
2. 确认外键列和被引用列是否已经建立了索引。如果没有,需要先为这两列建立索引。
3. 如果外键列是定义为UNSIGNED类型,则被引用列也必须是UNSIGNED类型。
4. 如果外键列或被引用列是定义为NULL,则需要确认是否允许NULL值。
如果以上方法都无法解决问题,可以尝试根据错误码1822的提示信息进行排查,通常MySQL会提供非常详细的错误信息,帮助你更快地找到问题所在。
相关问题
mysql外键无法删除
在MySQL中,删除外键时可能会出现错误。其中一个常见的错误是"Error on rename of...",错误代码为152。这个错误通常是由于外键约束导致的,意味着在删除外键之前存在相关联的数据。要解决这个问题,可以使用以下方法:
1.首先,可以通过查询表的键信息来找到外键约束的名称。可以使用命令"show keys from tableName"来查看表的键信息。
2.然后,可以使用"alter table tableName drop foreign key FKxxxxxxxxxxxxxx"的语句来删除指定名称的外键。
3.此外,还可以在删除语句之前加上"SET FOREIGN_KEY_CHECKS=0"的语句,以取消MySQL中的外键约束。这样,删除外键时将不再检查相关联的数据是否存在。
综上所述,要解决MySQL外键无法删除的问题,可以通过查询表的键信息找到外键约束的名称,并使用"alter table"语句来删除指定的外键。另外,还可以使用"SET FOREIGN_KEY_CHECKS=0"来取消MySQL中的外键约束。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [MySQL删除外键问题小结](https://download.csdn.net/download/weixin_38612139/12829228)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [mysql外键删不掉的问题](https://blog.csdn.net/ThisTimed/article/details/17770809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [MySQL中包含外键无法删除数据的解决方案](https://blog.csdn.net/Zou_05/article/details/119937740)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
mysql数据表中设置外键
在MySQL数据表中设置外键需要注意以下几点:
1. 需要建立主外键关系的两个表的存储引擎必须是InnoDB。
2. 外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型。
3. 外键列和参照列必须创建索引,如果外键列没有索引,需要先创建索引。
4. 从表的外键关联的必须是主表的主键,且主键和外键的数据类型必须一致。
5. 在创建从表时,如果不满足以上要求,就会出现“ERROR 1005(HY000): Can't create table”错误。
创建外键约束的SQL语句如下所示:
ALTER TABLE 从表名称 ADD CONSTRAINT 外键名称 FOREIGN KEY (从表外键列名称) REFERENCES 主表名称(主表主键列名称);
例如,创建数据表tb_emp6,并在表tb_emp6上创建外键约束,让它的键deptId作为外键关联到表tb_dept1的主键id,SQL语句如下所示:
CREATE TABLE tb_emp6 (
id INT PRIMARY KEY,
name VARCHAR(20),
deptId INT,
FOREIGN KEY (deptId) REFERENCES tb_dept1(id)
);