如何在MySQL中创建表别名

rsw*_*lff 26 mysql sql sql-server ms-access

我正在将MS Access应用程序(将表链接到MSSQL服务器)迁移到MySQL.

作为克服一些MSAccess表命名问题的一种方法,我正在寻找一种解决方案来添加MySQL表别名,该别名将指向MySQL数据库中的现有表.理想情况下,我想在mysql中创建别名'dbo_customers',它也指向mysql中的customers表.

需要明确的是,我希望别名这样的查询中的表名:

SELECT * FROM customers AS dbo_customers
Run Code Online (Sandbox Code Playgroud)

但我希望能够发出以下查询:

SELECT * FROM dbo_customers
Run Code Online (Sandbox Code Playgroud)

并让它从customers表返回数据.

Dre*_*ewM 38

在我的头顶

CREATE VIEW dbo_customers AS
SELECT * FROM customers
Run Code Online (Sandbox Code Playgroud)

也许不是最好的解决方案,但应该可以工作,因为视图是可更新的.肯定适用于只读

  • 它绝对是最简单的大卫。它的行为与原始表几乎相同。您可以写入它,将其连接到各种查询中,等等。性能方面,我不太确定,但是从您的软件和查询的角度来看,出于大多数目的,该视图与真实表无法区分。 (2认同)
  • 为什么这会是一个糟糕的解决方案?它似乎完美地回答了这个问题。效率低下吗?我正在使用一个遗留系统,在该系统中,原始开发人员将用户信息表命名为一长串随机字符。我希望能够以“用户”身份访问它。(出于各种原因,不,我不能只重命名现有表。) (2认同)

Atl*_*tli 6

您可以创建一个视图.

CREATE VIEW dbo_customers AS SELECT * FROM customers;
Run Code Online (Sandbox Code Playgroud)

如果这对您不起作用,您可以尝试创建表的阴影副本,并使用触发器来保持表同步.

例如:

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
Run Code Online (Sandbox Code Playgroud)

不完全是'别名',远非完美.但如果一切都失败了,这是一个选择.