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

Czy INSERT IGNORE blokuje tabelę, nawet jeśli ignoruje wstawianie?

Zależy to od silnika - MyIsam i InnoDb zachowują się inaczej.

Dla tabel MyIsam, jeśli rekord już istnieje w tabeli (nawet jeśli nie jest jeszcze zatwierdzony), regularne INSERT tego samego rekordu ( ten sam unikalny klucz) w drugiej sesji zgłasza błąd zduplikowanego klucza - więc INSERT IGNORE po prostu zignoruje błąd i przejdzie dalej.

W tabeli InnoDB, jeśli rekord nie jest zablokowany, zwykłe INSERT natychmiast zgłoś błąd zduplikowanego klucza (INSERT IGNORE pominie błąd i przejdzie dalej).
Ale jeśli rekord jest zablokowany przez inną sesję (na przykład rekord jest wstawiony, ale jeszcze nie zatwierdzony, lub rekord jest zablokowany przez UPDATE lub DELETE lub SELECT FOR UPDATE), polecenie INSERT "zawiesi się" i będzie czekać, aż inna sesja usunie blokadę (przez COMMIT lub ROLLBACK). Następnie, jeśli rekord nadal istnieje po usunięciu blokady, INSERT zgłosi błąd (INSERT IGNORE zignoruje błąd), ale jeśli rekord nie istnieje, INSERT doda ten rekord do tabeli.

Słowo kluczowe IGNORE mówi po prostu „w przypadku jakiegokolwiek błędu po prostu go zignoruj ​​i kontynuuj”, ale nie wpływa to na zachowanie blokowania.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Symfony 3 - Wystąpił wyjątek w sterowniku:nie można znaleźć sterownika

  2. MySQL — Pokaż wszystkie permutacje?

  3. Utwórz użytkownika MySQL w systemie Linux za pomocą wiersza poleceń

  4. Jak w SQL wybrać 2 górne wiersze dla każdej grupy?

  5. MySQL:długi stół a szeroki stół