Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zbiorcze wstawianie tabel powiązanych z MySQL z bash

Twoje pytanie zawiera różne sprzeczne wymagania. Ta odpowiedź koncentruje się na aspekcie „utrzymania blokady”.

Aby utrzymać blokadę tabeli dla całej operacji, będziesz musiał utrzymywać jedno połączenie z serwerem sql. Jednym ze sposobów byłoby przekazanie wszystkiego jako wielowierszowych danych wejściowych z wieloma poleceniami do pojedynczego wywołania klienta wiersza poleceń mysql. W zasadzie tak:

{ echo "LOCK TABLES Table1 WRITE"
  for i in "${infiles[@]}"; do
    echo "LOAD DATA LOCAL INFILE '${i}'"
  done
} | mysql

To zadziała tak długo, jak długo będziesz mógł wygenerować wszystkie wymagane instrukcje bez zadawania pytań z bazy danych (takich jak maksymalny identyfikator), gdy blokada jest utrzymywana.

W celu połączenia operacji odczytu (takich jak pytanie o maksymalną wartość) i operacji zapisu (takich jak ładowanie zawartości niektórych plików), będziesz potrzebować dwukierunkowej komunikacji z serwerem. Osiągnięcie tego przez bash jest bardzo trudne, więc odradzałbym to. Nawet jeśli nie musisz zadawać pytań, jednokierunkowe połączenie zapewniane przez potok bash jest źródłem niebezpieczeństwa:jeśli coś pójdzie nie tak po stronie mysql, bash nie zauważy i i tak wyda następne polecenie. Możesz popełnić niespójne dane.

Z tych powodów wolę sugerować jakiś język skryptowy, dla którego dostępne są powiązania mysql, takie jak opcje Perla lub Pyhon, o których wspomniałeś. Odczytywanie plików CVS w tych językach jest łatwe, więc możesz wykonać wszystkie poniższe czynności w jednym skrypcie:

  1. zablokuj tabele
  2. rozpocznij transakcję
  3. odczytaj wejściowe pliki csv
  4. zadawaj pytania, takie jak maksymalny identyfikator
  5. dostosuj dane wejściowe, aby pasowały do ​​układu tabeli
  6. wstaw dane do tabel
  7. jeśli nie wystąpiły żadne błędy, zatwierdź transakcję



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql_fetch_row() vs mysql_fetch_assoc() vs mysql_fetch_array()

  2. Pokaż obraz w Wordpress z kodem PHP

  3. Baza zapytań przepisać URL?

  4. Zapytanie MySQL z wieloma LIMITAMI

  5. wyszukaj wiele słów kluczowych za pomocą php i mysql (gdzie X jak)