我正在使用与MySQL服务器的Odbc连接,并想知道如何检查我的数据库中是否存在表,如果不存在,则创建它。
答案 0 :(得分:8)
对于记录,并非所有RDBMS都支持CREATE ... IF NOT EXISTS
。 MySQL 确实,但对于那些寻求更便携解决方案的人来说,要知道你有多种(效率较低但功能正常)的方法来实现同样的目标:
CREATE TABLE
;如果表已经存在,则该语句将失败,在这种情况下,只需吞下错误并继续information_schema
中的SELECT
对象的tables
,以查看某个表是否已存在(最初由@Derek
建议 - 请参阅@lexu
's answer用于实际查询);根据结果,问题CREATE TABLE
- 或者不是(当访问information_schema.tables
时要注意表名称区分大小写等问题,表格出现在多个模式中的可能性等等。)答案 1 :(得分:3)
除了Vlad Romanscanu在一个甜蜜的直接陈述中对create table if not exists NEW_TABLE_NAME
的处理方式外,总有选择查询INFORMATION_SCHEMA。 (我认为这就是Derek CLarkson所建议的)。
这种方法确实需要更多的客户端编码......
您可以使用此查询:
select count(TABLE_NAME)
from INFORMATION_SCHEMA
where TABLE_SCHEMA = 'your schema'
and TABLE_NAME = 'your table'
group by TABLE_NAME
在Mysql中 注意你可能会想要忽略最后的“分组”,我倾向于对它进行一点点关注并留下它,所以我没有不愉快在处理另一个DBMS时遇到。
这个案例,完全是MySQL特有的,是边缘的!
答案 2 :(得分:1)
我不知道mysql的语法,但是我用过的所有数据库都提供了一组包含有关数据的元数据的表。即系统表。您可以使用where子句中的表名简单地对正确的系统表执行选择计数,以确定它是否存在。也可能有其他方式。
我建议在mysql上查看doco,了解系统表的信息以及如何访问它们。作为mysql,它可能很简单。