Vì SERIAL
là viết tắt choBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
, có vẻ như SERIAL PRIMARY KEY
tăng gấp đôi trên UNIQUE
và PRIMARY KEY
:
> CREATE TEMPORARY TABLE foo (id SERIAL PRIMARY KEY);
> SHOW CREATE TABLE foo \G
*************************** 1. row ***************************
Table: foo
Create Table: CREATE TABLE `foo` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
)
Chắc chắn có yếu tố wtf khi nhìn thấy cả hai PRIMARY KEY
và UNIQUE KEY id
trong SHOW CREATE TABLE
, nhưng đó có thực sự là hai chỉ số vật lý mà tôi đang nhìn thấy?
Có nên tránh sử dụng PRIMARY KEY
với SERIAL
và thay vào đó chọn viết bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY
hoặc sử dụng SERIAL
không có khóa chính trên bàn không?
2
Ừ! Gửi một lỗi tại bug.mysql.com.
—
Rick James
Vâng, điều này trông giống như một lỗi mysql ...
—
Amalgovinus
Tôi cũng thấy hành vi này trong 5.7,18 Máy chủ cộng đồng MySQL
—
Kevin
Các hiện tượng không xảy ra trong
—
Lennart
10.2.14-MariaDB
.
Điều này có thể được coi là một lỗi. Lý do của nó là rõ ràng -
—
Akina
auto_increment
phải là một khóa (lỗi máy chủ 1075). Nhưng nguồn gốc là sự sáng suốt của ai đó - có những bí danh serial
và serial default value
, và không có bí danh nào serial primary key
...