2008-11-29 53 views
1

給定一個表X和一個視圖Y(與X具有相同的結構)是否有辦法將原子X重命名爲Z,將原子Y重命名爲X,以便不查詢任何內容都不會看到任何名稱爲X的東西?重命名X並創建視圖也是有效的。我可以原子重命名/替換2個或更多表和視圖嗎?

點會到,作爲一個架構遷移計劃的一部分,與模擬來自新版本的舊版本,以便客戶端代碼兩套可以在同一時間運行的視圖替換舊錶。

MySQL是我的選擇,但其他人的信息也會有用。

回答

5

這在postgres中是微不足道的,在mysql中是不可能的。

mysql免除事務中的模式修改。我有一個postgres背景,所以這是一件很明顯的事情(開始一個事務,做一些事情,提交或回滾 - postgres對於「做些什麼」是不挑剔的)。

如果你通過MySQL的錯誤基地,您可以找到關於這幾個錯誤。

+0

參考? – BCS 2008-11-29 00:28:47

2

的MySQL,Oracle這樣,對於大多數DDL語句(CREATE TABLE,ALTER TABLE等)爲引起 「隱性承諾」。您無法保護其他連接無法使用事務模型查看您的DDL更改。 (我相信Postgres在這方面是不尋常的)。

您可能能夠鎖定表,使用LOCK TABLES,但我懷疑你會只要你重命名錶遺失了鎖! LOCK DATABASE可能有效,但可能需要所有其他客戶端在您的鎖定請求被授予之前完全斷開連接。

這當然會引起其他客戶,而你重命名錶,這可能是一種廉價的操作塊。

相關問題