我正在将应用程序从不区分大小写的数据库迁移到MySQL。我的DBA不允许更改任何Mysql配置设置,因此使用“lower_case_table_names”不是一个选项。
MySQL是否有任何别名能力让多个表名指向同一个表?
例如,如果USER和usersB别名为同一个表,那么这两个查询将插入到同一个表中:
Insert into USER VALUES (2, 3....);
和
Insert into usersB VALUES (2, 3, ....);
视图接近所需的功能,但我希望更新和更改结构命令可以对所有别名起作用。
谢谢!
答案 0 :(得分:1)
MySQL是否有任何别名能力让多个表名指向同一个表?
没有这样的SQL约定 - INSERT语句将记录插入到一个表中,并且只有一个表。用户定义的类型可能,但MySQL不支持它们。
视图可用于呈现统一的结果集 - IE:
CREATE VIEW vw_users AS
SELECT * FROM USER
UNION
SELECT * FROM USERSB
...并且可能是可更新的,但不适用于您所需的功能。
答案 1 :(得分:0)
如果维护视图的代码,则可以使用视图并使UPDATE
(或任何DML)正常工作。不幸的是,您不能让ALTER
语句(或任何DDL)对所有视图都有效。但是,在更改基表时,可以使用单个脚本重新生成所有视图,以确保系统处于同步状态。
正如我理解你的问题,你所说的是没有连接或联合甚至过滤器的视图 - 只是create view USER as select * from usersB
。插入,更新和删除将适用于您的示例。 ALTERs不会。
答案 2 :(得分:0)
一个(三个)单词:MERGE storage engine
。请参阅:http://dev.mysql.com/doc/refman/5.1/en/merge-storage-engine.html
在MERGE
中只有一个表是完全没问题的,即使没有一个表也是允许的。
编辑:nevermind,ALTER TABLE不适用于此引擎(MERGE
表的下一个操作将失败。
答案 3 :(得分:0)
视图与表别名(您可以使用支持它的DBMS中的CREATE ALIAS语句创建)不同,至少在表和视图之间支持外键约束之前,客户端可以确定视图是否是更新。 MySQL没有。可以指向不同数据库中的表的表别名非常有用。功能请求。