あるテーブルを別のテーブルの「エイリアス」または「シンボリックリンク」にすることはできますか?


10

同じ構造の2つのテーブルAとBがあります。特定のアプリケーションは、常に両方のテーブルに同じデータを書き込むように作成されています。

ドライブスペースを節約する可能性について同僚と話し合った後、mysqlまたはpostgresqlが別のテーブルの「エイリアス」または「シンボリックリンク」としてテーブルに作成できるかどうか疑問に思っています。

ソフトファイルのシンボリックリンクの動作と非常によく似た動作にしたい。シンボリックリンク自体またはそのターゲットのいずれかから読み取ると同じ出力が生成され、どちらかに書き込むとターゲットが更新されます。


2
テーブルのビューを検討しましたか?

SQL Serverでは、ビューを使用できます。
JNK、2012年

1
どのRDBMSですか?MySQLとPostgresにタグを付けました。ビューはほとんどのRDBMSで機能します。Oracleは、Unixのシンボリックリンクと同じです同義語、持っている
Philᵀᴹ

MySQLとPostgres、はい。テキストでも具体的に言及しています。ビューは私が探していたものとはどういうわけかまったくではなかったと思いましたが、おそらくそれで十分でしょう。どうもありがとう。いくつかの回答を投稿してください:)
user50849 '25

1
なぜ2つのテーブルが必要なのですか?
miracle173

回答:


5

私の知る限り、新しいPostgresqlではINSTEAD OFビューにトリガーを設定できます。したがって、1つのテーブル、1つのビューSELECT * FROM table1、およびINSTEAD OFトリガーfor insert, update, deleteが機能するはずです。このアプローチはMysqlでは機能しません


2

MySQL(MyISAMストレージエンジンのみを使用)では、シンボリックリンクを使用して最初からテーブルを作成できます。LinuxとWindowsで可能です(ハードリンクを使用)。

これがこのテーマに関する私の過去の投稿です

しかし、あなたが提案していることは、LinuxのMySQLの外で行わなければならないでしょう。

この例では

  • / var / lib / mysqlはdatadirです
  • データベースmydbにMyISAMテーブルとしてtable1を作成します。
  • table2をtable1への純粋なシンボリックリンクとして作成します。

ステップ01)table1を作成する

CREATE TABLE mydb.table1
(
    id int not null auto_increment,
    mydata varchar(255) not null,
    primary key (id)
) ENGINE=MyISAM;

ステップ02)TableBを模倣する3つのシンボリックリンクを作成する

cd /var/lib/mysql/mydb
ln -s table1.frm table2.frm
ln -s table1.MYD table2.MYD
ln -s table1.MYI table2.MYI

ステップ03)table1に挿入してtable2から読み取ってみます。その後、逆を試してください。

INSERT INTO table1 (mydata) VALUES ('rolando'),('edwards');
SELECT * FROM table2;
INSERT INTO table2 (mydata) VALUES ('abraham'),('lincoln');
SELECT * FROM table1;

すべてが正常に動作する場合、これがこれを行う方法です。

警告

  1. テーブルは1つだけです、table1
  2. DDLを行う場合
    • table1でDDLを実行します。
    • table1に対するDDLの後にtable2シンボリックリンクを再作成する必要があります
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.