Пожалуйста, сравните следующий оператор UPDATE, который я использую в MySQL 8.0, с образцом базы данных Sakila :
UPDATE `film`
SET
`original_language_id` = FLOOR(1 + (RAND() * 6))
WHERE
`film_id` = FLOOR(1 + (RAND() * 1000));
Идея состоит в том, чтобы обновить случайную строку из film
, чтобы ключ столбца original_language_id
для этой строки имел значение от 1 до 6.
В таблице film
1000 строк с PK от 1 до 1000. Столбец original_language_id
- это внешний ключ к таблице language
. В таблице language
6 строк с PK от 1 до 6.
Вышеупомянутый оператор UPDATE считает небезопасным MySQL (ошибка 1175). (Я бы хотел знать почему, но это не мой вопрос). Итак, чтобы заставить выполнение инструкции выполняться, я предшествую ей: SET SQL_SAFE_UPDATES = 0;
.
Когда я затем запускаю инструкцию UPDATE, я ожидаю увидеть в окне вывода:
1 строка (s) Соответствующие затронутые строки: 1 Изменено: 1 Предупреждения: 0
Но вместо этого я иногда получаю 0 затронутых строк, иногда 1, а иногда 2!
Мой вопрос: почему этот оператор UPDATE не влияет на одну и только одну строку?
PS - Пожалуйста, избегайте комментариев о том, имеет ли запрос смысл для вас или нет, и / или о целесообразности отключения безопасный режим обновления. Запрос представляет собой упражнение в учебных целях, и я полностью осознаю важность указанного режима. Спасибо.