Mysql
 sql >> база данни >  >> RDS >> Mysql

Заключва ли INSERT IGNORE таблицата, дори ако игнорира вмъкването?

Зависи от машината - MyIsam и InnoDb се държат различно.

За MyIsam таблици, ако вече съществува запис в таблицата (дори ако все още не е ангажиран), обикновено INSERT на същия запис ( същия уникален ключ) в другата сесия отчита грешка с дублиран ключ - така че INSERT IGNORE просто игнорира грешката и продължава по-нататък.

В таблицата InnoDB, ако записът не е заключен, обикновеният INSERT ще незабавно докладвайте грешката с дублиран ключ (INSERT IGNORE ще пропусне грешката и ще продължи).
Но ако записът е заключен от другата сесия (например записът е вмъкнат, но все още не е ангажиран, или записът е заключен от UPDATE или DELETE или SELECT FOR UPDATE), командата INSERT ще "увисне" и ще изчака, докато другата сесия премахне заключването (чрез COMMIT или ROLLBACK). След това, ако записът все още съществува след премахване на заключването, INSERT ще съобщи за грешката (INSERT IGNORE ще игнорира грешката), но ако записът не съществува, INSERT ще добави този запис към таблицата.

Ключовата дума IGNORE просто казва „в случай на някаква грешка, просто я игнорирайте и продължавайте“, но това не влияе върху поведението на заключване.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. php mysql - трябва ли да добавя името на категорията на полето към таблица или не?

  2. ляво присъединяване с празни редове от дясната таблица mysql

  3. PHP и MySQL:Сравняване на месец и ден с динамична година

  4. MySQL DATE_ADD не работи

  5. MySql - Създаване на изглед за четене от множество таблици