Actualizați tabelele dintr-o bază de date într-o altă tabelă de bază de date - depășirea stivei în limba rusă

Orei bune a zilei, tovarăși! Vă cer să sfătuiți cum să faceți cel mai bine.
Scopul este de a actualiza datele dintr-o tabelă în alta. Structura tabelelor este identică.
DB pe servere diferite.






Bucată de cod

Primesc această cerere din baza de date. Dar nu-mi dau seama cum să fac UPDATE informațiile corecte după SELECT.

Și o altă întrebare este cum să procedați în mod corespunzător astfel încât volumul cererii de actualizare să nu pună baza de date pe o perioadă lungă de timp?
Acum am un impas cu implode (',' $ rezultat);

aceasta este matricea SELECT primită din baza de date. Provoacă implode (); ea oferă doar o parte a matricei la primul delimiter. Cum pot obține întreaga matrice?

presetat 5 Sep '16 la 11:14 am

Pentru aceasta, este convenabil să utilizați solicitarea INSERT INTO. SELECT. cu care puteți transfera datele de la o masă la alta. Deoarece aveți tabele în diferite baze de date, este mai bine să utilizați notația extinsă, indicând numele bazelor de date înainte de numele tabelelor. În acest caz, nu veți depinde de interogarea din baza de date curentă.







Noile înregistrări vor fi introduse în tabel, pentru a actualiza datele existente în interogare, adăugați cuvântul cheie ON DUPLICATE KEY UPDATE. instrucțiunile în care va funcționa dacă tabela are deja o înregistrare cu cheia primară care trebuie inserată. În acest caz, ar trebui să actualizați valorile existente, așa cum se arată în exemplul de mai jos.

În următoarea interogare, datele din tabela table_one a bazei de date currdb sunt distilate în aceeași tabelă de baze de date a celeilalte.

În UPDATE ON DUPLICATE KEY, va trebui să listați toate coloanele pe care doriți să le actualizați.

Pentru a nu bloca tabelele mult timp, reduceți numărul de intrări în designul LIMIT și actualizați datele în mai mulți pași.

Dacă bazele de date sunt localizate pe diferite servere, atunci trebuie să preluați mai întâi datele de pe primul server prin cererea SELECT și apoi să creați o solicitare INSERT multi-linie către cel de-al doilea server. Aici puteți folosi, de asemenea, UPDATE ON DUPLICATE KEY. pentru a actualiza datele existente

Această metodă are o limitare, dimensiunea interogării SQL pe care o trimiteți serverului nu trebuie să depășească dimensiunea specificată de parametrul max_allowed_packet (trebuie fie să măriți dimensiunea acestei directive, fie să reduceți numărul de intrări în LIMIT).

În plus, dacă aceasta nu este o operațiune unică, ci o operație periodică, ar trebui să luați în considerare un mecanism de replicare full-time care va depăși datele mult mai rapid și mai precis decât ar fi în orice implementare PHP.







Trimiteți-le prietenilor: