2011-08-18 90 views
0

比方說,我運行以下查詢:在MySQL中,如何避免選擇,如果一個表存在

CREATE TEMPORARY TABLE IF NOT EXISTS FISH SELECT 'a'; 

它會創建一個臨時表「A」在裏面。現在,如果我再次運行查詢,表格將不會被重新創建,但選擇會再次發生 - 因此,表格將會有兩次「a」。我如何防止這種情況發生,即如果表格存在,不應該採取行動?

+0

你可以在存儲過程中做到這一點。 – Devart

回答

0

此行爲是在手冊中明確記載,報價:

對於CREATE TABLE ... SELECT,如果IF NOT EXISTS,並給出該表已經存在,MySQL的處理聲明如下:

  • 在CREATE TABLE部分給出的表定義被忽略。即使定義與現有表格的定義不匹配,也不會發生錯誤。

  • 如果列在表中的數目和由SELECT部分​​產生的列數之間的不匹配,所選擇的值被分配給最右邊的列。例如,如果表包含n列,並且SELECT生成m列,其中m選擇值分配給表中最右邊的列。每個初始n-m列都分配有其缺省值,或者在列定義中明確指定,或者如果定義中不包含缺省值,則隱式列數據類型爲default。

  • 如果啓用嚴格的SQL模式,任何這些初始列沒有明確的默認值,該語句因錯誤而失敗。

並沒有提到任何方法的,所以我想你唯一的解決辦法是首先檢查表與一個單獨的查詢存在則CREATE...SELECT的表,如果它不存在更改此行爲。