关于MySql:MySql-如果不存在其他表,则创建表吗?

关于MySql:MySql-如果不存在其他表,则创建表吗?

MySql - Create Table If Not Exists Else Truncate?


shmuel613,最好是更新您的原始问题,而不是答复。最好是在一个地方包含完整的问题,而不要在讨论中分散讨论。

本的答案是合理的,除了他似乎不想回答的地方有一个"不"的意思。仅在表不存在的情况下才删除表是不正确的。

您确实需要多个语句。有条件创建然后填充:

  • 如果不存在则创建临时表fubar(id int,name varchar(80))
  • TRUNCATE TABLE fubar
  • 插入fubar SELECT * FROM barfu
  • 或者只是拖放并重新创建

  • 如果存在则删除表fubar
  • 创建临时表fubar SELECT ID,名称为barfu
  • 使用纯SQL,这是您真正的两种解决方案。我喜欢第二更好。

    (通过存储过程,您可以将其简化为一条语句。类似:TruncateAndPopulate(fubar),但是到编写TruncateAndPopulate()的代码时,您将花费更多的时间,而不仅仅是使用上面的SQL。)


    执行任何查询(如果表存在)。

    用法:call Edit_table(database-name,table-name,query-string);

    • 该过程将检查数据库名称下是否存在表名称,如果存在则执行查询字符串。
      以下是存储过程:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    DELIMITER $$

    DROP PROCEDURE IF EXISTS `Edit_table` $$
    CREATE PROCEDURE `Edit_table` (in_db_nm varchar(20), in_tbl_nm varchar(20), in_your_query varchar(200))
    DETERMINISTIC
    BEGIN

    DECLARE var_table_count INT;

    select count(*) INTO @var_table_count from information_schema.TABLES where TABLE_NAME=in_tbl_nm and TABLE_SCHEMA=in_db_nm;
    IF (@var_table_count > 0) THEN
      SET @in_your_query = in_your_query;
      #SELECT @in_your_query;
      PREPARE my_query FROM @in_your_query;
      EXECUTE my_query;

    ELSE
      select"Table Not Found";
    END IF;

    END $$
    DELIMITER ;

    有关Mysql的更多信息


    您可以在"如果不存在则创建"之后进行截断。
    这样,它将始终存在...并在那时始终为空。

    1
    2
    CREATE TABLE fubar IF NOT EXISTS
    TRUNCATE TABLE fubar

    怎么样:

    1
    2
    DROP TABLE IF EXISTS fubar;
    CREATE TABLE fubar;

    或者您是说只想通过一个查询来做到这一点?


    如果您使用的是PHP,请在删除表之前使用mysql_list_tables检查该表是否存在。


    好的,还不错。更具体地说,当前查询正在执行以下操作:

    1
    2
    $sql1 ="TRUNCATE TABLE fubar";
    $sql2 ="CREATE TEMPORARY TABLE IF NOT EXISTS fubar SELECT id, name FROM barfu";

    第一次运行包含此方法的方法时,由于该表尚不存在,它会在截断时生成一条错误消息。

    我唯一的选择是执行"创建表",运行"截断表",然后填写表吗? (3个独立的查询)

    PS-感谢您的迅速回复!


    推荐阅读