MySql - 创建表如果不存在那么截断?

时间:2008-09-17 15:15:43

标签: mysql truncate exists

以下是更新后的问题:

当前查询的行为如下:

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

第一次运行包含此方法的方法时,它会在truncate上生成错误消息,因为该表尚不存在。

我唯一的选择是CREATE TABLE,运行TRUNCATE TABLE,然后填写表格? (3个单独的查询)

原始问题是:

我一直很难在MySql中找出以下内容是否可行,而无需编写块sql:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

如果我在create table之前单独运行truncate,并且该表不存在,那么我会收到一条错误消息。我正在尝试消除该错误消息,而不必再添加任何查询。

此代码将使用PHP执行。

6 个答案:

答案 0 :(得分:22)

shmuel613,最好更新原始问题而不是回复。最好是有一个地方包含完整的问题,而不是在讨论中展开。

Ben的答案是合理的,除了他似乎有一个'不'他不想要的地方。只有当不存在时,才会删除表格。

你确实需要多个陈述。有条件地创建然后填充:

  1. CREATE TEMPORARY TABLE IF NOT NOTFISAR(id int,name varchar(80))
  2. TRUNCATE TABLE fubar
  3. INSERT INTO fubar SELECT * FROM barfu
  4. 或只是删除并重新创建

    1. DROP TABLE IF EXISTS fubar
    2. CREATE TEMPORARY TABLE fubar SELECT id,name FROM barfu
    3. 使用纯SQL,这是您真正的两类解决方案。我更喜欢第二个。

      (使用存储过程,您可以将其缩减为单个语句。类似于:TruncateAndPopulate(fubar)但是当您编写TruncateAndPopulate()的代码时,您将花费更多时间而不仅仅使用上面的SQL。)

答案 1 :(得分:3)

你可以在'create if not exists'之后进行截断。 这样它将永远存在......并且在那时总是空着。

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar

答案 2 :(得分:3)

如果表存在,则执行任何查询。

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

  • 过程将检查database-name下是否存在table-name,如果存在则将执行query-string。 以下是存储过程:
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 ;

More on Mysql

答案 3 :(得分:2)

怎么样:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

或者你的意思是你只想用一个查询来做?

答案 4 :(得分:0)

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

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

第一次运行包含此方法的方法时,它会在truncate上生成错误消息,因为该表尚不存在。

我唯一的选择是“创建表”,运行“TRUNCATE TABLE”,然后填写表格? (3个单独的查询)

PS - 感谢您的回复如此之快!

答案 5 :(得分:0)

如果你正在使用PHP,请在TRUNCATE之前使用mysql_list_tables检查表是否存在。