Trong MySQL, bạn có thể sử dụng IF NOT EXISTS
mệnh đề của CREATE TABLE
để kiểm tra xem một bảng cùng tên đã tồn tại trong cơ sở dữ liệu hay chưa.
Nếu bảng không tồn tại, nó sẽ được tạo. Nếu nó đã tồn tại, nó sẽ không được tạo.
Ví dụ
Nó diễn ra như thế này:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Ở đâu t1
là tên bảng và mọi thứ nằm giữa dấu ngoặc đơn là định nghĩa bảng (tức là cột, v.v.).
Trong trường hợp đó, bảng sẽ chỉ được tạo nếu chưa có một bảng nào được gọi là t1
.
Kiểm tra để đảm bảo rằng Bảng Hiện đã Tồn tại
Chúng ta có thể sử dụng sys.table_exists()
thủ tục để kiểm tra xem bảng hiện có tồn tại hay không:
CALL sys.table_exists('test', 't1', @table_type);
SELECT @table_type;
Kết quả:
+-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+
Đây, test
là tên của cơ sở dữ liệu và t1
là tên của bảng mà tôi đang kiểm tra sự tồn tại của nó.
Trong trường hợp này, kết quả là BASE TABLE
có nghĩa là bảng tồn tại.
Đây chỉ là một trong nhiều cách để kiểm tra xem một bảng có tồn tại trong MySQL hay không.
Cố gắng tạo lại bảng
Bây giờ nếu chúng ta cố gắng tạo lại bảng đó:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Chúng tôi không gặp lỗi:
Query OK, 0 rows affected, 1 warning (0.00 sec)
Nhưng chúng tôi nhận được một cảnh báo.
Vì vậy, hãy kiểm tra cảnh báo:
SHOW WARNINGS;
Kết quả:
+-------+------+---------------------------+ | Level | Code | Message | +-------+------+---------------------------+ | Note | 1050 | Table 't1' already exists | +-------+------+---------------------------+
Như mong đợi, nó cho chúng ta biết rằng bảng đã tồn tại.
Không có IF NOT EXISTS
Mệnh đề
Dưới đây là những gì sẽ xảy ra khi chúng tôi không sử dụng IF NOT EXISTS
khi cố gắng tạo một bảng đã tồn tại:
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
Lần này chúng tôi gặp lỗi:
ERROR 1050 (42S01): Table 't1' already exists
Điều quan trọng cần lưu ý là IF NOT EXISTS
mệnh đề không kiểm tra cấu trúc / định nghĩa bảng. Nó chỉ đơn giản là kiểm tra xem không có bảng nào có cùng tên mà chúng tôi đang cố gắng cung cấp cho bảng mà chúng tôi đang tạo.
Nói cách khác, chỉ vì một bảng có tên đó đã tồn tại, điều đó không có nghĩa là bảng đó có định nghĩa chính xác.