我可以让一个表成为另一个的“别名”或“符号链接”吗?


10

我有两个具有相同结构的表A和B。编写了某个应用程序,因此它始终将相同的数据写入两个表。

与一位同事讨论了节省驱动器空间的潜力之后,我想知道mysql或postgresql是否可以在表上创建另一个的“别名”或“符号链接”。

我希望该行为与软文件符号链接的行为非常相似;从symlink本身或其目标读取将产生相同的输出,而对其中一个写入将更新目标。


2
您考虑过桌子的景色吗?

在SQL Server中,您可以仅使用视图。
JNK 2012年

1
哪个RDBMS?您已标记MySQL和Postgres。视图将在大多数RDBMS中使用。甲骨文公司拥有的同义词,这是一样的Unix的符号链接
Philᵀᴹ

MySQL和Postgres,是的。我也在文字中特别提到了它们。我认为Views在某种程度上不是我想要的,但也许会很好。非常感谢。发表一些答案:)
user50849'5

1
为什么需要两个桌子?
miracle173

Answers:


5

据我所知,新的Postgresql使您可以INSTEAD OF在视图上使用触发器。因此,拥有一张表,一个视图作为SELECT * FROM table1,并INSTEAD OF为其触发insert, update, delete将为您工作。虽然这种方法在Mysql中不起作用


2

在MySQL中(仅使用MyISAM存储引擎)可以使用符号链接从头开始创建表。在Linux和Windows中(使用硬链接)是可能的:

这是我过去关于这个主题的帖子

但是,您提出的建议必须在Linux的MySQL之外完成。

对于这个例子

  • / var / lib / mysql是datadir
  • 在数据库mydb中将table1创建为MyISAM表
  • 创建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

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. 只有一个表,table1
  2. 如果您执行任何DDL
    • 在表1上执行DDL
    • 您必须在针对table1的DDL之后重新创建table2符号链接
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.