MS Accessアプリケーション(MSSQLサーバーにテーブルをリンクしている)をMySQLに移行しています。
MSAccessテーブルの名前付けに関するいくつかの問題を解決する手段として、MySQLデータベース内の既存のテーブルをポイントするMySQLテーブルエイリアスを追加するソリューションを探しています。理想的には、mysqlでもCustomersテーブルを指すエイリアス「dbo_customers」をmysqlで作成したいと思います。
明確にするために、私はnotクエリ内のテーブル名に次のようなエイリアスを付けたいと思っています。
SELECT * FROM customers AS dbo_customers
しかし、むしろ次のクエリを発行できるようにしたいと思います。
SELECT * FROM dbo_customers
そして、customersテーブルからデータを返すようにします。
頭の上から
CREATE VIEW dbo_customers AS
SELECT * FROM customers
おそらく最善の解決策ではありませんが、ビューが更新可能であるため機能するはずです。間違いなく読み取り専用で動作します
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
正確には「エイリアス」ではなく、完全とは言い難い。しかし、他のすべてが失敗した場合のオプションです。
Access fromの「SQLにリンクされた」テーブルの名前は常に変更します
{dbo_NAME}
から{NAME}
へ。
リンクはテーブル名を{dbo_NAME}
として作成しますが、アクセス時にdbo_接頭辞に問題が発生する場合があります。
@OMGポニーポニーはコメントで言った:
テーブルの名前を変更しませんか?
...そしてそれは私にとって明白な答えのようです。
ODBC MySQLテーブルCustomersのリンクテーブルを作成する場合、それはCustomersと呼ばれ、その後、テーブルの名前をdbo_customersに変更するだけです。私が確認できる必要はまったくありません。この目的のために、MySQLでビューを作成します。
そうは言っても、MySQLテーブルに同じ名前が付けられていないときにSQL Serverのテーブル名を使用していたAccessアプリは使いたくありません-これは混乱を招き、メンテナンスの問題につながります(つまり、リンクされたテーブルの方が簡単です) Accessのフロントエンドに、可能な限りMySQLテーブルと同じ名前を付けます。私があなたの立場にいた場合、検索と置換ユーティリティを取得し、Accessフロントエンド全体ですべてのSQL Serverテーブル名をMySQLテーブル名に置き換えます。おそらく一度に1つのテーブルで行う必要がありますが、私の意見では、これを行うのにかかる時間は、Accessのフロントエンドの開発が進むにつれて、明確にするために十分とは言えません。
エイリアスはいいですが、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ストレージエンジンの制限 があります。ここにいくつかの特に重要なものがあります:
customers
テーブルに対応するdbo_customers
という名前の view を作成できます。