Khi tạo bảng trong SQLite, bạn có tùy chọn thêm các ràng buộc vào mỗi cột.
Một trong những ràng buộc như vậy là DEFAULT
ràng buộc.
DEFAULT
ràng buộc cho phép bạn chỉ định một giá trị sẽ được sử dụng trong trường hợp không có giá trị nào được cung cấp cho cột đó khi một hàng mới được chèn vào.
Nếu bạn không sử dụng DEFAULT
, thì giá trị mặc định cho một cột là NULL
.
Giá trị mặc định có thể có
Giá trị mặc định rõ ràng của DEFAULT
ràng buộc có thể là bất kỳ điều nào sau đây:
- một hằng số chuỗi
- một hằng số đốm màu
- một số có chữ ký
- bất kỳ biểu thức hằng nào được đặt trong dấu ngoặc đơn.
-
CURRENT_TIME
-
CURRENT_DATE
-
CURRENT_TIMESTAMP
-
NULL
Ví dụ
Đây là một ví dụ để chứng minh.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price DEFAULT 0.00
);
Ở đây tôi đã thêm một DEFAULT
ràng buộc đối với Giá cột. Trong trường hợp này, giá trị mặc định là 0,00 .
Bây giờ khi tôi chèn một hàng mới mà không chỉ định giá trị cho Giá , giá trị mặc định được sử dụng.
INSERT INTO Products ( ProductId, ProductName )
VALUES (1, 'Long Weight');
SELECT * FROM Products;
Kết quả:
ProductId ProductName Price ---------- ----------- ---------- 1 Long Weight 0.0
Giá trị rõ ràng
Tất nhiên, giá trị mặc định chỉ được sử dụng khi bạn không cung cấp giá trị một cách rõ ràng. Nếu bạn làm vậy, thì giá trị đó sẽ được sử dụng thay thế.
Đây là một ví dụ khác. Lần này, tôi cung cấp một cách rõ ràng giá trị cho Giá đó cột.
INSERT INTO Products ( ProductId, ProductName, Price )
VALUES (2, 'Left-Handed Screwdriver', 19.99);
SELECT * FROM Products;
Kết quả:
ProductId ProductName Price ---------- ------------------------- ---------- 1 Long Weight 0.0 2 Left-Handed Screwdriver 19.99
NULL rõ ràng
Ví dụ trước cũng áp dụng cho NULL
được cung cấp rõ ràng giá trị.
Để chứng minh điều này, đây là điều sẽ xảy ra nếu tôi chèn NULL
một cách rõ ràng vào Giá cột.
INSERT INTO Products ( ProductId, ProductName, Price )
VALUES (3, 'Elbow Grease', NULL);
SELECT * FROM Products;
Kết quả:
ProductId ProductName Price ---------- ------------------------ ---------- 1 Long Weight 0.0 2 Left-Handed Screwdriver 19.99 3 Elbow Grease
Lần này là Giá cột là NULL
, bởi vì đó là những gì tôi đã chèn rõ ràng vào cột đó.
Để ngăn điều này xảy ra, hãy xem Cách chuyển đổi giá trị NULL thành giá trị mặc định của cột khi chèn dữ liệu vào SQLite.
Dấu thời gian mặc định
Trong ví dụ này, tôi tạo một bảng khác. Lần này tôi đặt giá trị mặc định thành dấu thời gian hiện tại.
CREATE TABLE Types(
TypeId INTEGER PRIMARY KEY,
Type,
DateInserted DEFAULT CURRENT_TIMESTAMP
);
Và bây giờ là một số dữ liệu.
INSERT INTO Types (Type)
VALUES ( 'Hardware' );
SELECT * FROM Types;
Kết quả:
TypeId Type DateInserted ---------- ---------- ------------------- 1 Hardware 2020-06-05 00:21:57
Dấu thời gian được chèn như mong đợi.
Giá trị Tự động Tăng lên làm Giá trị Mặc định
Lưu ý rằng trong ví dụ trước, tôi cũng không cung cấp giá trị cho TypeId nhưng nó vẫn tự động tạo ra một giá trị mặc định.
Trong trường hợp này, giá trị mặc định không phải do DEFAULT
hạn chế. Đó là do cột này là cột khóa chính được tạo bằng INTEGER PRIMARY KEY
. Khi bạn xác định một cột bằng INTEGER PRIMARY KEY
, cột sẽ tự động trở thành cột tự động tăng dần.
Để chứng minh điều này kỹ lưỡng hơn, đây là điều sẽ xảy ra nếu tôi chèn thêm một số hàng.
INSERT INTO Types (Type)
VALUES
( 'Software' ),
( 'Hardcopy' );
SELECT * FROM Types;
Kết quả:
TypeId Type DateInserted ---------- ---------- ------------------- 1 Hardware 2020-06-05 00:21:57 2 Software 2020-06-05 00:22:14 3 Hardcopy 2020-06-05 00:22:14
Để biết thêm thông tin về các cột tự động tăng dần, hãy xem Cách AUTOINCREMENT hoạt động trong SQLite và Cách tạo một cột tự động tăng trong SQLite.
Biểu thức dưới dạng Giá trị Mặc định
Bạn cũng có thể sử dụng một biểu thức hằng làm giá trị mặc định. Để làm điều này, biểu thức phải được đặt trong dấu ngoặc đơn.
Đây là một ví dụ.
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
Name,
Entered DEFAULT (round(julianday('now'))),
Deadline DEFAULT (round(julianday('now')) + 10.5)
);
Và bây giờ là một số dữ liệu.
INSERT INTO Person (Name)
VALUES ( 'Fred' );
SELECT * FROM Person;
Kết quả:
PersonId Name Entered Deadline ---------- ---------- ---------- ---------- 1 Fred 2459006.0 2459016.5
Lưu ý rằng biểu thức phải là một biểu thức hằng. Một biểu thức hằng là một biểu thức chỉ chứa các hằng số.
Nếu bạn cố gắng sử dụng một biểu thức không chỉ chứa hằng số, bạn sẽ gặp lỗi.
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
FirstName,
LastName,
UserName DEFAULT (FirstName || LastName)
);
Kết quả:
Error: default value of column [UserName] is not constant