Nếu SQL_MODE
chứa STRICT_TRANS_TABLES
và bạn đang chèn vào một bảng giao dịch [như InnoDB] hoặc nếu SQL_MODE chứa STRICT_ALL_TABLES
, thì tất cả các cột NOT NULL
không có giá trị DEFAULT
[và không phải là AUTO_INCREMENT] phải được tham chiếu rõ ràng trong câu lệnh INSERT
. Nếu không, một lỗi như thế này được tạo ra
ERROR 1364 [HY000]: Field 'col' doesn't have a default value
Trong tất cả các trường hợp khác, nếu một cột NOT NULL
không có giá trị DEFAULT
không được tham chiếu, thì một giá trị trống sẽ được chèn vào [ví dụ: 0 cho cột
ERROR 1364 [HY000]: Field 'col' doesn't have a default value1 và '' cho cột
ERROR 1364 [HY000]: Field 'col' doesn't have a default value2]. Xem ví dụ
Nếu một cột NOT NULL
có giá trị DEFAULT
không được tham chiếu, thì ___0_______5 sẽ được chèn vào
Nếu cột
ERROR 1364 [HY000]: Field 'col' doesn't have a default value5 có giá trị
DEFAULT
không được tham chiếu, giá trị mặc định của nó sẽ được chèn vào. Cũng có thể gán giá trị mặc định một cách rõ ràng bằng cách sử dụng từ khóa DEFAULT
hoặc hàm ERROR 1364 [HY000]: Field 'col' doesn't have a default value9
Nếu từ khóa DEFAULT
được sử dụng nhưng cột không có giá trị DEFAULT
, thì sẽ xảy ra lỗi như thế này
ERROR 1364 [HY000]: Field 'col' doesn't have a default value
Theo mặc định, nếu bạn cố gắng chèn một hàng trùng lặp và có chỉ mục
ERROR 1062 [23000]: Duplicate entry 'dup_value' for key 'col'2, thì
INSERT
sẽ dừng lại và một lỗi như thế này sẽ được tạo raERROR 1062 [23000]: Duplicate entry 'dup_value' for key 'col'
Để xử lý các bản sao, bạn có thể sử dụng mệnh đề IGNORE, INSERT ON DUPLICATE KEY UPDATE hoặc câu lệnh REPLACE. Lưu ý rằng các tùy chọn BỎ QUA và TRÌ HOÃN sẽ bị bỏ qua khi bạn sử dụng CẬP NHẬT KHÓA TRÊN DUPLICATE
Xem thêm
Bình luận
Nội dung được sao chép trên trang web này là tài sản của chủ sở hữu tương ứng và nội dung này không được MariaDB xem xét trước. Quan điểm, thông tin và ý kiến được thể hiện bởi nội dung này không nhất thiết đại diện cho quan điểm của MariaDB hoặc bất kỳ bên nào khác
Ràng buộc giá trị DEFAULT
chỉ định một giá trị để ghi vào cột bị ràng buộc nếu một giá trị không được xác định trong câu lệnh INSERT
. Giá trị có thể là một ký tự được mã hóa cứng hoặc một biểu thức được đánh giá tại thời điểm hàng được tạo
Thông tin chi tiết
- Kiểu dữ liệu của Giá trị mặc định phải giống với kiểu dữ liệu của cột
- Ràng buộc giá trị
DEFAULT
chỉ áp dụng nếu cột không có giá trị được chỉ định trong câu lệnhINSERT
. Bạn vẫn có thể chèn mộtNULL
vào một cột tùy chọn [không thể rỗng] bằng cách chèn một cách rõ ràngNULL
. Ví dụ,
1> INSERT INTO inventories [product_id, warehouse_id] VALUES [1,20];
cú pháp
Bạn chỉ có thể áp dụng ràng buộc giá trị DEFAULT
cho các cột riêng lẻ
Ghi chú
Bạn cũng có thể thêm ràng buộc giá trị DEFAULT
vào bảng hiện có thông qua
CREATETABLEtable_name[column_namecolumn_typeDEFAULTdefault_valuecolumn_constraints,column_table_deftable_constraints]]
Tham sốMô tả> INSERT INTO inventories [product_id, warehouse_id] VALUES [1,20];
5Tên của bảng bạn đang tạo. > INSERT INTO inventories [product_id, warehouse_id] VALUES [1,20];
6Tên của cột bị ràng buộc. > INSERT INTO inventories [product_id, warehouse_id] VALUES [1,20];
7Kiểu dữ liệu của cột bị ràng buộc. > INSERT INTO inventories [product_id, warehouse_id] VALUES [1,20];
8Giá trị bạn muốn chèn theo mặc định, giá trị này phải đánh giá theo cùng loại dữ liệu như > INSERT INTO inventories [product_id, warehouse_id] VALUES [1,20];
7. > INSERT INTO inventories [product_id, warehouse_id, quantity_on_hand] VALUES [2,30, NULL];
0Bất kỳ ràng buộc cấp độ cột nào khác mà bạn muốn áp dụng cho cột này. > INSERT INTO inventories [product_id, warehouse_id, quantity_on_hand] VALUES [2,30, NULL];
1Định nghĩa cho bất kỳ cột nào khác trong bảng. > INSERT INTO inventories [product_id, warehouse_id, quantity_on_hand] VALUES [2,30, NULL];
2Bất kỳ ràng buộc mức bảng nào bạn muốn áp dụngThí dụ
biểu tượng/nút/bản sao
> CREATE TABLE inventories [
product_id INT,
warehouse_id INT,
quantity_on_hand INT DEFAULT 100,
PRIMARY KEY [product_id, warehouse_id]
];
biểu tượng/nút/bản sao
> INSERT INTO inventories [product_id, warehouse_id] VALUES [1,20];
biểu tượng/nút/bản sao
> INSERT INTO inventories [product_id, warehouse_id, quantity_on_hand] VALUES [2,30, NULL];
biểu tượng/nút/bản sao
> SELECT * FROM inventories;
+------------+--------------+------------------+
| product_id | warehouse_id | quantity_on_hand |
+------------+--------------+------------------+
| 1 | 20 | 100 |
| 2 | 30 | NULL |
+------------+--------------+------------------+
Nếu ràng buộc giá trị DEFAULT
không được chỉ định và giá trị rõ ràng không được cung cấp, giá trị của NULL
sẽ được gán cho cột