MySQL обновление на основе выбора первичного ключа - PullRequest
0 голосов
/ 05 ноября 2018

Эй, у меня возникают пробелы при обновлении моего проекта Я создал похожие таблицы, которые могли бы помочь объяснить мою проблему

Мой стол

CREATE TABLE `test_task` (
  `pk` bigint(20) NOT NULL AUTO_INCREMENT,
  `parent_pk` bigint(20) NOT NULL,
  `msg` varchar(100) NOT NULL,
  `status` int(4) NOT NULL DEFAULT '1',
  PRIMARY KEY (`pk`),
  KEY `parent_pk` (`parent_pk`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

данные

INSERT INTO `test_task` (`parent_pk`, `msg`, `status`)
VALUES ('1234566', 'left', '1'),
       ('1234566', 'left', '1'),
       ('1234567', 'right', '1'),
       ('1234567', 'top', '1'),
       ('1234567', 'bottom', '1'),
       ('1234567', '980', '1'),
       ('1234566', 'left', '1')

Текущий запрос, который вызывает блокировки

update test_task 
set status = 0 
where parent_pk = 1234567 and 
      msg = 'left'

решение, которое у меня сейчас есть, это

update test_task 
set status = 0 
where pk in (select c.pk 
             from (Select pk 
                   from test_task 
                   where parent_pk = '1234567' and 
                         msg = 'left') c )

Мой вопрос теперь будет обновляться на основе первичного ключа, если у нас все еще будут блокировки БД. Блокировки происходят во время вставки и обновления значений текущий уровень изоляции БД REPEATABLE_READ, и я бы хотел, чтобы он оставался таким

Буду признателен за любую помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...