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

Cách tạo bảng Chỉ khi nó không tồn tại trong SQLite

Trong SQLite, bạn có thể sử dụng IF NOT EXISTS mệnh đề của CREATE TABLE để kiểm tra xem một bảng hoặc dạng xem có cùng tên đã tồn tại trong cơ sở dữ liệu hay chưa trước khi tạo nó.

Việc tạo một bảng mà không có mệnh đề này thường sẽ dẫn đến lỗi nếu một bảng có cùng tên đã tồn tại trong cơ sở dữ liệu. Nhưng khi sử dụng IF NOT EXISTS mệnh đề, câu lệnh không có hiệu lực nếu bảng đã tồn tại cù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ó bảng hoặc chế độ xem đượ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 sqlite_schema bảng để kiểm tra xem bảng hiện có tồn tại hay không:

SELECT EXISTS (
    SELECT 
        name
    FROM 
        sqlite_schema 
    WHERE 
        type='table' AND 
        name='t1'
    );

Kết quả:

1

Trong trường hợp này, tôi nhận được 1 , có nghĩa là bảng tồn tại.

Cố gắng tạo lại bảng

Nếu chúng tôi 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:

sqlite> CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);
sqlite> 

Chúng tôi không nhận được gì.

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: 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 hoặc chế độ xem 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à nó có định nghĩa chính xác.

Ngoài ra, lỗi vẫn được trả về nếu không thể tạo bảng do chỉ mục hiện có, ngay cả khi IF NOT EXISTS mệnh đề được chỉ định.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLiteException không có bảng như vậy:ItemTable trong khi biên dịch:Select_id, .... từ ItemTable

  2. Sử dụng Firebase DB với DB cục bộ

  3. Phòng - Sử dụng SQLites bên ngoài cũng như DB nội bộ

  4. SQLite Tạo chế độ xem

  5. Lưu trữ cơ sở dữ liệu SQLite bằng Android và Phonegap