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-感谢您的迅速回复!