Hai bảng có cùng tên trong MySQL


8

Tôi đã gặp vấn đề kỳ lạ này ngày hôm nay khi tôi đánh rơi một cái bàn tạm thời. Tôi bỏ bảng tạm thời và giải thích bảng chỉ để xác minh. Nhưng, cái bàn không bị rơi. Sau một số tìm kiếm tôi thấy rằng:

MySQL cho phép tạo một bảng tạm thời có cùng tên với một bảng vĩnh viễn. Vì vậy, bảng tạm thời đã bị loại bỏ và không phải là bảng vĩnh viễn. Tôi đã thực sự bối rối với bảng mà tôi đang làm việc.

Phiên bản MySQL: 5.1.36-Enterprise-gpl-pro-log

Đây là những gì tôi đã thử nghiệm:

mysql> create table test(id int);
Query OK, 0 rows affected (0.00 sec)

mysql> desc test;

| Field | Type    | Null | Key | Default | Extra |
--------------------------------------------------
 id       int(11)   YES           NULL

 mysql> create temporary table test(id int);
 Query OK, 0 rows affected (0.00 sec)



mysql> desc test;

| Field | Type    | Null | Key | Default | Extra |
--------------------------------------------------
 id       int(11)   YES           NULL


mysql> drop table test;
 Query OK, 0 rows affected (0.00 sec)

 mysql> desc test;

| Field | Type    | Null | Key | Default | Extra |
--------------------------------------------------
 id       int(11)   YES           NULL

Đây có phải là một lỗi hoặc có một cách khác để khắc phục điều này?

Câu trả lời:


6

MySQL cho phép bạn tạo một bảng tạm thời với một tên hiện có vì chúng không có cùng "phạm vi". Một bảng tạm thời chỉ hiển thị trong phiên và nó được bỏ ở cuối phiên. Nếu bạn có cùng tên, MySQL "ẩn" bảng gốc cho đến khi bạn thả bảng tạm thời.

Bạn có thể tham khảo phần Bảng tạm thời trong tài liệu MySQL

Tối đa


1
Điều gì xảy ra nếu tôi cần chèn một số bản ghi vào bảng cố định khi tôi có một bảng tạm thời có cùng tên với bảng vĩnh viễn trong cùng một phiên.
BALA

Bạn chỉ đơn giản là không thể. Bạn phải thêm tiền tố vào bảng của bạn hoặc tìm một tên khác.
Maxime Fouilleul

1
@BALA, Vì các bảng tạm thời không cần tồn tại trong cơ sở dữ liệu "thực", bạn chỉ cần đặt chúng vào cơ sở dữ liệu "giả", ví dụ : create temporary table fake_db.t as select*from t.
Pacerier

1

Từ hướng dẫn ( TẠO BẢNG ):

Bảng TẠM THỜI chỉ hiển thị cho phiên hiện tại và được tự động loại bỏ khi phiên đóng cửa. Điều này có nghĩa là hai phiên khác nhau có thể sử dụng cùng một tên bảng tạm thời mà không xung đột với nhau hoặc với bảng không TẠM THỜI hiện có cùng tên. (Bảng hiện có bị ẩn cho đến khi bảng tạm thời bị hủy.)

Điều đó có nghĩa là sau khi bạn tạo một bảng tạm thời có cùng tên với một số bảng hiện có, bạn không thể truy cập vào bảng bình thường theo tên đó mà chỉ có một bảng tạm thời (trong phiên đó). Nếu bạn nghĩ rằng mở ra không gian cho một lỗi, hãy sử dụng một tên khác cho bảng tạm thời (ví dụ: sử dụng tiền tố temp_) - điều đó đơn giản và không để lại không gian cho sự nhầm lẫn.


0

Bạn đã trả lời câu hỏi này trong câu hỏi đầu tiên của bạn. Bạn không " cần chèn các bản ghi vào một bảng cố định ... cùng tên .... bảng tạm thời ... cùng một phiên" vì bạn có quyền kiểm soát các tên bảng!

Bạn chỉ cần đảm bảo rằng bảng tạm thời được cung cấp tiền tố / hậu tố tmp _ / _ tmp hoặc tương tự vì điều này sẽ tránh mọi sự nhầm lẫn (như được gọi bởi @SpeedyGonsales).

Nếu bây giờ bạn đang mắc phải loại sai lầm này, hãy nghĩ xem sẽ dễ dàng như thế nào đối với ai đó mới đối với hệ thống trong thời gian một năm! Tổ chức của bạn (ngay cả khi chỉ có bạn!) Nên có quy ước đặt tên , nếu không, bạn sẽ có loại SNAFU này .

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.