Ich habe das folgende Tabellenschema, das user_customers Berechtigungen für eine 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 Benutzer-Benutzer-ID und Berechtigungs-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 folgende Fehlermeldung:
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?
@markb
: Wenn Sie den Primärschlüssel wiederherstellen, können Sie ihn sicher wieder herstellenAUTO_INCREMENT
.AUTO_INCREMENT
Mechanismus mit einer InnoDB-Tabelle zu verwenden, muss eineAUTO_INCREMENT
Spalteai_col
als Teil eines Index definiert werden, sodass das Äquivalent einer indiziertenSELECT MAX(ai_col)
Suche ausgeführt werden kann auf der Tabelle, um den maximalen Spaltenwert zu erhalten. In der Regel wird dies erreicht, indem die Spalte zur ersten Spalte eines Tabellenindex gemacht wird.Eine Linie:
Sie werden auch das automatische Inkrement nicht verlieren und müssen es erneut hinzufügen, was Nebenwirkungen haben könnte.
quelle
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 auf 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 besteht. Daher können Sie den Primärschlüssel nicht in 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 drei Spalten ablegen und einen neuen Primärschlüssel in einer Spalte erstellen.
quelle
quelle
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);
quelle
"Wenn Sie den Primärschlüssel wiederherstellen, können Sie ihn sicher wieder auf AUTO_INCREMENT zurücksetzen."
Es sollte keine Frage geben, ob es wünschenswert ist, "die PK-Eigenschaft wiederherzustellen" und "die Autoincrement-Eigenschaft wiederherzustellen" der ID-Spalte.
Da es sich bei der vorherigen Definition der Tabelle um eine automatische Inkrementierung handelte, ist es sehr wahrscheinlich, dass ein Programm vorhanden ist, das ohne Angabe eines ID-Werts in diese Tabelle eingefügt wird (da die ID-Spalte ohnehin automatisch inkrementiert wird).
Der Betrieb eines solchen Programms wird unterbrochen, indem die Autoincrement-Eigenschaft nicht wiederhergestellt wird.
quelle
Ändern Sie zuerst die Spalte, um das Feld auto_increment wie folgt zu entfernen: alter table user_customer_permission change column id int;
Lassen Sie als Nächstes den Primärschlüssel fallen. Tabelle ändern user_customer_permission Primärschlüssel löschen;
quelle
quelle
Ich hatte das gleiche Problem und neben einigen Werten in meiner Tabelle. Obwohl ich meinen Primärschlüssel mit geändert habe
ALTER TABLE
user_customer_permissionDROP PRIMARY KEY , ADD PRIMARY KEY (
id)
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 gelöscht. Das Problem wurde gelöst.
quelle
Um hinzuzufügen Primärschlüssel in der Spalte.
So entfernen Sie den Primärschlüssel aus der Tabelle.
quelle
Sichern Sie zuerst die Datenbank. Löschen Sie dann einen der Tabelle zugeordneten Fremdschlüssel. Schneiden Sie die Fremdschlüsseltabelle ab. Schneiden Sie die aktuelle Tabelle ab. Entfernen Sie die erforderlichen Primärschlüssel. Verwenden Sie sqlyog oder workbench oder heidisql oder dbeaver oder phpmyadmin.
quelle
Suchen Sie die Tabelle in SQL Manager, klicken Sie mit der rechten Maustaste darauf und wählen Sie Design aus. Klicken Sie dann mit der rechten Maustaste auf das kleine Schlüsselsymbol und wählen Sie Primärschlüssel entfernen.
quelle