Проблема в MySQL

Solmyr
На сайте с 10.09.2007
Offline
501
258

Есть таблица t движок MyISAM


a|b|c
-----
1|2|5
1|3|10
2|3|20

PRIMARY INDEX из двух столбцов a и b

Запускаю последовательно два запроса, из php с помощью функции mysqli_query:


mysqli_query($resource,'DELETE FROM t WHERE a=1');
mysqli_query($resource,'INSERT INTO t (a,b,c) VALUES (1,2,5)');

Получаю ошибку:

Duplicate entry '1-2' for key 'PRIMARY'

Единственное объяснение почему такое может быть - это то, что по какой-то причине эти два запроса выполняются не последовательно а параллельно. Как этого избежать и убедиться что запросы выполняться последовательно? В логе mysql эти запросы отображаются именно в правильной последовательности.

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#1

Вообще проблема известна. Там суть в индексах, которые не так быстро обновляются как записи.

Решения проблемы есть такое:

https://stackoverflow.com/questions/49499654/delete-then-insert-occasionally-fails-with-duplicate-key

или через удаление индекса:

https://stackoverflow.com/questions/43152033/mysql-duplicate-entry-error-on-insert

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Solmyr
На сайте с 10.09.2007
Offline
501
#2
LEOnidUKG:
А если сделать тест и между ними поставить sleep(2); то проблемы не будет?

Даже если и не ставить, проблема возникает где-то один раз из 100. Этот код выполняется в цикле 1000 раз, на 1000 раз где-то 10 ошибок.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий