2013-10-28 138 views
0

是否有可能根據select語句的結果在MySql中創建條件創建表?從本質上講,如果我有一個由多個客戶端使用的模式,但只有一些需要一個表,我可以創建它基於另一個值...例如...如果我有一個用戶約翰然後創建此表...因爲約翰應用程序需要它。MySQL有條件地創建一個表

東西線沿線的:

IF EXISTS (SELECT * FROM USERS WHERE name='JOHN') 

CREATE TABLE CREATE_THIS 
    (
     ID VARCHAR(255) COLLATE utf8_bin NOT NULL, 
     NAME VARCHAR(255) COLLATE utf8_bin NOT NULL 
    ) 
    ENGINE=MyISAM DEFAULT CHARSET=utf8; 

回答

1

這類業務邏輯並沒有真正應用程序的數據庫層中的歸屬。它通常駐留在更高的級別,在你用來連接數據庫的任何代碼中。

然而,完整性,有一個(非常hackish的)的方式來完成你通過準備從包含SQL字符串中的語句問什麼要執行:

SET @sql := CASE WHEN EXISTS (SELECT * FROM USERS WHERE name='JOHN') THEN 
'CREATE TABLE CREATE_THIS (
    ID VARCHAR(255) COLLATE utf8_bin NOT NULL, 
    NAME VARCHAR(255) COLLATE utf8_bin NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8' 
END; 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

哦,我想我讀了不同的問題。 – user2864740

+0

這適用於選擇已解決的情況。但是,當@sql爲空時,我在準備語句中出現錯誤。有沒有辦法做這個檢查? – islandguy

+0

我用一個else語句將@sql設置爲一個select,我知道它將返回空。這看起來有點冒失。我會考慮將你的建議放在別處。謝謝你的幫助! – islandguy

0

您還可以使用 CREATE表如果不存在(... ...)