한 테이블을 다른 테이블에 대한 "별칭"또는 "symlink"로 만들 수 있습니까?


10

같은 구조의 A와 B라는 두 개의 테이블이 있습니다. 특정 응용 프로그램은 항상 동일한 데이터를 두 테이블에 쓰도록 작성됩니다.

드라이브 공간 절약 가능성에 대해 동료와 논의한 후, mysql 또는 postgresql이 다른 테이블을 "별칭"또는 "symlink"로 만들 수 있는지 궁금합니다.

동작이 소프트 파일 심볼릭 링크의 동작과 매우 유사하기를 원합니다. 여기서 심볼릭 링크 자체 또는 대상에서 읽을 경우 동일한 출력이 생성되고이 중 하나에 쓰면 대상이 업데이트됩니다.


2
테이블보기를 고려 했습니까?

SQL Server에서는 뷰를 사용할 수 있습니다.
JNK

1
어느 RDBMS? 당신은 MySQL과 Postgres를 태그했습니다. 뷰는 대부분의 RDBMS에서 작동합니다. 오라클은 동의어를 가지고 있으며 이는 Unix 심볼릭 링크와 동일합니다
Philᵀᴹ

MySQL과 Postgres는 그렇습니다. 본문에서도 구체적으로 언급합니다. 나는 Views가 어떻게 든 내가 찾고있는 것이 아니라고 생각했지만 아마도 괜찮을 것입니다. 고마워 일부 답변 게시 :)
user50849

1
왜 두 개의 테이블이 필요합니까?
miracle173

답변:


5

내가 아는 한 새로운 Postgresql을 사용하면 INSTEAD OF뷰를 트리거 할 수 있습니다. 따라서 하나의 테이블, 하나의 뷰 SELECT * FROM table1INSTEAD OF트리거를 사용 insert, update, delete하면 효과가 있습니다. 이 방법은 MySQL에서 작동하지 않습니다.


2

MySQL (MyISAM 스토리지 엔진 만 사용)에서는 심볼릭 링크를 사용하여 처음부터 테이블을 생성 할 수 있습니다. Linux 및 Windows에서 가능합니다 (하드 링크 사용).

이 주제에 대한 내 과거 게시물은 다음과 같습니다.

그러나 제안하는 것은 Linux에서 MySQL 외부에서 수행해야합니다.

이 예의 경우

  • / var / lib / mysql은 datadir입니다
  • 데이터베이스 mydb에서 table1을 MyISAM 테이블로 작성
  • table2를 table1에 대한 순수 심볼릭 링크로 작성

STEP 01) 테이블 1 생성

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

STEP 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

STEP 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을 수행하는 경우
    • table1에서 DDL 수행
    • table1에 대해 DDL 후 table2 심볼릭 링크를 다시 작성해야합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.