Недавно мы перенесли нашу версию MySQL на MySQL 8, но мы столкнулись с действительно странным поведением: некоторые (действительные) запросы работали раньше, как будто чары переставали работать (иногда) без причины, и MySQL возвращал ошибку, но если мы иногда перезапускаем его оно работает.
Вот пример:
UPDATE `Members` set `ProZipCode` = 75001, `ProCity` = 'Paris', `ActivationCode` = 'AAA-15372695', `State` = 1 WHERE `MemberId` = 42;
Если я запущу этот запрос 10 раз подряд, он будет работать примерно 6 раз, но 4 раза выдаст ошибку (случайно) как в Laravel, так и в phpmyadmin:
Integrity constraint violation : Column 'ActivationCode' cannot be null
Мы используем MySQL версии 8.0.36.
Изменить с некоторыми уточнениями:
Но ошибка указывает на то, что в какой-то момент, возможно, из-за задержки или других ошибок, что-либо, генерирующее значение кода активации, не получило значение вовремя, чтобы быть вставленным в оператор, и поэтому ничего не передало и выдало ошибку? На самом деле хорошо, что возникает ошибка, поскольку, если бы столбец не был настроен на запрещение нулевых значений, он бы перезаписал значение в этом столбце нулевым значением.
Когда вы запускаете его 10 раз подряд, используете ли вы одно и то же значение ActivationCode? Если код генерируется динамически, некоторые из них могут быть нулевыми.
Как вы запускаете запрос 10 раз подряд из PhpMyAdmin?
MySQL версии 8.2.20 не существует. Пожалуйста, запустите SELECT VERSION();
и подтвердите, какую версию вы действительно используете.
Привет, я отредактировал первое сообщение, включив в него некоторый контекст и ответы на ваши вопросы.
Можете ли вы показать CREATE TABLE и триггер?
Я не могу показать вам таблицу создания, триггер следующий: CREATE TRIGGER GenerateMemberHash
BEFORE INSERT ON Members
FOR EACH ROW SET NEW.MemberHash = RANDSTRING(32) Также я действительно не думаю, что это связано с конкретным столбцом или таблицей. , у нас случайно возникает одна и та же проблема в разных столбцах/таблицах, и это работало годами, прежде чем мы перешли на mysql8 и Google Cloud.
Кажется, переход на последнюю версию MySQL 5.7 решил нашу проблему. Мы попытались обновить MySQL до последней версии 8, но это не сработало.
Действительно странное поведение...
Вам необходимо показать схемы создания стола. Есть ли какие-либо триггеры, события, блокировки или внешние ключи? Это удаленная база данных, поэтому, возможно, виновата некоторая задержка?