2014-12-06 20 views
0

我正在致力於一個現有系統升級的項目。MySQL Id列

現有的DB結構必須保持不變,因爲有一個系統正在讀取將在新系統的頂部使用的相同數據庫。

我正在建立一個新的CMS /管理系統使用PHP框架,期望如此看到所有數據庫表自動增量ID字段命名爲「ID」 - 我不想修改任何其他「ID」的PHP處理作爲這個字段的名字 - 相信我這將是一項艱鉅的任務。

現有的數據庫具有非標準的自動增量ID字段命名,如: 「iBmsId」 -shcema:I = INT BMS =表,ID = ID的名稱....

請問有什麼可以對數據庫本身做一個「iBmsId」列的副本,創建一個名爲「id」的具有相應INT值的匹配列?這樣,我的新系統就可以按預期運行,而不必進行嚴重的重寫,同時仍然能夠使現有系統與數據庫通信。

+0

你可以在iBmsId上使用INSERT觸發器,它將插入的值插入到你所謂的'id'列中 – Codeek 2014-12-06 12:54:29

+0

新系統只讀取'id'值還是修改它? – 2014-12-06 12:59:01

+0

新系統將輸入新條目,自動增量將處理ID的編號。系統不應更改ID值。 – Nick 2014-12-06 13:02:59

回答

1

在這種情況下,你可以只使用VIEW :)

http://dev.mysql.com/doc/refman/5.0/en/create-view.html

查看在DBMS就像一個虛擬的表(除非它物化)。視圖添加了一個新的抽象層,它可以支持您如何使用db以及如何實現它們之間的獨立性。它還可以通過隱藏某些字段或只讀視圖來提高安全性。

提示:爲了透明地添加視圖,您可以重命名原點表並創建帶有原點視圖名稱的視圖。這讓你避免修改現有的代碼。

您可以閱讀here如何創建可更新和可插入的視圖(可以像普通表一樣)。

0

如果只有一次一個系統修改的值,那麼你可以使用一個觀點:

create view v_table as 
    select t.*, iBMid as id 
    from table t; 

據推測,一個自增的價值是不會被更新,所以這應該是安全的。但是,請記住:

更具體地講,一個觀點是不是否含有下列的更新:

。 。 。

  • 對基表的任何列的多次引用。

這可能會影響您可能想要以相同方式處理的其他列。