有没有一种方法来检查表是否存在,而不选择和检查它的值?
也就是说,我知道我可以去SELECT testcol FROM testtable并检查返回字段的计数,但似乎必须有一个更直接/优雅的方式来做到这一点。
有没有一种方法来检查表是否存在,而不选择和检查它的值?
也就是说,我知道我可以去SELECT testcol FROM testtable并检查返回字段的计数,但似乎必须有一个更直接/优雅的方式来做到这一点。
当前回答
除了SELECT选项,其他选项都不允许使用SELECT中的数据库名称,所以我这样写:
SELECT COUNT(*) AS cnt FROM information_schema.TABLES
WHERE CONCAT(table_schema,".",table_name)="db_name.table_name";
其他回答
如果在2019年之后阅读这篇文章,请注意MySQL 5.7添加了一个table_exists过程,它将确定一个表是否存在,包括临时表。
用法: 设置@exist为",'BASE TABLE', 'VIEW', 'TEMPORARY'中的一个
CALL sys.table_exists('db1', 't3', @exists);
参考:
https://dev.mysql.com/doc/refman/5.7/en/sys-table-exists.html
您可以查询INFORMATION_SCHEMA表的系统视图:
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'testtable';
如果没有返回行,则表不存在。
SELECT count(*)
FROM information_schema.TABLES
WHERE (TABLE_SCHEMA = 'your_db_name') AND (TABLE_NAME = 'name_of_table')
如果得到非零计数,则表存在。
如果想要正确,请使用INFORMATION_SCHEMA。
SELECT *
FROM information_schema.tables
WHERE table_schema = 'yourdb'
AND table_name = 'testtable'
LIMIT 1;
或者,您也可以使用SHOW TABLES
SHOW TABLES LIKE 'yourtable';
如果结果集中有行,则表存在。
在阅读了以上所有内容后,我更喜欢以下说法:
SELECT EXISTS(
SELECT * FROM information_schema.tables
WHERE table_schema = 'db'
AND table_name = 'table'
);
它确切地指出你想做什么,它实际上返回一个'布尔'