Computer >> Máy Tính >  >> Lập trình >> MySQL

Tại sao MySQL NOT NULL không nên được thêm vào trường khóa chính?

Bạn không cần thêm NOT NULL vào trường khóa chính vì nó sẽ tự động NOT NULL. Khóa chính là sự kết hợp của cả khóa KHÔNG ĐỦ và Khóa duy nhất.

Đây là bản demo của trường khóa chính. Đầu tiên chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau:

mysql> create table NotNullAddDemo
   -> (
   -> Id int AUTO_INCREMENT,
   -> PRIMARY KEY(Id)
   -> );
Query OK, 0 rows affected (0.81 sec)

Trong bảng trên, bạn không cần thêm NOT NULL vào trường khóa chính vì MySQL nội bộ chuyển nó thành NOT NULL. Để kiểm tra xem nó có đúng hay không, hãy sử dụng cú pháp sau.

DESC yourTableName;

Bây giờ chúng ta hãy kiểm tra cú pháp trên để lấy mô tả bảng:

mysql> desc NotNullAddDemo;

Sau đây là kết quả:

+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| Id    | int(11) | NO   | PRI | NULL    | auto_increment |
+-------+---------+------+-----+---------+----------------+
1 row in set (0.07 sec)

Nhìn vào cột Null, có giá trị KHÔNG có nghĩa là không có giá trị NULL.

Để kiểm tra NOT NULL, chúng ta hãy chèn một số bản ghi NULL vào bảng. Điều này sẽ cho phép giá trị NULL nhưng mỗi khi nó đếm giá trị từ 1. Truy vấn để chèn bản ghi trong bảng.

mysql> insert into NotNullAddDemo values(NULL);
Query OK, 1 row affected (0.12 sec)
mysql> insert into NotNullAddDemo values(NULL);
Query OK, 1 row affected (0.45 sec)

Sau khi chèn hai giá trị NULL cho khóa chính, nếu bạn cố gắng chèn giá trị 1, thì lỗi sẽ tạo ra. Điều này là do MySQL đếm giá trị NULL đầu tiên là 1 và giá trị NULL thứ hai là 2, v.v.

Lỗi như sau nếu bây giờ bạn cố gắng chèn 1:

mysql> insert into NotNullAddDemo values(1);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

Nếu bạn chèn giá trị 3 thì nó sẽ chấp nhận:

mysql> insert into NotNullAddDemo values(3);
Query OK, 1 row affected (0.21 sec)
mysql> insert into NotNullAddDemo values(NULL);
Query OK, 1 row affected (0.18 sec)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau:

mysql> select *from NotNullAddDemo;

Sau đây là kết quả:

+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
4 rows in set (0.00 sec)