2013-04-25 61 views
0

我有一個項目,我希望能夠在幾個人的本地主機上管理同一個數據庫的多個實例。我希望每個開發人員都能夠將他們的數據庫重新設置爲規範來源,無論他們將數據庫放入哪個狀態。爲此我維護一個標準的數據庫文件。它擁有架構使用CREATE TABLE table_name IF NOT EXISTS {有條件地向mysql表中添加一列

但是,我希望能夠添加到起始表結構,因爲這個項目移動需要。要做到這一點,我希望能夠做到如下ALTER TABLE table_name ADD COLUMN IF NOT EXISTS column_name,但似乎並不存在。我確實注意到存儲過程在互聯網上浮動,解決了這個問題,但我想知道是否有更簡單的東西能夠實現我想到的目標。感謝您的時間和幫助。

+0

可能的重複http://stackoverflow.com/questions/8219714/check-if-column-exists-before-alter-table-mysql?rq=1 – 2013-04-25 16:58:24

+0

重複[檢查列在ALTER TABLE之前是否存在]( http://stackoverflow.com/q/8219714/1409082) – Jocelyn 2013-04-25 16:59:03

+0

我不認爲這是完全重複的。我知道存在解決這個問題的存儲過程。我想知道是否有辦法做到這一點沒有SP – usumoio 2013-04-25 17:02:09

回答

1

用普通的SQL做不到這一點。存儲過程應該最好:讀取information_schema並檢查列是否存在。如果不是 - 執行alter語句。

+0

@Max_dron這似乎是答案。我希望有一個非SP解決方案,但你並不總是得到你想要的。 – usumoio 2013-04-26 00:07:52

1

一種選擇是不檢查任何執行ALTER您聲明:

ALTER TABLE table_name ADD column_name VARCHAR(40); 

(其他城市VARCHAR(40),無論你需要)

如果列不存在,那麼該語句創建它。
如果該列已經存在,則該語句不執行任何操作並返回錯誤。只要忽略錯誤並繼續。

+0

問題是,該語法不存在。也有很好的理由:想象自己添加一個int類型的列,並且數據庫會忽略你的語句,因爲已經有一列有例如鍵入日期。 :-) – 2013-04-25 17:15:12

+1

@Denis感謝您指出我的錯誤。我知道語法錯了,但完全忘記將它改爲有效的語句。我更新了我的答案。 – Jocelyn 2013-04-25 17:32:52

+0

@Jocelyn我打算忽略錯誤,但我認爲這是不好的做法,我不想養成忽略錯誤的習慣。我正在部署此功能,以允許非DBA的人儘可能無縫地與數據庫一起工作,並且錯誤會打破該流程。 – usumoio 2013-04-25 21:13:50

相關問題