web-dev-qa-db-ja.com

MySQLでテーブルエイリアスを作成する方法

MS Accessアプリケーション(MSSQLサーバーにテーブルをリンクしている)をMySQLに移行しています。

MSAccessテーブルの名前付けに関するいくつかの問題を解決する手段として、MySQLデータベース内の既存のテーブルをポイントするMySQLテーブルエイリアスを追加するソリューションを探しています。理想的には、mysqlでもCustomersテーブルを指すエイリアス「dbo_customers」をmysqlで作成したいと思います。

明確にするために、私はnotクエリ内のテーブル名に次のようなエイリアスを付けたいと思っています。

SELECT * FROM customers AS dbo_customers

しかし、むしろ次のクエリを発行できるようにしたいと思います。

SELECT * FROM dbo_customers

そして、customersテーブルからデータを返すようにします。

23
rswolff

頭の上から

CREATE VIEW dbo_customers AS
SELECT * FROM customers

おそらく最善の解決策ではありませんが、ビューが更新可能であるため機能するはずです。間違いなく読み取り専用で動作します

36
DrewM

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

正確には「エイリアス」ではなく、完全とは言い難い。しかし、他のすべてが失敗した場合のオプションです。

6
Atli

Access fromの「SQLにリンクされた」テーブルの名前は常に変更します

{dbo_NAME}から{NAME}へ。

リンクはテーブル名を{dbo_NAME}として作成しますが、アクセス時にdbo_接頭辞に問題が発生する場合があります。

1
murlan

@OMGポニーポニーはコメントで言った:

テーブルの名前を変更しませんか?

...そしてそれは私にとって明白な答えのようです。

ODBC MySQLテーブルCustomersのリンクテーブルを作成する場合、それはCustomersと呼ばれ、その後、テーブルの名前をdbo_customersに変更するだけです。私が確認できる必要はまったくありません。この目的のために、MySQLでビューを作成します。

そうは言っても、MySQLテーブルに同じ名前が付けられていないときにSQL Serverのテーブル名を使用していたAccessアプリは使いたくありません-これは混乱を招き、メンテナンスの問題につながります(つまり、リンクされたテーブルの方が簡単です) Accessのフロントエンドに、可能な限りMySQLテーブルと同じ名前を付けます。私があなたの立場にいた場合、検索と置換ユーティリティを取得し、Accessフロントエンド全体ですべてのSQL Serverテーブル名をMySQLテーブル名に置き換えます。おそらく一度に1つのテーブルで行う必要がありますが、私の意見では、これを行うのにかかる時間は、Accessのフロントエンドの開発が進むにつれて、明確にするために十分とは言えません。

1
David-W-Fenton

エイリアスはいいですが、MySQLにはそのような機能があります[〜#〜] [〜#〜]

ビューを作成する以外に、ニーズに対応できるオプションの1つは、ローカルで FEDERATEDストレージエンジン を使用することです。

CREATE TABLE dbo_customers (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    PRIMARY KEY  (id),
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://fed_user@localhost:9306/federated/customers';

現在、いくつかの FEDERATEDストレージエンジンの制限 があります。ここにいくつかの特に重要なものがあります:

  • FEDERATEDテーブルはトランザクションをサポートしていません
  • FEDERATEDテーブルはクエリキャッシュでは機能しません
1
Marcus Adams

customersテーブルに対応するdbo_customersという名前の view を作成できます。

0
Ben S