Jak update'ować w MySQL zawartość kolumnę Primary Key w danej tabeli która jest w drugiej tabeli Foreign Key'em relacji?
Chcę zmienić wpis w pewnych polach tej kolumny (varchar()) ale to że są one używane przez drugą tabelę powoduje blokowanie operacji Update.
To zależy, czy akcja jest jednorazowa, czy też ma to być "ficzer". Ale generalnie to takich rzeczy się nie robi. Nie po to zaklada się PK i FK, by potem te wartości zmieniać.
Ale jest na to rozwiązanie. (oczywiście zakładając, że jest to akcja jednorazowa i masz odpowiednie ku temu prawa):
- do tymczasowej tabeli przekopiowujemy rekordy z tabeli powiązanej FK, usuwamy je w tej tabeli, zmieniamy PK i w tabeli tymczasowej również, a potem przekopiowujemy do tabeli powiązanej FK;
- na czas zmiany PK i Fk usuwamy FK
- UPDATUjemy za jednym razem w obuu tabelach (ale to nie jestem pewien, czy zadziała).
Dzięki. Tak myślałem że trzeba będzie skorzystać z jakiejś pomocniczej tabeli. Ale chyba najłatwiej byłoby na chwile usunąć Contsraint związany z zależnością Foreign Key. Tylko nie wiem jak znaleźć nazwę tego Constraint (przez jakie polecenie) bo nie ja robiłem ta tabelę a twórca mógł nawet nie zdefiniować własnej nazwy Constarint dla tej relacji z FK.
FOREIGN_KEY_CHECKS można też dropnąć FK i dodać jeszcze raz po operacji.
FK można znaleźć w prosty sposób:
SELECT * FROM information_schema.key_column_usage
W polu TABLE_NAME można odnaleźć tabelę na której jest FK.
Dzięki.
Nie bardzo rozumiem tylko podpowiedzi FOREIGN_KEY_CHECKS ...
SET FOREIGN_KEY_CHECKS = 0;
Dzięki.