我正在将MS Access应用程序(已将表链接到MSSQL Server)迁移到MySQL。
为了克服一些MSAccess表命名问题,我正在寻求一种解决方案,以添加一个指向MySQL数据库中现有表的MySQL表别名。理想情况下,我想在mysql中创建别名'dbo_customers‘,它也会指向mysql中的customers表。
需要说明的是,我不想在这样的查询中给表名加上别名:
SELECT * FROM customers AS dbo_customers
相反,我希望能够发出以下查询:
SELECT * FROM dbo_customers
并让它从customers表返回数据。
发布于 2009-12-12 02:58:21
从我的脑海中
CREATE VIEW dbo_customers AS
SELECT * FROM customers
也许不是最好的解决方案,但应该可以工作,因为视图是可更新的。肯定适用于只读模式。
发布于 2009-12-12 02:58:32
您可以创建View。
CREATE VIEW dbo_customers AS SELECT * FROM customers;
如果这对您不起作用,您可以尝试创建表的卷影副本,并使用触发器来保持表同步。
例如:
CREATE TABLE t1( id serial primary key, field varchar(255) not null );
CREATE TABLE dbo_t1( id serial primary key, field varchar(255) not null );
-- INSERT trigger
CREATE TRIGGER t1_dbo_insert AFTER INSERT ON t1
FOR EACH ROW BEGIN
INSERT INTO dbo_t1 SET field = NEW.field;
-- No need to specify the ID, it should stay in-sync
END
-- UPDATE trigger
CREATE TRIGGER t1_dbo_update AFTER UPDATE ON t1
FOR EACH ROW BEGIN
UPDATE dbo_t1 SET field = NEW.field WHERE id = NEW.id;
END
-- DELETE trigger
CREATE TRIGGER t1_dbo_delete AFTER DELETE ON t1
FOR EACH ROW BEGIN
DELETE FROM dbo_t1 WHERE id = OLD.id;
END
这不是一个确切的“化名”,也远远谈不上完美。但如果所有其他方法都失败了,这也是一个选择。
发布于 2010-01-15 18:03:15
通过合并表引擎,MySQL有一个更简单的解决方案:
假设我们有一个名为rus_vacancies
的表,并且需要它的英语等效项
create table eng_vacancies select * from rus_vacancies;
delete from eng_vacancies;
alter table eng_vacancies ENGINE=MERGE;
alter table eng_vacancies UNION=(rus_vacancies);
现在,对于任何读写操作,表rus_vacancies
等于表eng_vacancies
一个限制-原始表必须有ENGINE=MyISAM (可以通过“alter table rus_vacancies ENGINE=MyISAM
”轻松完成)
https://stackoverflow.com/questions/1890155
复制相似问题