【问题标题】:MySQL inserting data only if table doesn't existMySQL 仅在表不存在时插入数据
【发布时间】:2008-11-14 22:01:06
【问题描述】:

仅使用严格的 SQL(没有 PHP 或其他任何东西),是否可以创建一个表并在该表不存在的情况下将默认数据插入该表

【问题讨论】:

  • 如果表存在,重要的部分什么都没有完成了吗?

标签: mysql sql database


【解决方案1】:

使用 CREATE TABLE ... SELECT 格式:

如果不存在则创建表 tablename as
从默认数据中选择 *;

【讨论】:

    【解决方案2】:

    这是一种方法:

    CREATE TABLE IF NOT EXISTS T (
      ID int(10) unsigned NOT NULL primary key,
      NAME varchar(255) NOT NULL
    );
    
    REPLACE INTO T SELECT 1, 'John Doe';
    REPLACE INTO T SELECT 2, 'Jane Doe';
    

    REPLACE 是对 SQL 标准的 MySQL 扩展,可以插入、删除和插入。

    【讨论】:

      【解决方案3】:

      您可以在其中一个元数据表上进行选择

      if(not exists select * from whatever_meta where table_name = "whatever)
      begin
         ...
      end
      

      你必须做一些研究才能弄清楚到底是怎么...

      【讨论】:

        【解决方案4】:

        能否将表状态存储为变量,然后使用该变量来判断是否插入数据?例如:

        @status = SHOW TABLES LIKE 'my_table';
        INSERT INTO my_table VALUES (1,'hello'),(2,'world') WHERE @status <> false;
        

        Paul Morgan 的答案的问题在于它期望数据已经存在于另一个表中。 Jonas 的回答将是极其详尽的资源,特别是如果有很多 REPLACES(如果表存在,则这是不必要的)。

        【讨论】:

          【解决方案5】:

          可能是我错过了重点,但为什么默认数据不能是一组插入语句......而只需要做的就是创建表,如果它不存在,然后是插入语句......这样默认数据就不必存在于不同的表中。

          【讨论】:

          • 根据条件,您最终可能会将垃圾数据添加到生产表中。
          猜你喜欢
          • 1970-01-01
          • 2018-01-17
          • 2017-04-21
          • 2013-03-23
          • 2013-04-28
          • 1970-01-01
          • 1970-01-01
          • 2015-01-30
          • 2013-06-14
          相关资源
          最近更新 更多