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

Как умишлено да заключите MySQL ред, така че дори SELECT да върне грешка?

Ако зададете нивото на изолация на транзакциите на SERIALIZABLE , InnoDB wil implicity append LOCK IN SHARE MODE до всички SELECT изявления.

Този режим е в конфликт с заключванията, поставени от SELECT FOR UPDATE и SELECT s ще се заключи.

Имайте предвид обаче, че InnoDB може да заключи повече редове, отколкото да удовлетвори WHERE състояние. Това е така, защото заключва всички сканирани редове , не само тези съвпадащи .

Да речем, че имате индекс на col1 и тази заявка:

SELECT  *
FROM    mytable
WHERE   col1 = 1
        AND col2 = 2
FOR UPDATE

използва този индекс.

Това ще заключи всички записва с col1 = 1 , дори тези с col2 <> 2



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо механизмът MyISAM на MySQL не поддържа външни ключове?

  2. Как да изберете данни, където полето има минимална стойност в MySQL?

  3. PHP конвертира дата и час в секунди

  4. използвайте набор от резултати от съхранена процедура на mysql в друга съхранена процедура

  5. Mysql присъединяването дава дублиращи се редове