2008-09-17 55 views
19

這裏是更新的問題:MySql - 創建表如果不存在Else截斷?

當前查詢是做這樣的:

$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 

如果我在創建表之前單獨運行truncate,並且表不存在,則會收到錯誤消息。我試圖消除該錯誤消息,而不必添加任何更多的查詢。

此代碼將使用PHP執行。

回答

20

shmuel613,最好是更新您的原始問題,而不是回覆。如果只有一個地方包含完整的問題,而不是在討論中展開,那最好。

本的答案是合理的,除了他似乎有一個'不',他不想要一個。只有在不存在存在的情況下才會丟掉表格。

您確實需要多個語句。不論有條件創造然後填充:

  1. CREATE TEMPORARY TABLE IF NOT EXISTS FUBAR(ID INT,名稱爲varchar(80))
  2. TRUNCATE TABLE FUBAR
  3. INSERT INTO FUBAR SELECT * FROM barfu

或者只是刪除並重新

  1. DROP TABLE IF EXISTS FUBAR
  2. CREATE TEMPORARY TABLE fubar SELECT id,name FROM barfu

對於純SQL,這些是您的兩種真正的解決方案。我更喜歡第二個。 (使用存儲過程可以將它簡化爲單個語句,例如:TruncateAndPopulate(fubar)但是在您爲TruncateAndPopulate()編寫代碼時,您將花費更多的時間,而不僅僅是使用上面的SQL。 )

2

怎麼樣:

drop table if exists fubar; 
create table fubar; 

還是你的意思,你只是想用一個單一的查詢辦呢?

+0

如果t _doesn't_存在,請放下它? – 11684 2012-07-01 18:02:00

3

您可以在'如果不存在'後創建truncate。 這樣它就會一直存在......並且在那個時刻總是空着。

CREATE TABLE fubar IF NOT EXISTS 
TRUNCATE TABLE fubar 
0

好吧,那就不錯了。更具體地講,當前的查詢做這樣的事情:

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

第一次運行包含此方法,由於該表不存在,就產生對截斷的錯誤消息。

是我唯一的選擇做「創建表」,運行「TRUNCATE TABLE」,然後填寫表? (3個獨立查詢)

PS - 感謝您的回覆如此之快!

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 ; 

More on Mysql