如何检测表是否存在?MySql

如何检测表是否存在?MySql,mysql,constraints,Mysql,Constraints,有人建议我这样做 SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema = 'mydb' AND table_name='ApprovePost'; 然而,它并不可靠和可靠 也许还有别的办法。有人知道吗 这个问题是,如果不存在,我可以创建表,但我会进行第二次传递以添加FK约束。在我的SQL转储文件中,我看到单个表上的contains>130。该表只有6列,其中只有两列需要约束。每次我重

有人建议我这样做

SELECT table_schema, table_name FROM information_schema.tables
WHERE table_schema = 'mydb' AND table_name='ApprovePost';
然而,它并不可靠和可靠

也许还有别的办法。有人知道吗


这个问题是,如果不存在,我可以创建表,但我会进行第二次传递以添加FK约束。在我的SQL转储文件中,我看到单个表上的contains>130。该表只有6列,其中只有两列需要约束。每次我重新启动Apache服务器,或者mono觉得需要在我的webapp中调用我的全局init方法时,这些约束都会不断生成。

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

1) 给它一个约束符号(在数据库中应该是唯一的),然后让添加以静默方式失败/捕获它们

ALTER TABLE tbl ADD CONSTRAINT only_one_please FOREIGN KEY (columnname) ...
2) 或者更好的方法是,首先在
create表中添加外键子句


至于最初的问题:我不知道为什么会发生这种情况,我也无法重现它。从信息模式中选择是一种很好的检查方法,我还没有失败。除了强力检查之外,比如
SELECT*fromtablename LIMIT 0和检查错误,您可能首先要检查除MySQL的查询缓存之外的任何其他缓存机制,如果它们不存在/没有问题,也许可以尝试
选择SQL\u NO\u cache table\u模式,来自信息模式的表名称。表

看起来需要对信息模式表使用
刷新表
命令来反映现有表

参考:


sql“show tables”对您不好吗?@Yehonatan:show tables是MySQL上信息模式的同义词。tables-请参阅页面底部:有趣的是,Yehonatan没有显示它,我可以在上面写一个WHERE。这看起来不一样。我测试过了,它似乎有效。问题是这些FK是生成的(它是我们的ORM)。请问,你如何提议只命名一个?表中FK的数量是已知的,但其他表中的信息是未知的(但其他表并不重要?),这样可以吗?我假设我可以在其他表上重用相同的名称(例如fk_0)
ALTER TABLE post ADD CONSTRAINT fk{0}外键…
,iYou不能对其他表上的约束使用相同的符号(每个数据库唯一),因此可以基于tablename+fieldname或tablename+fk number(tablename_fk_0、tablename_fk_1等)进行命名。