有没有一种方法来检查表是否存在,而不选择和检查它的值?
也就是说,我知道我可以去SELECT testcol FROM testtable并检查返回字段的计数,但似乎必须有一个更直接/优雅的方式来做到这一点。
有没有一种方法来检查表是否存在,而不选择和检查它的值?
也就是说,我知道我可以去SELECT testcol FROM testtable并检查返回字段的计数,但似乎必须有一个更直接/优雅的方式来做到这一点。
当前回答
上述修改后的解决方案不需要明确了解当前数据库。这样就更灵活了。
SELECT count(*) FROM information_schema.TABLES WHERE TABLE_NAME = 'yourtable'
AND TABLE_SCHEMA in (SELECT DATABASE());
其他回答
您可以查询INFORMATION_SCHEMA,而不是依赖于错误。TABLES查看表是否存在。如果有记录,那就是存在的。如果没有记录,它就不存在。
在阅读了以上所有内容后,我更喜欢以下说法:
SELECT EXISTS(
SELECT * FROM information_schema.tables
WHERE table_schema = 'db'
AND table_name = 'table'
);
它确切地指出你想做什么,它实际上返回一个'布尔'
SELECT count(*)
FROM information_schema.TABLES
WHERE (TABLE_SCHEMA = 'your_db_name') AND (TABLE_NAME = 'name_of_table')
如果得到非零计数,则表存在。
性能比较:
MySQL 5.0.77,在一个大约有11000个表的数据库上。 选择一个非最近使用的表,这样它就不会被缓存。 平均每次超过10次。(注意:做不同的表,以避免缓存)。
322ms:显示'table201608'这样的表;
select 1 from table201608 limit 1;
319ms: SELECT count(*) FROM information_schema。table WHERE (TABLE_SCHEMA = 'mydb') AND (TABLE_NAME = 'table201608');
注意,如果你经常运行这个,比如在短时间内处理很多HTML请求,第2个会更快,因为它平均缓存200毫秒或更快。
上述修改后的解决方案不需要明确了解当前数据库。这样就更灵活了。
SELECT count(*) FROM information_schema.TABLES WHERE TABLE_NAME = 'yourtable'
AND TABLE_SCHEMA in (SELECT DATABASE());