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 позволяет использовать двойные кавычки для обозначения строк, при работе с базой данных часто хорошо придерживаться стандарта, чтобы у вас было меньше вещей, которые могли бы вас сбить с толку, когда вы начинаете работать с другим БД