Wie ändert man eine vorhandene Tabelle in MySQL, indem man den Fremdschlüssel über die Befehlszeile in eine andere Tabelle setzt?So ändern Sie den Fremdschlüssel einer MySQL-Tabelle mithilfe der Befehlszeile
Antwort
Sie müssen bestehende foreign key
löschen und eine andere erstellen. Zum Beispiel wie folgt aus:
ALTER TABLE my_table DROP FOREIGN KEY my_key;
ALTER TABLE my_table ADD CONSTRAINT my_key FOREIGN KEY ('some_id')
REFERENCES some_new_table ('some_other_id') ON UPDATE CASCADE ON DELETE CASCADE;
Ihr Code funktioniert, aber ich habe eine verwandte Frage. Wenn ich versuchte, diese beiden Abfragen zu einer einzigen Abfrage zu kombinieren, "ALTER TABLE my_table DROP ..., ADD ..." Ich bekam einen Fehler, _ernrno: 121 "Duplicate key on write oder update" _. Fehle ich etwas oder ist es tatsächlich unmöglich, diese Fragen zu kombinieren? – iloo
Execute help alter table
bei mysql
Eingabeaufforderung, und der Ausgang ist sehr selbsterklärend.
Suchen Sie nach add constraint
mit foreign key
Klausel und wenden Sie es auf Ihrem Tisch.
mysql> help alter table
Name: 'ALTER TABLE'
Description:
Syntax:
ALTER [IGNORE] TABLE tbl_name
alter_specification [, alter_specification] ...
alter_specification:
ADD [COLUMN] column_definition [FIRST | AFTER col_name ]
| ADD [COLUMN] (column_definition,...)
| ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
PRIMARY KEY [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)
| ADD [FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
FOREIGN KEY [index_name] (index_col_name,...)
[reference_definition]
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
| CHANGE [COLUMN] old_col_name column_definition
[FIRST|AFTER col_name]
| MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
| DROP [COLUMN] col_name
| DROP PRIMARY KEY
| DROP {INDEX|KEY} index_name
| DROP FOREIGN KEY fk_symbol
| DISABLE KEYS
| ENABLE KEYS
| RENAME [TO] new_tbl_name
| ORDER BY col_name
| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
| [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]
| DISCARD TABLESPACE
| IMPORT TABLESPACE
| table_option ...
konnte ich das Gleiche erreichen durch:
ALTER TABLE the_table_name
ADD CONSTRAINT the_name_of_column_you_want_to_use_as_foreign_key
REFERENCES other_table_primary_id (Column_name)
Wenn Sie gemeinsam mehrere Fremdschlüssel haben gekettet und erhalten Sie einen Fehler, der wahrscheinlich mit errorno 15x
es am Ende bedeutet, dass es auch andere Tabellen Diese hängen vom Fremdschlüssel ab, den Sie löschen möchten.
Um den Fremdschlüssel zu entfernen, wenn Sie diesen Fehler erhalten, müssen Sie SET FOREIGN_KEY_CHECKS = 0;
tun, und Sie müssen zuerst die Fremdschlüssel auf den Tabellen löschen, die keine anderen Tabellen von ihnen abhängig haben. Sie können dann die Fremdschlüssel in der nächsten Tabelle in der Kette usw. erfolgreich löschen.
Wenn Sie fertig sind, stellen Sie sicher, dass Sie erneut SET FOREIGN_KEY_CHECKS = 1;
ausführen.
- 1. So ändern Sie den Attributwert mithilfe der Reflektion
- 2. So erhalten Sie den Labelnamen mithilfe der Zeichenfolgevariable -C#
- 3. So löschen Sie Fremdschlüssel einer bestimmten Spalte
- 4. So verfolgen Sie den Status eines POJO mithilfe der Codegenerierung
- 5. So entfernen Sie den exe-Teil der Befehlszeile
- 6. So ändern Sie den Tabellendatenquelldatensatz
- 7. So führen Sie cssnano von der Befehlszeile
- 8. So erhalten Sie den Ordnertyp mithilfe der Outlook-REST-API
- 9. So ändern Sie den Balkendiagrammstil
- 10. So ändern Sie den Zeitwert
- 11. Java-Anzeige ändern den Fortschritt in der Befehlszeile
- 12. Herunterladen eines Forschungspapiers mithilfe der Befehlszeile/Terminal
- 13. COM + -Anwendung Bereitstellung mithilfe der Befehlszeile
- 14. So ändern Sie den Paketzielordner in CPack?
- 15. So ändern Sie den UIImagePickerController-Crop-Rahmen
- 16. So führen Sie die ASP.NET MVC-App mithilfe der MSBuild-Befehlszeile aus
- 17. So ändern Sie den Paketnamen einer Android-Anwendung
- 18. So ändern Sie den Tabnamen auf Facebook
- 19. So ändern Sie den Datenquellentyp in einer Crystal Reports-Datei
- 20. So erhalten Sie einen Schlüsselwert für den Fremdschlüssel
- 21. So ändern Sie den Alpha-Kanal einer vorhandenen Hintergrundfarbe
- 22. So ändern Sie den Bereich innerhalb einer Direktive in AngularJs
- 23. So ändern Sie den Wert eines Elements einer Sammlung
- 24. So ändern Sie den Adressraum der Docker-Bridge (Subnetz)?
- 25. So ändern Sie den Hintergrund einer Zeile in Yii2 Gridview
- 26. So ändern Sie den HTML-Text einer Java-Klasse
- 27. So ändern Sie den Datenkontext des Interaktionstriggers
- 28. So ändern Sie den Leininger Abhängigkeitsbaum
- 29. So ändern Sie den Zeilenabstand in TextBlock
- 30. So ändern Sie den JAVA SWING-Steuerelementnamen im Netbean-Entwurfsmodus
Ich habe versucht, Google zu verwenden, und es hat nichts gefunden, das diesen genauen Fall abdeckt. Ich weiß, es in MySQL Administrator zu tun, oder Tabelle mit Fremdschlüssel zu erstellen, aber ich weiß das nicht in der erwähnten Frage. –
Bitte beachten Sie, dass Sie die Produktdokumentation in Google mit mysql 5.7 alter table finden können. –