检查表是否存在,如果不存在,则创建它。

5
我正在使用 Odbc 连接到 MySQL 服务器,想知道如何检查我的数据库中是否存在一个表,如果不存在,则创建它。
3个回答

7

使用 CREATE TABLE IF NOT EXISTS

更新

值得一提的是,并非所有RDBMS都支持 CREATE ... IF NOT EXISTS。MySQL 支持,但对于那些寻求更具可移植性解决方案的人来说,知道你有多种(效率较低但功能相同)实现相同目的的方法:

  • 无条件地发出CREATE TABLE语句;如果表已经存在,则该语句将失败,在这种情况下,只需忽略错误并继续执行。
  • 从 ANSI information_schematables 对象中选择 SELECT,以查看给定的表是否已经存在(最初由 @Derek 建议 -- 请参见 @lexu's answer 获取实际查询); 根据结果,要么发出 CREATE TABLE -- 要么不发出(在访问 information_schema.tables 时要注意诸如表名大小写敏感性、您的表可能出现在多个模式中等问题)。

3
除了Vlad Romanscanu使用的一种简洁的语句创建表如果不存在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中,你可能会想要省略最后的“group by”语句。我通常会坚持保留它,这样在使用其他DBMS时就不会遇到不愉快的情况。但是,在这种情况下,完全是MySQL特有的,有点微妙。


+1. 在保存 information_schema 更新后看到了你的帖子,抱歉。 - vladr
@Vlad Romascanu:不用道歉,你已经完成了一个很好的回答。为什么不从我的答案中提取查询,然后我会删除我的答案。 - lexu
我链接了你的帖子,不要删除它。 :) - vladr

1

我不知道这个mysql的语法,但是我曾经使用过的所有数据库都提供了一组包含有关数据的元数据的表。即系统表。您可以仅使用where子句中的表名在正确的系统表上执行select count以查找它是否存在。可能还有其他方法。

我建议查看mysql文档以获取有关系统表及其访问方式的信息。由于是mysql,所以可能非常简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接