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.