如何检测表是否存在? MySQL的

时间:2010-07-13 18:21:07

标签: mysql constraints

我被建议这样做

SELECT table_schema, table_name FROM information_schema.tables
WHERE table_schema = 'mydb' AND table_name='ApprovePost';

然而,它不可靠且cause me errors on several versions of mysql on windows and linux

也许有另一种方式。有谁知道吗?

这个问题是我可以创建表,如果不存在,但我做第二遍以添加FK约束。在我的SQL转储中,我看到> 130包含在一个表上。该表只有6列,其中只有两列需要约束。每次重新启动Apache服务器时,或者当mono认为需要在我的webapp中调用我的全局init方法时,约束会继续构建和构建。

2 个答案:

答案 0 :(得分:2)

您似乎需要使用FLUSH TABLES命令对INFORMATION_SCHEMA.TABLES反映现有表。

参考:

答案 1 :(得分:0)

如果您现在唯一的实际问题是不断重新创建外键(除了考虑到其他问题可能会破坏MySQL安装),为什么不呢:

1)给它一个约束符号(在数据库中应该是唯一的)并让添加失败静默/ catch'em?

ALTER TABLE tbl ADD CONSTRAINT only_one_please FOREIGN KEY (columnname) ...

2)或者更好的是,首先在create table中添加外键条款?

至于最初的问题:我不知道为什么会发生这种情况,我无法再创造它。从information_schema中选择是非常优选的检查方式,并且还没有让我失望。除了SELECT * FROM tablename LIMIT 0;之类的强力检查并检查错误之外,您首先可能需要检查除MySQL查询缓存之外的任何其他缓存机制,如果它们不存在/没有问题,也许请尝试{{ 1}}。