2010-06-18 43 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不会。数据库是非常有用的功能请求。