在mysql中,如果表存在,如何避免选择

Posted

技术标签:

【中文标题】在mysql中,如果表存在,如何避免选择【英文标题】:In mysql, how to avoid selection if a table exists 【发布时间】:2011-08-18 08:18:00 【问题描述】:

假设我运行以下查询:

CREATE TEMPORARY TABLE IF NOT EXISTS FISH SELECT 'a';

它会创建一个带有“a”的临时表。现在,如果我再次运行查询,表将不会被重新创建,但选择会再次发生 - 因此,表中将有两次“a”。如何防止这种情况发生,即如果表存在,则不应执行任何操作?

【问题讨论】:

你可以在存储过程中做到这一点。 【参考方案1】:

此行为在手册中有明确记录,引用:

对于 CREATE TABLE ... SELECT,如果给出 IF NOT EXISTS 并且表已经存在,mysql 会按如下方式处理语句:

在 CREATE TABLE 部分给出的表定义被忽略。即使定义与现有表的定义不匹配,也不会发生错误。

如果表中的列数与 SELECT 部分生成的列数不匹配,则将选定的值分配给最右边的列。例如,如果表包含 n 列并且 SELECT 生成 m 列,其中 m

如果启用了严格的 SQL 模式并且这些初始列中的任何一个都没有明确的默认值,则语句将失败并出现错误。

并且没有提到任何改变这种行为的方法,所以我想你唯一的解决方案是首先使用单独的查询检查表是否存在,然后 CREATE...SELECT 表如果它不存在。

【讨论】:

以上是关于在mysql中,如果表存在,如何避免选择的主要内容,如果未能解决你的问题,请参考以下文章

mysql - 如果不在另一个表中,则从一个表中选择,否则从另一个表中选择

6.MySQL数据库结构设计

如何选择字符串的一个字符作为单独的行 MySQL

如果表不存在,如何选择不出错

mysql创建索引的原则

MYSQL:如果不存在则创建表