Как создать триггер в Google Cloud SQL базы данных экземпляра
У меня проблема с созданием триггера в моей базе данных. У меня есть экземпляр MySQL второго поколения с базой данных (имя: тест) в моем облаке Google SQL.
Прямо сейчас у меня есть несколько таблиц в моей базе данных, и я пытаюсь создать триггер в одной из этих таблиц, используя:
CREATE TRIGGER date_overlap_insert_start_date
BEFORE INSERT ON driver_operation
FOR EACH ROW
BEGIN
if exists(
select 1
from driver_operation
where nif = NEW.nif
and (NEW.start_date > start_Date and NEW.start_date < end_Date)) then
signal sqlstate '45000' SET MESSAGE_TEXT = 'Overlaps with existing data';
end if;
END;
Я получаю следующую ошибку: Код ошибки: 1064. У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' в строке 10
Есть ли кто-нибудь, кто может помочь мне в этом? Этот триггер предназначен для предотвращения наложения полей даты.
1 ответ
У меня была такая же проблема сегодня. Это просто из-за того, что экземпляр sql облака просматривает каждую точку с запятой в качестве конца оператора, поэтому я могу только предполагать, что он пытается выполнить каждый раз, когда встречается с ним.
Попробуйте создать свой триггер с помощью:
/*!50003 CREATE*/ /*!50003 TRIGGER date_overlap_insert_start_date
BEFORE INSERT ON driver_operation
FOR EACH ROW
BEGIN
if exists(
select 1
from driver_operation
where nif = NEW.nif
and (NEW.start_date > start_Date and NEW.start_date < end_Date))
then
signal sqlstate '45000' SET MESSAGE_TEXT = 'Overlaps with
existing data';
end if;
END */
отредактировано, чтобы исправить мой синтаксис. Отсутствовала точка с запятой.
Что касается Google Cloud Platform, важно перейти к конфигурации вашего экземпляра, то есть "Изменить конфигурацию", затем перейти в "Флаги" и убедиться, что для параметра "log_bin_trust_function_creators" установлено значение "on". Это решит проблемы с созданием триггеров GCP, а также позволит вам создавать триггеры в MySQL Workbench CE 8.0 без сбоев.