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

假设我运行以下查询:

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

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

【问题讨论】:

  • 你可以在存储过程中做到这一点。

标签: mysql select exists temp-tables


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多