MySql-如果不存在则创建表吗?
这是更新的问题:
当前查询正在执行以下操作:
$sql1 = "TRUNCATE TABLE fubar"; $sql2 = "CREATE TEMPORARY TABLE IF NOT EXISTS fubar SELECT id, name FROM barfu";
第一次运行包含此方法的方法时,由于该表尚不存在,它将在截断时生成一条错误消息。
我唯一的选择是执行"创建表",运行" TRUNCATE TABLE"然后填充表吗? (3个独立的查询)
最初的问题是:
我一直很努力尝试找出MySql中是否可能在不编写块sql的情况下进行以下操作:
CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar
如果我在创建表之前单独运行truncate,但该表不存在,则会收到错误消息。我试图消除该错误消息,而不必添加任何其他查询。
此代码将使用PHP执行。
解决方案
回答
怎么样:
drop table if exists fubar; create table fubar;
还是我们只是想通过一个查询来完成?
回答
我们可以在"如果不存在创建"之后进行截断。
这样,它将永远存在...并在那时永远是空的。
CREATE TABLE fubar IF NOT EXISTS TRUNCATE TABLE fubar
回答
好吧,还不错。更具体地说,当前查询正在执行以下操作:
$sql1 = "TRUNCATE TABLE fubar"; $sql2 = "CREATE TEMPORARY TABLE IF NOT EXISTS fubar SELECT id, name FROM barfu";
第一次运行包含此方法的方法时,由于该表尚不存在,它将在截断时生成一条错误消息。
我唯一的选择是执行"创建表",运行"截断表",然后填充表吗? (3个独立的查询)
PS感谢我们如此迅速的回应!
回答
shmuel613,最好是更新原始问题,而不是答复。最好是在一个地方包含完整的问题,而不要在讨论中分散讨论。
Ben的答案是合理的,除了他似乎不想回答的地方有一个" not"。仅在表不存在的情况下删除表是不正确的。
我们确实需要多个语句。有条件创建然后填充:
- 如果不存在,则创建临时表fubar(id int,name varchar(80))
- TRUNCATE TABLE fubar
- 插入fubar SELECT * FROM barfu
或者只是拖放并重新创建
- 如果存在则删除表fubar
- 创建临时表fubar SELECT ID,名称为barfu
使用纯SQL,这是我们真正的两类解决方案。我喜欢第二更好。
(通过存储过程,我们可以将其简化为单个语句。类似:TruncateAndPopulate(fubar),但是到编写TruncateAndPopulate()的代码时,我们将花费更多的时间,而不仅仅是使用上述SQL。
回答
如果表存在,则执行任何查询。
用法:调用Edit_table(数据库名称,表名称,查询字符串);
- 该过程将检查数据库名称下是否存在表名称,如果存在则执行查询字符串。以下是存储过程:
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
回答
如果使用的是PHP,请在截断表之前使用mysql_list_tables检查该表是否存在。