在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中,如果表存在,如何避免选择的主要内容,如果未能解决你的问题,请参考以下文章