Я думаю, что ваша рутина детерминирована.Документация не очень ясна, и это привело к тому, что многие люди были очень озадачены этой проблемой, которая на самом деле больше связана с репликацией, чем с чем-либо другим.
Рассмотрим ситуацию, когда у вас настроена репликация между двумя базами данных.База данных master хранит журнал всех сохраненных подпрограмм, которые были выполнены, включая их входные параметры, и отправляет этот журнал подчиненному устройству.Подчиненный выполняет те же самые сохраненные подпрограммы в том же порядке с теми же входными параметрами.Будет ли ведомая база данных теперь содержать идентичные данные с основной базой данных?Если хранимые подпрограммы создают идентификаторы GUID и сохраняют их в базе данных, то нет, базы данных master и slave будут другими, и репликация будет нарушена.
Основное назначение флага DETERMINISTIC - сообщить MySQL, включает ли вызовыэта хранимая подпрограмма в журнале репликации приведет к различиям между базой данных master и реплицированными ведомыми устройствами и поэтому является небезопасной.
При принятии решения о том, подходит ли флаг DETERMINISTIC для хранимой подпрограммы, подумайте об этом следующим образом:Я начинаю с двух идентичных баз данных и выполняю свою подпрограмму для обеих баз данных с одинаковыми входными параметрами. Будут ли мои базы данных идентичны?Если это так, то моя подпрограмма является детерминированной.
Если вы объявляете вашу подпрограмму детерминированной, когда это не так, то копии вашей основной базы данных могут не совпадать с исходной, поскольку MySQL только добавит вызов процедуры кжурнал репликации и выполнение процедуры на ведомом устройстве не дает идентичных результатов.
Если ваша подпрограмма недетерминирована, MySQL должен вместо этого включить затронутые строки в журнал репликации.Если вы объявите вашу подпрограмму как недетерминированную, когда это не так, это ничего не сломает, но журнал репликации будет содержать все затронутые строки, когда достаточно было бы только вызова процедуры, что может повлиять на производительность.