Vì SERIALlà viết tắt choBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE , có vẻ như SERIAL PRIMARY KEYtăng gấp đôi trên UNIQUEvà 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 KEYvà UNIQUE KEY idtrong 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 KEYvới SERIALvà thay vào đó chọn viết bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEYhoặc sử dụng SERIALkhô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_incrementphả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 serialvà serial default value, và không có bí danh nào serial primary key...