以下是更新后的问题:
当前查询的行为如下:
$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执行。
答案 0 :(得分:22)
shmuel613,最好更新原始问题而不是回复。最好是有一个地方包含完整的问题,而不是在讨论中展开。
Ben的答案是合理的,除了他似乎有一个'不'他不想要的地方。只有当不存在时,才会删除表格。你确实需要多个陈述。有条件地创建然后填充:
或只是删除并重新创建
使用纯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);
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 ;
答案 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检查表是否存在。