Error number: MY-012823; Symbol: ER_IB_MSG_998; SQLSTATE: HY000
Message: %s
错误说明
MY-012823,是MySQL家族内一种常见错误号,指示着Symbol为ER_IB_MSG_998,SQLSTATE为HY000 的错误。该错误通常表示MySQL在建表时,外键(Foreign Key)和引用键(Referencing Key)两端引用同一字段,在索引更新过程中出现问题。
常见案例
例如在MySQL数据库中,设置外键时,下面一行代码中,两端的字段id和user_id均为user表中的主键字段。
ALTER TABLE cd ADD CONSTRAINT cd_pk FOREIGN KEY (id) REFERENCES user (user_id);
这种时候,MySQL会报出上述错误823:ER_IB_MSG_998,SQLSTATE:HY000,原因是MySQL在建立外键索引时,不允许该类情况,即在引用方和被引用方同时引用同一字段,此外MySQL也不会去检查所引用外键字段的数据完整性。
解决方法
1. 修改外键在引用端的字段,尽量遵守MySQL的一端引用用,一端插入的规则原则,改为用另一字段替换user_id字段。
2. 检查外键字段的完整性,使用SELECT命令查询外键列的数据,如果存在缺失的数据,就会出现ER_IB_MSG_998错误。在处理这种情况时,可以使用UPDATE或者DELETE语句更新或者删除缺失数据,以保证外键列的完整性。
3. 你也可以试试带有IGNORE参数的ALTER TABLE语句,即ALTER TABLE cd ADD CONSTRAINT cd_pk FOREIGN KEY (id) REFERENCES user (user_id) IGNORE; 如果你使用IGNORE参数,MySQL就会忽略任何现有的外键列内容数据与参考键不匹配的情况。然而mysql又会抛出一个警告,但是不会中断建表过程,也不会报出ER_IB_MSG_998错误。