查询检查约束时遇“Unknown column 'table_name' in 'where clause'”错误的排查求助
查询检查约束时遇“Unknown column 'table_name' in 'where clause'”错误的排查求助
兄弟别慌,我来帮你把问题拆解清楚!
首先,你遇到的Unknown column 'table_name' in 'where clause'错误,原因很直接:information_schema.check_constraints这个系统表本身并不包含table_name字段,你直接在WHERE条件里用它自然会报错。MySQL里,约束和表的关联关系是存在information_schema.table_constraints表中的,所以得把这两个表关联起来查询才行。
给你一个能正常运行的查询语句:
SELECT cc.constraint_name, cc.check_clause FROM information_schema.check_constraints cc JOIN information_schema.table_constraints tc ON cc.constraint_name = tc.constraint_name AND cc.constraint_schema = tc.constraint_schema WHERE tc.constraint_schema = 'book_shop' AND tc.table_name = 'inventory' AND tc.constraint_type = 'CHECK' AND cc.constraint_name = 'inventory_chk_1';
执行这个语句后,你就能看到inventory_chk_1这个检查约束具体的规则了(比如quantity >= 0或者price BETWEEN 0 AND 1000这类条件)。
接下来回到你最初的INSERT报错问题:拿到约束规则后,对比你要插入的数据,就能立刻发现哪条数据违反了约束条件。比如如果约束是库存数量不能为负,那你插入负数库存就会触发Error Code: 3819的报错,调整数据符合约束后就能正常插入了。
如果还有其他问题,随时补充细节哈!
备注:内容来源于stack exchange,提问作者Mete
相关产品推荐
相关产品推荐

