Trong MariaDB, 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 trước khi tạo nó.
Bảng sẽ chỉ được tạo nếu chưa có một bảng trùng tên.
Ví dụ
Dưới đây là một ví dụ để chứng minh:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Đây, 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 tôi có thể truy vấn information_schema.tables
bảng để kiểm tra xem bảng hiện có tồn tại hay không:
SELECT EXISTS (
SELECT
TABLE_NAME
FROM
information_schema.tables
WHERE
TABLE_SCHEMA LIKE 'zap' AND
TABLE_TYPE LIKE 'BASE TABLE' AND
TABLE_NAME = 't1'
);
Kết quả:
1
Đây, zap
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ó.
1
có nghĩa là bảng tồn tại. Nếu nó không tồn tại, chúng tôi sẽ nhận được 0
.
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.002 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
Lưu ý rằng 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.