Tôi có thể có một bảng là một bí danh của người khác, hay một biểu tượng symlink, một bảng khác không?


10

Tôi có hai bảng có cùng cấu trúc, A và B. Một ứng dụng nhất định được viết để nó luôn ghi cùng một dữ liệu vào cả hai bảng.

Sau khi thảo luận với một đồng nghiệp về tiềm năng tiết kiệm dung lượng ổ đĩa, tôi tự hỏi liệu mysql hoặc postgresql có khả năng tạo trên bàn dưới dạng "bí danh" hay "liên kết tượng trưng" của người khác không.

Tôi muốn hành vi này rất giống với hành vi của một liên kết tệp mềm; trong đó việc đọc từ chính liên kết tượng trưng hoặc mục tiêu của nó sẽ mang lại cùng một đầu ra và viết vào một trong hai sẽ cập nhật mục tiêu.


2
Bạn đã xem xét một cái nhìn của bảng?

Trong SQL Server, bạn chỉ có thể sử dụng một khung nhìn.
JNK

1
RDBMS nào? Bạn đã gắn thẻ MySQL và Postgres. Lượt xem sẽ hoạt động trong hầu hết các RDBMS. Oracle có các từ đồng nghĩa, giống như các liên kết tượng trưng của Unix
Philᵀᴹ

MySQL và Postgres, vâng. Tôi đề cập đến chúng cụ thể trong văn bản là tốt. Tôi nghĩ Lượt xem bằng cách nào đó không hoàn toàn là những gì tôi đang tìm kiếm, nhưng có lẽ nó sẽ ổn thôi. Cảm ơn rất nhiều. Đăng một số câu trả lời :)
user50849

1
và tại sao bạn cần hai bảng?
phép lạ173

Câu trả lời:


5

Theo như tôi biết, một Postgresql mới cho phép bạn có các INSTEAD OFkích hoạt về lượt xem. Vì vậy, có một bảng, một khung nhìn SELECT * FROM table1INSTEAD OFkích hoạt insert, update, deletesẽ hoạt động cho bạn. Cách tiếp cận này sẽ không hoạt động trong Mysql


2

Có thể có trong MySQL (chỉ sử dụng công cụ lưu trữ MyISAM) để tạo bảng từ đầu bằng cách sử dụng liên kết tượng trưng. Nó có thể có trong Linux và Windows (sử dụng các liên kết cứng):

Đây là những bài viết trước đây của tôi về chủ đề này

Tuy nhiên, những gì bạn đang đề xuất sẽ phải được thực hiện bên ngoài MySQL trong Linux.

Ví dụ này

  • / var / lib / mysql là datadir
  • Tạo bảng1 dưới dạng bảng MyISAM trong cơ sở dữ liệu mydb
  • Tạo bảng2 dưới dạng liên kết thuần túy với bảng1

BƯỚC 01) Tạo bảng1

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

BƯỚC 02) Tạo ba liên kết tượng trưng để bắt chước TableB

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

BƯỚC 03) Thử chèn vào bảng1 và đọc từ bảng2. Sau đó thử ngược lại.

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

Nếu mọi thứ hoạt động bình thường, thì đây là cách bạn có thể làm điều này.

CAUPAT

  1. Chỉ có một bảng, bảng1
  2. Nếu bạn làm bất kỳ DDL
    • Thực hiện DDL trên bảng1
    • Bạn phải tạo lại các liên kết tượng trưng bảng2 sau DDL so với bảng1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.