#mysql #triggers #insert
#mysql #триггеры #вставить
Вопрос:
MariaDB версии 10.1.16. Я не могу найти, в чем проблема в приведенном ниже триггере:
DROP TRIGGER IF EXISTS `insert_customer`;
DELIMITER |
CREATE TRIGGER `insert_customer` AFTER INSERT ON `installations`
FOR EACH ROW BEGIN
DECLARE customerId INT DEFAULT NULL;
DECLARE versionCode INT DEFAULT NULL;
SELECT c.`id`, c.`version_code` INTO @customerId, @versionCode FROM `customers` c WHERE c.`phone` = NEW.`phone`;
IF @customerId IS NULL THEN
INSERT INTO `customers` (`phone`, `imei`, `platform`, `version_code`, `created`, `modified`) VALUES (NEW.`phone`, NEW.`imei`, NEW.`platform`, NEW.`version_code`, NOW(), NOW());
ELSEIF NEW.`version_code` > @versionCode THEN
UPDATE `customers` SET `version_code` = NEW.`version_code` WHERE `id` = @customerId;
END IF;
END;|
DELIMITER ;
Рядом с надписью 1064 — синтаксическая ошибка, ЗАТЕМ ВСТАВИТЬ, но я уверен, что проблема в другом месте. Пожалуйста, помогите.
Комментарии:
1. будьте осторожны с ошибкой 1172 при выборе stmt…
INTO @customerId, @versionCode
2. @Drew: ошибка 1172 невозможна, потому что customers.phone имеет уникальное ограничение 🙂 Я получаю ошибку 1064 рядом с INSERT. Есть идеи? TIA.
3. если вы предоставите инструкции create table, которые помогли бы, и точное сообщение об ошибке. Это если перевод версии продукта maria не очень старый (большинство из нас не использует maria). Так что, возможно, это проблема с версией. Кто-то должен иметь возможность попытаться воссоздать это для вас, если ничего очевидного не выскакивает.