it-swarm.com.de

Entfernen Sie den Primärschlüssel in MySQL

Ich habe das folgende Tabellenschema, das user_customers Berechtigungen in einer Live-MySQL-Datenbank zuordnet:

mysql> describe user_customer_permission;
+------------------+---------+------+-----+---------+----------------+
| Field            | Type    | Null | Key | Default | Extra          |
+------------------+---------+------+-----+---------+----------------+
| id               | int(11) | NO   | PRI | NULL    | auto_increment |
| user_customer_id | int(11) | NO   | PRI | NULL    |                |
| permission_id    | int(11) | NO   | PRI | NULL    |                |
+------------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

Ich möchte die Primärschlüssel für user_customer_id und permission_id entfernen und den Primärschlüssel für id beibehalten.

Wenn ich den Befehl ausführe:

alter table user_customer_permission drop primary key;

Ich erhalte folgenden Fehler:

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

Wie kann ich den Primärschlüssel einer Spalte löschen?

165
markb

Ohne einen Index wird das Verwalten einer Autoincrement-Spalte zu teuer. Aus diesem Grund erfordert MySQL, dass eine Autoincrement-Spalte ganz links in einem Index steht.

Sie sollten die Eigenschaft autoincrement entfernen, bevor Sie den Schlüssel löschen:

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
ALTER TABLE user_customer_permission DROP PRIMARY KEY;

Beachten Sie, dass Sie ein zusammengesetztes PRIMARY KEY Haben, das alle drei Spalten abdeckt, und es kann nicht garantiert werden, dass id eindeutig ist.

Wenn es einmalig ist, können Sie es wieder zu einem PRIMARY KEY Und AUTO_INCREMENT Machen:

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
264
Quassnoi

Eine Linie:

ALTER TABLE  `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY (  `id` )

Sie werden auch das automatische Inkrement nicht verlieren und müssen es erneut hinzufügen, was Nebenwirkungen haben könnte.

115
mluebke

Ich glaube, Quassnoi hat Ihre direkte Frage beantwortet. Nur eine Randnotiz: Vielleicht ist dies nur eine unangenehme Formulierung von Ihrer Seite, aber Sie scheinen den Eindruck zu haben, dass Sie drei Primärschlüssel haben, einen in jedem Feld. Das ist nicht der Fall. Per Definition können Sie nur einen Primärschlüssel haben. Was Sie hier haben, ist ein Primärschlüssel, der aus drei Feldern zusammengesetzt ist. Aus diesem Grund können Sie den Primärschlüssel nicht auf einer Spalte ablegen. Sie können den Primärschlüssel löschen oder den Primärschlüssel nicht löschen. Wenn Sie einen Primärschlüssel möchten, der nur eine Spalte enthält, können Sie den vorhandenen Primärschlüssel in 3 Spalten ablegen und einen neuen Primärschlüssel in 1 Spalte erstellen.

14
Jay
ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;
10
Alix Axel

Wenn Sie einen zusammengesetzten Primärschlüssel haben, gehen Sie wie folgt vor: ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);

"Wenn Sie den Primärschlüssel wiederherstellen, können Sie ihn sicher wieder auf AUTO_INCREMENT zurücksetzen."

Es sollte keine Frage sein, ob es wünschenswert ist, "die PK-Eigenschaft wiederherzustellen" und "die Autoincrement-Eigenschaft wiederherzustellen" der ID-Spalte.

Da es sich in der vorherigen Definition der Tabelle um ein automatisches Inkrement handelte, ist es sehr wahrscheinlich, dass ein Programm vorhanden ist, das in diese Tabelle einfügt, ohne einen ID-Wert anzugeben (da die ID-Spalte ohnehin automatisch inkrementiert wird).

Der Betrieb eines solchen Programms wird unterbrochen, wenn die Autoincrement-Eigenschaft nicht wiederhergestellt wird.

5
Erwin Smout

Ändern Sie zuerst die Spalte, um das Feld auto_increment wie folgt zu entfernen: alter table user_customer_permission modify column id int;

Legen Sie als Nächstes den Primärschlüssel ab. alter table user_customer_permission Primärschlüssel löschen;

3
John Gunderman

Ich hatte das gleiche Problem und neben einigen Werten in meiner Tabelle. Obwohl ich meinen Primärschlüssel mit geändert habe

ALTER TABLEuser_customer_permissionDROP PRIMARY KEY , ADD PRIMARY KEY (Ich würde)

problem auf meinem Server fortgesetzt. Ich habe ein neues Feld in der Tabelle erstellt. Ich habe die Werte in ein neues Feld übertragen und das alte Feld gelöscht. Problem behoben!

1
Sam

Suchen Sie die Tabelle im SQL-Manager, klicken Sie mit der rechten Maustaste darauf und wählen Sie Design aus. Klicken Sie dann mit der rechten Maustaste auf das Schlüsselsymbol und wählen Sie Primärschlüssel entfernen aus.

0
Noob Helper

Zu hinzufügen Primärschlüssel in der Spalte.

ALTER TABLE table_name ADD PRIMARY KEY (column_name);

Zu entfernen Primärschlüssel aus der Tabelle.

ALTER TABLE table_name DROP PRIMARY KEY;
0
sumit katiyar

Sichern Sie zuerst die Datenbank. Löschen Sie dann alle mit der Tabelle verknüpften Fremdschlüssel. Kürzen Sie die Fremdschlüsseltabelle. Kürzen Sie die aktuelle Tabelle. Entfernen Sie die erforderlichen Primärschlüssel. Verwenden Sie sqlyog oder workbench oder heidisql oder dbeaver oder phpmyadmin.

0
Noby Nirmal