Sử dụng từ khóa mặc định trong MySQL để đặt giá trị mặc định thành NULL. Trước tiên chúng ta hãy tạo một - Show mysql> create table DemoTable1440 -> ( -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> StudentName varchar(20) DEFAULT NULL, -> StudentAge int DEFAULT NULL -> ); Query OK, 0 rows affected (0.55 sec) Chèn một số bản ghi trong bảng bằng lệnh chèn. Đối với các giá trị để trống, mặc định được chèn - mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec) Hiển thị tất cả các bản ghi từ bảng bằng cách chọn - mysql> select * from DemoTable1440; Điều này sẽ tạo ra đầu ra sau - +-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | NULL | NULL | | 3 | David | NULL | | 4 | NULL | 24 | +-----------+-------------+------------+ 4 rows in set (0.00 sec)
Cập nhật vào ngày 12 tháng 11 năm 2019 06:56:10
Webhosting tôi sử dụng đã kích hoạt StrictMode cho cơ sở dữ liệu. Tất cả các tập lệnh PHP của tôi bây giờ đã ngừng hoạt động vì họ báo cáo tôi chưa xác định giá trị mặc định cho một số cột. Vì tôi có rất nhiều cột trong rất nhiều bảng, có cách nào để đặt tất cả các cột có "giá trị mặc định = không" với "giá trị mặc định = null" không? Bằng cách này, nó sẽ không báo cáo cho tôi lỗi nữa. Tất nhiên, nếu có một cách khác (tốt hơn), tôi sẵn sàng cho nó. Tôi đã thử nhìn trên mạng, nhưng tôi không thể tìm thấy bất cứ điều gì phù hợp cho trường hợp này. Đã hỏi ngày 27 tháng 3 năm 2019 lúc 10:33Mar 27, 2019 at 10:33
1 Bạn có thể thay đổi cột
Đã trả lời ngày 27 tháng 3 năm 2019 lúc 10:37Mar 27, 2019 at 10:37
1 Một cách tiếp cận chung ở đây sẽ hoạt động cho mỗi cột gây ra lỗi sẽ là đặt giá trị mặc định và sau đó có thể thực hiện cập nhật để ghi lại các bản ghi thiếu một giá trị.
Và đây là bản cập nhật:
Bạn không bắt buộc phải thực hiện bản cập nhật này, nhưng có thể có ý nghĩa khi đưa các bản ghi cũ hơn các giá trị bị thiếu phù hợp với những bản ghi mới hơn sẽ trông như thế nào. Đã trả lời ngày 27 tháng 3 năm 2019 lúc 10:38Mar 27, 2019 at 10:38
Tim Biegeleisentim BiegeleisenTim Biegeleisen 474K24 Huy hiệu vàng257 Huy hiệu bạc334 Huy hiệu đồng24 gold badges257 silver badges334 bronze badges 3 Thông số kỹ thuật kiểu dữ liệu có thể có các giá trị mặc định rõ ràng hoặc ẩn. Một mệnh đề mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)4 trong một đặc tả kiểu dữ liệu hiển thị rõ ràng giá trị mặc định cho một cột. Ví dụ:
mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)5 là một trường hợp đặc biệt. Trong định nghĩa của một cột số nguyên, nó là bí danh cho mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)6. Một số khía cạnh của xử lý mệnh đề mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)7 rõ ràng phụ thuộc vào phiên bản, như được mô tả sau đây.
Xử lý mặc định rõ ràng kể từ MySQL 8.0.13Xử lý mặc định rõ ràng trước MySQL 8.0.13
Xử lý mặc định ngầm Giá trị mặc định được chỉ định trong mệnh đề mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)7 có thể là một hằng số hoặc biểu thức theo nghĩa đen. Với một ngoại lệ, bao gồm các giá trị mặc định biểu thức trong ngoặc đơn để phân biệt chúng với các giá trị mặc định không đổi theo nghĩa đen. Ví dụ:
Điều này được cho phép (mặc định theo nghĩa đen được chỉ định là biểu thức):
Giá trị mặc định biểu thức cho một cột có thể tham khảo các cột bảng khác, ngoại trừ các tham chiếu đến các cột hoặc cột được tạo với các giá trị mặc định biểu thức phải là các cột xảy ra trước đó trong định nghĩa bảng. Nghĩa là, các giá trị mặc định biểu thức không thể chứa các tham chiếu chuyển tiếp đến các cột hoặc cột được tạo với các giá trị mặc định biểu thức. Hạn chế đặt hàng cũng áp dụng cho việc sử dụng mysql> select * from DemoTable1440;7 để sắp xếp lại các cột bảng. Nếu bảng kết quả sẽ có giá trị mặc định biểu thức chứa tham chiếu chuyển tiếp đến cột hoặc cột được tạo có giá trị mặc định biểu thức, câu lệnh sẽ không thành công. Ghi chú Nếu bất kỳ thành phần nào của giá trị mặc định biểu thức phụ thuộc vào chế độ SQL, các kết quả khác nhau có thể xảy ra đối với các cách sử dụng khác nhau của bảng trừ khi chế độ SQL giống nhau trong tất cả các mục đích sử dụng. Đối với mysql> select * from DemoTable1440;8 và mysql> select * from DemoTable1440;9, bảng đích lưu giữ các giá trị mặc định biểu thức từ bảng gốc. mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)1 Nếu một giá trị mặc định biểu thức đề cập đến một hàm không xác định, bất kỳ câu lệnh nào khiến biểu thức được đánh giá là không an toàn để sao chép dựa trên câu lệnh. Điều này bao gồm các tuyên bố như +-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | NULL | NULL | | 3 | David | NULL | | 4 | NULL | 24 | +-----------+-------------+------------+ 4 rows in set (0.00 sec)0 và +-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | NULL | NULL | | 3 | David | NULL | | 4 | NULL | 24 | +-----------+-------------+------------+ 4 rows in set (0.00 sec)1. Trong tình huống này, nếu ghi nhật ký nhị phân bị vô hiệu hóa, câu lệnh được thực thi là bình thường. Nếu ghi nhật ký nhị phân được bật và +-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | NULL | NULL | | 3 | David | NULL | | 4 | NULL | 24 | +-----------+-------------+------------+ 4 rows in set (0.00 sec)2 được đặt thành +-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | NULL | NULL | | 3 | David | NULL | | 4 | NULL | 24 | +-----------+-------------+------------+ 4 rows in set (0.00 sec)3, câu lệnh được ghi lại và thực thi nhưng thông báo cảnh báo được ghi vào nhật ký lỗi, vì nô lệ sao chép có thể phân kỳ. Khi +-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | NULL | NULL | | 3 | David | NULL | | 4 | NULL | 24 | +-----------+-------------+------------+ 4 rows in set (0.00 sec)2 được đặt thành +-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | NULL | NULL | | 3 | David | NULL | | 4 | NULL | 24 | +-----------+-------------+------------+ 4 rows in set (0.00 sec)5 hoặc +-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | NULL | NULL | | 3 | David | NULL | | 4 | NULL | 24 | +-----------+-------------+------------+ 4 rows in set (0.00 sec)6, câu lệnh được thực thi là bình thường. Khi chèn một hàng mới, giá trị mặc định cho một cột có mặc định biểu thức có thể được chèn bằng cách bỏ qua tên cột hoặc bằng cách chỉ định cột là mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)7 (giống như đối với các cột có mặc định theo nghĩa đen): Tuy nhiên, việc sử dụng +-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | NULL | NULL | | 3 | David | NULL | | 4 | NULL | 24 | +-----------+-------------+------------+ 4 rows in set (0.00 sec)8) để chỉ định giá trị mặc định cho cột được đặt tên chỉ được phép cho các cột có giá trị mặc định theo nghĩa đen, không phải cho các cột có giá trị mặc định biểu thức. Xử lý mặc định rõ ràng trước MySQL 8.0.13Xử lý mặc định ngầm Giá trị mặc định được chỉ định trong mệnh đề mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)7 có thể là một hằng số hoặc biểu thức theo nghĩa đen. Với một ngoại lệ, bao gồm các giá trị mặc định biểu thức trong ngoặc đơn để phân biệt chúng với các giá trị mặc định không đổi theo nghĩa đen. Ví dụ: Nếu một giá trị mặc định đánh giá thành một loại dữ liệu khác với loại cột được khai báo, thì sự ép buộc ngầm với loại được khai báo xảy ra theo các quy tắc chuyển đổi loại MySQL thông thường. Xem Phần & NBSP; 12.3, Chuyển đổi loại trong đánh giá biểu thức. Xử lý mặc định ngầmNếu một đặc tả kiểu dữ liệu bao gồm không có giá trị mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)7 rõ ràng, MySQL sẽ xác định giá trị mặc định như sau: Nếu cột có thể lấy 1 làm giá trị, cột được xác định với mệnh đề 2 rõ ràng.Nếu cột không thể lấy 1 làm giá trị, MySQL định nghĩa cột không có mệnh đề mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)7 rõ ràng. Để nhập dữ liệu vào cột 5 không có mệnh đề mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)7 rõ ràng, nếu câu lệnh +-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | NULL | NULL | | 3 | David | NULL | | 4 | NULL | 24 | +-----------+-------------+------------+ 4 rows in set (0.00 sec)0 hoặc 8 không bao gồm giá trị cho cột hoặc câu lệnh +-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | NULL | NULL | | 3 | David | NULL | | 4 | NULL | 24 | +-----------+-------------+------------+ 4 rows in set (0.00 sec)1 đặt cột thành 1, MySQL xử lý cột theo chế độ SQL có hiệu lực tại thời gian:
Giả sử rằng một bảng 1 được định nghĩa như sau:mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)2 Trong trường hợp này, 2 không có mặc định rõ ràng, vì vậy ở chế độ nghiêm ngặt, mỗi câu lệnh sau đây tạo ra một lỗi và không có hàng nào được chèn vào. Khi không sử dụng chế độ nghiêm ngặt, chỉ có câu lệnh thứ ba tạo ra lỗi; Mặc định ngầm được chèn cho hai câu lệnh đầu tiên, nhưng lần thứ ba thất bại vì 3 không thể tạo ra một giá trị:mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)3 Xem Phần & NBSP; 5.1.11, Chế độ SQL Server SQL. Đối với một bảng đã cho, câu lệnh 4 hiển thị các cột nào có mệnh đề mysql> insert into DemoTable1440(StudentName,StudentAge) values('Chris',21); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1440 values(); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1440(StudentName) values('David'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1440(StudentAge) values(24); Query OK, 1 row affected (0.09 sec)7 rõ ràng. Mặc định ngầm được xác định như sau:
Làm cách nào để thay đổi giá trị mặc định của null trong mysql?Để thả giá trị mặc định, hãy sử dụng Alter Col_Name Drop Mặc định: thay đổi bảng mytbl thay đổi j Drop mặc định; Trong trường hợp này, giá trị mặc định của cột trở lại mặc định tiêu chuẩn cho loại cột. Đối với các cột có thể chứa các giá trị null, đây sẽ là null.ALTER col_name DROP DEFAULT : ALTER TABLE mytbl ALTER j DROP DEFAULT; In this case, the column's default value reverts to the standard default for the column type. For columns that can contain NULL values, this will be NULL .
Giá trị mặc định có thể là null không?Nếu không có giá trị mặc định được khai báo rõ ràng, giá trị mặc định là giá trị null. Điều này thường có ý nghĩa vì một giá trị null có thể được xem xét để thể hiện dữ liệu chưa biết. Trong một định nghĩa bảng, các giá trị mặc định được liệt kê sau kiểu dữ liệu cột.. This usually makes sense because a null value can be considered to represent unknown data. In a table definition, default values are listed after the column data type.
Làm cách nào để thay đổi null mặc định trong SQL?Trong SQL, chúng ta có thể sử dụng hai chức năng để thay thế các mục null bằng giá trị mặc định.Các chức năng này là hợp tác () và isnull ().COALESCE() and ISNULL() .
NULL mặc định trong MySQL là gì?Nếu một đặc tả kiểu dữ liệu bao gồm không có giá trị mặc định rõ ràng, MySQL xác định giá trị mặc định như sau: Nếu cột có thể lấy NULL làm giá trị, cột được xác định với mệnh đề NULL mặc định rõ ràng.Nếu cột không thể lấy NULL làm giá trị, MySQL định nghĩa cột không có mệnh đề mặc định rõ ràng.If the column can take NULL as a value, the column is defined with an explicit DEFAULT NULL clause. If the column cannot take NULL as a value, MySQL defines the column with no explicit DEFAULT clause. |