Da SERIAL
es sich um eine Abkürzung für handeltBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
, sieht es so aus, als würde sich das SERIAL PRIMARY KEY
verdoppeln UNIQUE
und 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`)
)
Es gibt definitiv den WTF- Faktor, beide PRIMARY KEY
und UNIQUE KEY id
in zu sehen SHOW CREATE TABLE
, aber sind das wirklich zwei physische Indizes, die ich sehe?
Sollte man die Verwendung PRIMARY KEY
mit SERIAL
und stattdessen das Schreiben bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY
oder die Verwendung SERIAL
ohne Primärschlüssel auf dem Tisch vermeiden ?
10.2.14-MariaDB
.auto_increment
muss ein Schlüssel sein (Serverfehler 1075). Aber die Quelle ist jemandes Lasiness - es gibt Aliaseserial
undserial default value
, und es gibt keinen Aliasserial primary key
...Antworten:
Ich sehe dieses Verhalten auch in 5.7.18 MySQL Community Server.
Basierend auf der Ausgabe von
SHOW INDEX FROM foo
dort wird ein doppelter Index erstellt und verwaltet:Bearbeiten: Dies passiert auch für normale Tabellen:
quelle
CREATE TABLE foo ...
? Wenn ja, wie lautet der Inhalt von INFORMATION_SCHEMA.TABLE_CONSTRAINTS für die Tabelle?INFORMATION_SCHEMA.TABLE_CONSTRAINTS
Sie angefordert haben.SHOW ...
, es entstehen zwei Einschränkungen.