2010-06-18 45 views
0

我正在將應用程序從不區分大小寫的數據庫遷移到MySQL。我的DBA不允許更改任何Mysql配置設置,因此不能使用「lower_case_table_names」選項。MySQL表別名

MySQL是否有任何別名能夠讓多個表名指向同一個表?

例如,如果用戶和usersB被混淆爲同一個表,那麼這兩個查詢會插入到相同的表:

Insert into USER VALUES (2, 3....); 

Insert into usersB VALUES (2, 3, ....); 

意見接近所需功能,但我想要更新和改變結構命令對所有的別名工作。

謝謝!

回答

1

MySQL是否有任何別名能夠讓多個表名指向同一個表?

沒有這樣的SQL約定 - INSERT語句將一個或多個記錄插入一個表,並且只有一個表。用戶定義的類型可能,但MySQL不支持它們。

視圖可用於呈現一個統一的結果集 - IE:

CREATE VIEW vw_users AS 
    SELECT * FROM USER 
    UNION 
    SELECT * FROM USERSB 

...,還有潛在的更新,但不會爲您所需的功能工作。

+0

感謝您的想法,但我實際上尋找的東西稍有不同:在通過許多名字訪問的表格。例如,將會有一個名爲user的表,但客戶端查詢可能會引用USER user777或UsEr。我有一個約10-20個不同名稱的列表,理想情況下這些名稱將被混淆到單個物理表中。 – David 2010-06-18 19:02:28

0

如果您維護視圖的代碼,則可以使用視圖並使012(s3)或任何DML正常工作。不幸的是,你不能有ALTER語句(或任何DDL)針對所有視圖工作。但是,在更改基表時,可以使用單個腳本重新生成所有視圖,以確保系統同步。

正如我理解你的問題,你正在談論沒有聯合或工會,甚至過濾器的意見 - 只是create view USER as select * from usersB。插入,更新和刪除將在你的例子中起作用。 ALTERs不會。

0

視圖是不一樣的一個表的別名(你可以創建。在支持它的DBMS中使用CREATE ALIAS語句),至少直到表和視圖之間支持外鍵約束,並且客戶端可以確定視圖是否可更新,MySQL不會。數據庫是非常有用的功能請求。