07/05/2018, 15:13

Bảng tạm (Temporary Table) trong SQL

Có nhiều RDBMS hỗ trợ Bảng tạm (Temporary Table). Bảng tạm (Temporary Table) là một tính năng tuyệt vời giúp bạn lưu giữ và xử lý các kết quả trung gian bằng việc sử dụng các khả năng như chọn, cập nhật, kết hợp giống như bạn có thể sử dụng với các bảng điển hình trong SQL Server. ...

Có nhiều RDBMS hỗ trợ Bảng tạm (Temporary Table). Bảng tạm (Temporary Table) là một tính năng tuyệt vời giúp bạn lưu giữ và xử lý các kết quả trung gian bằng việc sử dụng các khả năng như chọn, cập nhật, kết hợp giống như bạn có thể sử dụng với các bảng điển hình trong SQL Server.

Bảng tạm (Temporary Table) có thể rất hữu ích trong một số trường hợp khi bạn muốn lưu giữ dữ liệu tạm thời. Điều quan trọng nhất bạn cần nên biết về Bảng tạm (Temporary Table) là chúng có thể bị xóa khi Client Session hiện tại kết thúc.

Bảng tạm (Temporary Table) là có sẵn từ MySQL phiên bản 3.23 trở đi. Nếu bạn sử dụng một phiên bản cũ hơn, bạn không thể sử dụng tính năng này, nhưng bạn có thể sử dụng các Heap Table.

Như đã đề cập, bảng tạm sẽ chỉ tồn tại khi session là còn tồn tại. Nếu bạn chạy code trong PHP script, bảng tạm sẽ bị hủy tự động khi script kết thúc việc thực thi. Nếu bạn được kết nối với MySQL Database thông qua chương trình MySQL Client, thì bảng tạm sẽ tồn tại tới khi bạn đóng Client hoặc hủy bảng.

Ví dụ

Ví dụ sau minh họa cách sử dụng của bảng tạm.

mysql> CREATE TEMPORARY TABLE DOANHTHU (
    -> ten_san_pham VARCHAR(50) NOT NULL
    -> , tong_doanh_thu DECIMAL(12,2) NOT NULL DEFAULT 0.00
    -> , gia_trung_binh DECIMAL(7,2) NOT NULL DEFAULT 0.00
    -> , tong_so_luong INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO DOANHTHU
    -> (ten_san_pham, tong_doanh_thu, gia_trung_binh, tong_so_luong)
    -> VALUES
    -> ('iphone7', 30, 15, 2);

mysql> SELECT * FROM DOANHTHU;
+--------------+-------------+----------------+------------------+
| ten_san_pham | tong_doanh_thu | gia_trung_binh | tong_so_luong |
+--------------+-------------+----------------+------------------+
| iphone7     |      30 |          15 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

Khi bạn thông báo một lệnh SHOW TABLES, thì bảng tạm của bạn sẽ không được liệt kê trong danh sách. Bây giờ, nếu bạn đăng xuất khỏi MySQL session và sau đó bạn thông báo một lệnh SELECT, thì bạn sẽ không thấy dữ liệu nào có sẵn trong Database. Ngay khi đó, bảng tạm của bạn cũng sẽ không tồn tại.

Xóa bảng tạm trong SQL

Theo mặc định, tất cả bảng tạm bị xóa bởi MySQL khi kết nối tới Database của bạn kết thúc. Nếu bạn vấn muốn xóa chúng, bạn thông báo một lệnh DROP TABLE.

Ví dụ sau minh họa cách xóa một bảng tạm trong SQL.

mysql> CREATE TEMPORARY TABLE DOANHTHU (
    -> ten_san_pham VARCHAR(50) NOT NULL
    -> , tong_doanh_thu DECIMAL(12,2) NOT NULL DEFAULT 0.00
    -> , gia_trung_binh DECIMAL(7,2) NOT NULL DEFAULT 0.00
    -> , tong_so_luong INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO DOANHTHU
    -> (ten_san_pham, tong_doanh_thu, gia_trung_binh, tong_so_luong)
    -> VALUES
    -> ('iphone7', 30, 90, 2);

mysql> SELECT * FROM DOANHTHU;
+--------------+-------------+----------------+------------------+
| ten_san_pham | tong_doanh_thu | gia_trung_binh | tong_so_luong |
+--------------+-------------+----------------+------------------+
| iphone7     |      30 |          15 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
mysql> DROP TABLE DOANHTHU;
mysql>  SELECT * FROM DOANHTHU;
ERROR 1146: Table 'VIETJACK.DOANHTHU' doesn't exist
0