Come modificare una tabella esistente in MySQL, impostando la chiave esterna su un'altra tabella, utilizzando la riga di comando?Come modificare la chiave esterna di una tabella MySQL utilizzando la riga di comando
risposta
Devi eliminare lo foreign key
esistente e crearne un altro. Ad esempio come questo:
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;
Il tuo codice funziona, ma ho una domanda correlata. Quando ho provato a combinare queste due query in una singola query, 'ALTER TABLE my_table DROP ..., ADD ...' Ho ricevuto un errore, _errno: 121 "Duplicate key on write or update" _. Mi manca qualcosa, o è davvero impossibile combinare queste domande? – iloo
Eseguire help alter table
a mysql
riga di comando e l'uscita è molto evidente.
Cerca add constraint
con clausola foreign key
e applicalo sul tuo tavolo.
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 ...
sono stato in grado di ottenere la stessa cosa:
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)
Se si dispone di più chiavi esterne incatenati insieme e si ottiene un errore che si conclude con errorno 15x
molto probabilmente significa che ci sono altri tavoli che dipendono dalla chiave esterna che stai cercando di eliminare.
Per eliminare la chiave esterna quando si riceve quell'errore, è necessario eseguire SET FOREIGN_KEY_CHECKS = 0;
e quindi è necessario innanzitutto eliminare le chiavi esterne sulle tabelle che non hanno altre tabelle dipendenti da esse. È quindi possibile rilasciare correttamente le chiavi esterne sul tavolo successivo nella catena e così via.
Al termine, assicurati di eseguire nuovamente SET FOREIGN_KEY_CHECKS = 1;
.
- 1. MySQL: cancella una riga ignorando il vincolo di chiave esterna
- 2. Disabilitazione dei controlli di chiave esterna sulla riga di comando
- 3. Chiave esterna MySQL, impossibile creare la tabella (errno: 150)
- 4. Tabella MySQL con una colonna varchar come chiave esterna
- 5. Modificare la tabella dopo la parola chiave in Oracle
- 6. Tabella esterna alveare Salta la prima riga
- 7. Unire tabelle utilizzando la chiave esterna
- 8. Modificare la chiave primaria di una tabella in SQLite
- 9. MySQL cambia tipo di chiave esterna
- 10. Come unire una singola revisione utilizzando la riga di comando
- 11. utilizzando la descrizione comando per mostrare i dettagli di una riga di una tabella (jQuery)
- 12. straniero: rimuovere la chiave esterna
- 13. Come modificare il nome della chiave esterna?
- 14. MySQL restituisce la prima riga di una tabella unita
- 15. Domanda chiave esterna MySQL
- 16. MySQL: Inserisci se esiste una chiave esterna
- 17. Mysql creare la tabella con più di chiave esterna di cancellazione set nullo
- 18. Come visualizzare gli avvisi dopo una query SELECT utilizzando la riga di comando MySQL?
- 19. MySQL - condizionali vincoli di chiave esterna
- 20. Modifica chiave primaria MySQL quando vincoli di chiave esterna esiste
- 21. Chiave esterna a più colonne in MySQL?
- 22. Come copiare la struttura di una tabella in un'altra con vincoli di chiave esterna in psql?
- 23. Come gestire l'errore di chiave esterna di MySQL in PHP?
- 24. mysql utilizzando la variabile come nome tabella
- 25. Impossibile modificare la chiave primaria a causa di "formata in modo non corretto vincolo di chiave esterna" errore
- 26. utilizzando la riga di comando nuget.exe per installare la dipendenza
- 27. Utilizzo delle migrazioni per eliminare la tabella con chiave esterna
- 28. Modifica la riga specifica di una tabella utilizzando l'id di quella riga
- 29. Impossibile eliminare la tabella: un vincolo di chiave esterna non riesce
- 30. Perché il "vincolo di chiave esterna non riesce" quando la chiave esterna esiste?
Ho provato a utilizzare google e non ho trovato nulla che riguardasse questo caso esatto. So di farlo in MySQL Administrator, o di creare una tabella con chiave esterna, ma non lo so nella domanda menzionata. –
Si prega di notare che è possibile trovare la documentazione del prodotto su Google con 'mysql 5.7 alter table'. –