Триггеры в MySQL после вставки - PullRequest
       1

Триггеры в MySQL после вставки

0 голосов
/ 30 сентября 2019

Я новичок в программировании и мне нужна небольшая помощь в триггерах. Я хочу создать триггер, когда данные вводятся в таблицу Affiliate_Detail, чтобы обновить другой столбец в той же таблице, который представляет собой объединение символов «AF» и поля affiliateNumber. affiliateNumber - автоинкремент, первичное поле

CREATE TRIGGER updateAffiliateId 
AFTER  INSERT
on Affiliate_Detail
AS
BEGIN
UPDATE Affiliate_Detail SET affiliateId=CONCAT("AF",new.affiliateNumber);
END

1 Ответ

0 голосов
/ 30 сентября 2019

SolarFlare указала, что приведенная ниже рекомендация перед вставкой не сработает в случае первичных ключей auto inc, поскольку значение неизвестно при вставке до вставки, и вы не можете обновить ту же таблицу в вставке после вставки.

Поскольку ваше требование относительно простое, вы просто объединяете строку и число, я рекомендую использовать сгенерированный столбец для этого

ALTER TABLE x
ADD COLUMN affiliateID VARCHAR(100)
GENERATED ALWAYS AS (CONCAT('AF',new.affiliateNumber));

Дополнительная информация:

http://www.mysqltutorial.org/mysql-generated-columns/


Или даже не запекайте это в своей базе данных - сделайте это во внешнем интерфейсе, запустив транзакцию, вставив запись, затем обновив с использованием last_insert_id


Для ситуаций, когда он отличается от автоматического столбца:

Цитировать точное руководство :

В триггере BEFORE вы также можете изменить его значение с помощьюSET NEW. col_name = значение, если у вас есть привилегия UPDATE для него. Это означает, что вы можете использовать триггер для изменения значений, которые будут вставлены в новую строку или использованы для обновления строки.

Измените свой триггер на BEFORE INSERT (и вам, вероятно, также придетсясделайте это ДЛЯ КАЖДОЙ СТРОКИ) и напишите новое значение напрямую:

CREATE TRIGGER ... BEFORE INSERT ...
FOR EACH ROW
BEGIN
  SET NEW.affiliateId=CONCAT('AF',new.affiliateNumber);
END

Это не набор, как в операторе обновления. Это устанавливается так же, как и при настройке переменной в типичном языке программирования, например, JavaScript var x = "AF" + y;

Документы, на которые я ссылаюсь сверху, содержат множество примеров

Примечание: стандартные SQL-запросыапостроф / одинарные кавычки для обозначения строк и речевых знаков / двойные кавычки для обозначения идентификаторов. В то время как MySQL позволяет использовать двойные кавычки для обозначения строк, при работе с базой данных часто хорошо придерживаться стандарта, чтобы у вас было меньше вещей, которые могли бы вас сбить с толку, когда вы начинаете работать с другим БД

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...