Bạn có thể đặt giá trị mặc định cho giá trị của một cột bằng cách thêm ràng buộc DEFAULT vào cột khi tạo bảng. Khi thêm dữ liệu vào bảng, nếu bạn không chỉ định giá trị cho cột thì giá trị mặc định đó sẽ được lưu trữ thay thế.
Bài viết này sẽ giải thích cách sử dụng ràng buộc DEFAULT trong PostgreSQL.
Cú pháp lệnh:
CREATE TABLE [ IF NOT EXISTS ] table_name ( column_name data_type DEFAULT default_expr [, ... ] )
Khi thêm dữ liệu, giá trị mặc định được chỉ định bằng DEFAULT sẽ được lưu trữ nếu không có giá trị nào được chỉ định cho cột. Nó có thể là NULL nếu không có ràng buộc DEFAULT nào được đặt trên cột.
Giá trị mặc định được chỉ định bằng DEFAULT có thể là một hằng số, cũng có thể là một biểu thức.
Chúng ta sẽ tạo bảng myfriends trong lược đồ myschema của cơ sở dữ liệu sampledata:
CREATE TABLE myschema.myfriends ( id integer DEFAULT 0, name varchar(10) DEFAULT 'Unknown' );
Lấy thông tin cột của bảng myfriends đã tạo bằng lệnh \d
\d myschema.myfriends
Ở cột「デフォルト」(Default) giá trị của cột id mặc định là 0, và giá trị của cột name mặc định là ‘Unknown’::character varying
Xem thêm: Cách lấy danh sách các cột có trong bảng
Trước tiên, thử thêm dữ liệu bằng cách chỉ định giá trị cho cả cột id và name:
INSERT INTO myschema.myfriends VALUES (1,'Minh Hoang');
Khi dữ liệu được thêm bằng cách chỉ định rõ ràng giá trị 1,’Minh Hoang’ trong cột thì giá trị đã chỉ định sẽ được lưu trữ bất kể giá trị mặc định là bao nhiêu.
Tiếp theo, thử thêm dữ liệu bằng cách chỉ chỉ định giá trị cho cột id:
INSERT INTO myschema.myfriends(id) VALUES (2);
Vì chúng ta không chỉ định giá trị cho cột name, nên khi thêm dữ liệu nó sẽ chứa giá trị mặc định là Unknown
Tiếp theo, thử thêm dữ liệu bằng cách chỉ chỉ định giá trị cho cột name:
INSERT INTO myschema.myfriends(name) VALUES ('minhhn.com');
Vì chúng ta không chỉ định giá trị cho cột id, nên khi thêm dữ liệu nó sẽ chứa giá trị mặc định là 0
Đặt ràng buộc DEFAULT trên một cột theo cách này đảm bảo rằng nếu một giá trị không được chỉ định cho cột khi thêm dữ liệu, thì giá trị mặc định được chỉ định (thay vì NULL) sẽ được lưu trữ thay thế.