2016-05-14 65 views
0

非常簡單:將創建一個已存在的SQL表覆蓋它嗎?

如果我在數據庫中創建一個表,它是否會刪除或覆蓋另一個同名的表?

我在遊戲中有一個腳本需要一張信息表。 我可以簡單地運行這個每次腳本啓動?:

CREATE TABLE player_data (UniqueID string, Money int) 

這樣當別人運行在他們的遊戲腳本,該表將被創建,但如果他們再次運行它,它不會被覆蓋?

+2

在我用過的數據庫引擎上,試圖(重新)創建一個已經存在的表會導致錯誤。 –

+3

我會非常警惕一個數據庫,*不會將此視爲錯誤。 – chepner

+5

難道你沒有通過簡單地運行你的陳述兩次找出答案嗎?(比在這裏寫你的問題的時間少得多)? –

回答

2

但是如果他們再次運行它,它不會被覆蓋?

不需要。一般來說,在CREATE成功之前,您必須先刪除表。

當涉及到實際的實現時,例如表是臨時的還是永久的,這裏有很多例外,多個用戶可以擁有相同的表名,只要他們使用不同的用戶名即可。查看您的特定服務器版本是否有這種例外。

1

這取決於您正在使用哪個數據庫引擎。在MySQL中有CREATE TABLE IF NOT EXISTS,使它只會嘗試創建表,如果它不存在。

所以你的陳述看起來像CREATE TABLE IF NOT EXISTS player_data (UniqueID string, Money int)。如果沒有名爲player_data的表,則會創建一個新表。但是,如果已經有一個名爲player_data的表,那麼數據庫不會發生任何修改。

對於大多數流行的數據庫引擎,通常有替代方法可以做類似的事情。

+0

但是'IF NOT EXISTS'是你必須明確提供的東西。我認爲OP關心的是意外覆蓋現有的表格。 – chepner

+0

表格首次不存在,並且player_data表格將以'CREATE TABLE IF NOT EXISTS player_data(UniqueID string,Money int)'創建'但是下次這個語句將運行時,將不會有表格修改或創建,該表已經存在。我會更新我的答案,使其更清楚。 –

相關問題