23

这是更新的问题:

当前查询正在执行以下操作:

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

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

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

原来的问题是:

我一直很难弄清楚在 MySql 中是否可以在不必编写块 sql 的情况下进行以下操作:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

如果我在创建表之前单独运行截断,并且该表不存在,那么我会收到一条错误消息。我正在尝试消除该错误消息,而无需添加更多查询。

此代码将使用 PHP 执行。

4

6 回答 6

25

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

本的回答是合理的,除了他似乎有一个他不想要的“不”。仅在表不存在时才将其删除是不太正确的。

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

  1. 如果不存在则创建临时表 fubar ( id int, name varchar(80) )
  2. 截断表 fubar
  3. 插入到 fubar 选择 * 从 barfu

或者只是删除并重新创建

  1. 如果存在则删除表
  2. CREATE TEMPORARY TABLE fubar SELECT id, name FROM barfu

使用纯 SQL,这些是您真正的两类解决方案。我更喜欢第二个。

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

于 2008-09-17T17:12:09.547 回答
3

您可以在“如果不存在则创建”之后进行截断。这样它就永远存在了……并且在那一点上永远是空的。

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar
于 2008-09-17T15:22:45.363 回答
3

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

用法:call Edit_table(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 ;

更多关于 Mysql

于 2009-11-03T10:43:57.080 回答
2

怎么样:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

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

于 2008-09-17T15:22:00.733 回答
0

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

$sql1 = "截断表 fubar";
$sql2 = "如果不存在 fubar 则创建临时表 SELECT id, name FROM barfu";

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

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

PS - 感谢您如此迅速地回复!

于 2008-09-17T15:30:16.750 回答
0

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

于 2009-11-03T10:51:10.333 回答