约束不在条形码表上,它在依赖于条形码的其他表上。约束条件阻止您删除特定条形码如果其他表中依赖于这些特定条形码的行存在。所以你需要知道从属表中是否有行。
SELECT b.*
FROM barcodes b
LEFT OUTER JOIN child_table c ON b.barcode_id = c.barcode_id
WHERE c.barcode_id IS NULL;
说明:此查询将尝试匹配从条形码行的假想表barcode_child,和那里是在barcode_child没有匹配的行,那么OUTER JOIN返回NULL所有列,这意味着在条形码行免费被删除。
您可能有几个引用条形码的表格。外键约束将在这些表中定义。你可以找出哪些表根据条形码的约束与此查询:
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE (REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME) =
('barcode_schema', 'barcode', 'barcode_id');
我做的barcode_schema和barcode_id名假设,你必须改变那些适合您的环境。
一旦你找到引用条形码的几个表,你可以放在一起一个查询测试所有这些一次,并认为是完全免费的所有家属的条形码:
SELECT b.*
FROM barcodes b
LEFT OUTER JOIN child_table1 c1 ON b.barcode_id = c1.barcode_id
LEFT OUTER JOIN child_table2 c2 ON b.barcode_id = c2.barcode_id
LEFT OUTER JOIN child_table3 c3 ON b.barcode_id = c3.barcode_id
...
WHERE COALESCE(c1.barcode_id, c2.barcode_id, c3.barcode_id, ...) IS NULL;
这只是我上面显示的第一个SELECT的扩展。加入条形码到所有其依赖表,如果在任何表中找不到匹配项,则其所有列的COALESCE()仍为NULL。
也许这将帮助:http://stackoverflow.com/questions/4004205/mysql-show-constraints-on-tables-command – RonaldBarzell