2016-03-17 25 views
0

我嘗試創建一個表作爲查詢作爲以下的選擇結果:CREATE TABLE IF NOT EXISTS x AS(SELECT ...)在執行兩次時插入雙記錄?

CREATE TABLE IF NOT EXISTS X AS(SELECT ...)

這工作正常,一個新的表X與創建足夠的專欄和內容。 但是,當我重新執行DDL查詢現有的表相同內容的再次填充(所以雙...)

  • 首次執行後,表X:

    1 a 
    2 b 
    3 c 
    
  • 後secondexecution,表X:

    1 a 
    2 b 
    3 c 
    1 a 
    2 b 
    3 c 
    

爲什麼?如何解決這個問題?因爲這在我的應用程序用戶執行的,因此它可以被執行多次,這就是爲什麼我把IF NOT EXISTS不重新創建表每次...

最好的問候,

+0

創建sqlfiddle FO它 –

+0

粘貼完整的查詢; – itzmukeshy7

回答

2

這取決於版本。如在documentation描述:

對於CREATE TABLE ... SELECT,如果IF NOT EXISTS給出和 目的地表已經存在,其結果是取決於版本。 的MySQL 5.5.6之前,MySQL的處理聲明如下:

  • CREATE TABLE部分給出的表定義被忽略。即使定義與 現有表格的定義不匹配,也不會發生錯誤。無論如何,MySQL試圖從SELECT部分​​插入行 。
+0

至於「*如何解決這個問題?」 - 在'AS SELECT ...'之前的'CREATE TABLE'語句中定義一個PK,那麼重複顯然會被拒絕。 – eggyal

-1

的MySQL應用這些規則時,各種創建... IF NOT EXISTS複製語句:

每個CREATE DATABASE IF NOT EXISTS語句複製,數據庫是否 與否已經存在於大師。

同樣,每個CREATE TABLE IF NOT EXISTS語句沒有SELECT 都會被複制,無論該表是否已經存在於主服務器上。 這包括CREATE TABLE IF NOT EXISTS ... LIKE。複製 CREATE TABLE IF NOT EXISTS ... SELECT遵循有些不同的 規則;有關更多信息,請參見第17.4.1.6節「複製CREATE TABLE ... SELECT Statements」。

欲瞭解更多信息 - CREATE EVENT IF NOT EXISTS is always replicated in MySQL 5.5, whether or not the event named in the statement already exists on the master.

+0

是downvote?:S – RadAl

+0

這與** replication **沒有任何關係,它是多個MySQL服務器可以保持同步的過程。這個答案與手頭的問題完全不相關,絕對沒有任何用途給OP。你發佈了它,並認爲它不值得被低估,表明對這個問題和你自己的答案都缺乏理解。如果可以的話,我會第二次冷靜下來。 – eggyal

+0

「令人震驚的缺乏理解」 - 只是鼓勵平臺上的新手嘗試提問並嘗試回答更好的意見!謝謝 ! – RadAl

相關問題