Chcę scalić dane z jednej bazy danych do drugiej. Więc tworzę zrzut za pomocą, mysqldump
a następnie importuję go do innej bazy danych (o tej samej strukturze tabel). W tym przypadku nie mam żadnych problemów (takich jak zduplikowane wpisy lub coś innego).
Ale wykonuję kilka fuzji w celach testowych, a później dokonam ostatecznego scalenia. Chcę więc wykonać scalenie (dane mogą ulec zmianie) kilka razy. Zauważ, że moje wiersze w moich tabelach nigdy nie są usuwane, można je tylko wstawiać lub aktualizować.
Czy mogę utworzyć mysqldump z opcją ON DUPLICATE? A może mogę scalić zrzut, który wstawia nowe dane i aktualizuje zmodyfikowane dane?
Jasne, mogę wstawić ON DUPLICATE
zrzut ręcznie, ale chcę zautomatyzować proces scalania.
--replace
jest to równoważne z wykonywaniemON DUPLICATE UPDATE
każdej kolumny. Niestety, mysqldump nie jest zaprojektowany do aktualizacji określonych kolumn z powodu masowego ładowania i zrzutu natury mysqldump. Moja odpowiedź po prostu pokazuje, co potrafi mysqldump. Musisz zrobić niestandardowy kod, oprócz mysqldump, aby to zrobićON DUPLICATE UPDATE
.REPLACE INTO
może się nie powieść, ponieważ rekordu nie można usunąć za pomocą zerwania tych relacji. Jeśli takON DELETE CASCADE
, opróżnisz te tabele, które zależą od aktualizowanej.REPLACE INTO
jest dość niebezpieczną operacją.REPLACE INTO
) mogą być niebezpieczne i mieć „zaskakujące” efekty. Dobra odpowiedź - chciałem tylko dodać zastrzeżenie.