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

Когато използвате заключване на MySQL FOR UPDATE, какво точно е заключено?

Защо просто не опитаме?

Настройте базата данни

CREATE DATABASE so1;
USE so1;
CREATE TABLE notification (`id` BIGINT(20), `date` DATE, `text` TEXT) ENGINE=InnoDB;
INSERT INTO notification(id, `date`, `text`) values (1, '2011-05-01', 'Notification 1');
INSERT INTO notification(id, `date`, `text`) values (2, '2011-05-02', 'Notification 2');
INSERT INTO notification(id, `date`, `text`) values (3, '2011-05-03', 'Notification 3');
INSERT INTO notification(id, `date`, `text`) values (4, '2011-05-04', 'Notification 4');
INSERT INTO notification(id, `date`, `text`) values (5, '2011-05-05', 'Notification 5');

Сега стартирайте две връзки към базата данни

Връзка 1

BEGIN;
SELECT * FROM notification WHERE `date` >= '2011-05-03' FOR UPDATE;

Връзка 2

BEGIN;

Ако MySQL заключи всички редове, следният оператор ще блокира. Ако заключва само връщаните редове, не трябва да блокира.

SELECT * FROM notification WHERE `date` = '2011-05-02' FOR UPDATE;

И наистина блокира.

Интересното е, че също не можем да добавяме записи, които биха били прочетени, т.е.

INSERT INTO notification(id, `date`, `text`) values (6, '2011-05-06', 'Notification 6');

блокове също!

В този момент не мога да бъда сигурен дали MySQL просто продължава и заключва цялата таблица, когато определен процент от редовете са заключени, или къде всъщност е наистина интелигентен, за да се увери, че резултатът от SELECT ... FOR UPDATE заявката никога не може да бъде променена от друга транзакция (с INSERT , UPDATE или DELETE ), докато заключването се държи.



  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 таблици?

  2. Актуализиране на MySql база данни с помощта на PHP чрез javascript функция onClick

  3. MySQL:изберете * от таблицата, където col IN (null, ) е възможно без ИЛИ

  4. Свържете се с отдалечена база данни MySQL чрез SSH с помощта на Java

  5. Подреждане на MYSQL по възходящо и низходящо сортиране