MySQL Error number: MY-012806; Symbol: ER_IB_MSG_981; SQLSTATE: HY000

文档解释

Error number: MY-012806; Symbol: ER_IB_MSG_981; SQLSTATE: HY000

Message: %s

Error number: MY-012806; Symbol: ER_IB_MSG_981; SQLSTATE: HY000

错误说明

ER_IB_MSG_981错误是由MySQL服务器自己生成的,用于指示某个表未能正常处理,错误信息如下:

“Table … has a foreign key constraint where the referenced table is an internal InnoDB table. InnoDB internal tables are not supported in this context.”

这个错误指向以下两个显而易见的不正确的SQL操作:

1. 在外键定义的表中引用的参考表是InnoDB内部表,这是不允许的。

2. 用于定义外键的表包含多个外键,其中至少一个外键引用的是InnoDB内部表,而这又是不被允许的。

常见案例

常见案例

另一个常见的案例是,当用户使用外键来引用多个表,其中至少一个表是InnoDB内部表时,就会出现此问题。例如,如果用户试图使用两个表(InnoDB_table1和table2)作为外键,其中InnoDB_table1是一个InnoDB内部表,table2也是一个用户的表,则将引发此错误。

解决方法

1. 确保参考表不是InnoDB内部表:如果正在使用外键来引用某个表,请确保该表不是InnoDB内部表。 除了书面确认表的类型外,可以使用mysql查询来检查表是否是InnoDB内部表: SHOW TABLE STATUS WHERE Engine=InnoDB。

2. 将外键定义到相同的表:当某个表拥有多个外键,其中至少一个外键指向InnoDB内部表时,则可以尝试把该表的所有外键定义移动到同一个表中,而不是将外键分散在多个表上。

3. 将外键定义更改为可接受的格式:有时一个表的外键定义可能是不被允许的。例如,某些外键可能引用了多个表,而MySQL仅允许它指向一个表。在这种情况下,可以尝试根据业务需求,重新定义外键及其链接。

你可能感兴趣的