MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Chỉ tạo một bảng nếu nó không tồn tại trong MariaDB

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thiết lập sao chép MariaDB 10.3 bằng Ansible và Vagrant

  2. Cách UPPER () hoạt động trong MariaDB

  3. Khắc phục “ERROR 1054 (42S22):Cột không xác định‘… ’trong‘ on mệnh đề ”trong MariaDB

  4. Cách ABS () hoạt động trong MariaDB

  5. MariaDB JSON_KEYS () Giải thích