автоматическая вставка с триггером mysql

привет, у меня проблема с триггером mysql, у меня есть таблица, приведенная ниже. как сделать автоматическую вставку в поле add_id с триггером, когда пользователь вставляет trip_id, add_type, value.

CREATE TABLE `additional` ( `trip_num` VARCHAR(8) NOT NULL ,  
                            `add_id` VARCHAR(3) NOT NULL ,  
                            `add_type` VARCHAR(10) NOT NULL ,  
                            `value` VARCHAR(5) NOT NULL );
INSERT INTO `additional` (`trip_num`, `add_id`, `add_type`, `value`) VALUES 
('TRP0001', 'UM1', 'type 1', '50'), 
('TRP0001', 'UM2', 'type 1', '27'), 
('TRP0001', 'UB1', 'type 2', '250'), 
('TRP0002', 'UM1', 'type 1', '32'), 
('TRP0002', 'UB1', 'type 2', '300'), 
('TRP0002', 'UB2', 'type 2', '120'), 
('TRP0002', 'UL1', 'type 3', '120');

вот таблица

# database-trigger
Источник
  • 0
    Пожалуйста, предоставьте то, что вы пробовали, а также образцы данных, которые нужно вставить.
  • 0
    Замените фотографию текстовыми скриптами CREATE TABLE + INSERT INTO и отобразите желаемый результат в виде текстовой таблицы.
  • 0
    @Akina, я только что обновил текстовую таблицу CRETAE TABLE + INSERT
  • 0
    вы имеете в виду те триггеры, которые выполняются на одной и той же таблице?
  • 0
    привет @RajenRaiyarela, я хочу, чтобы автоматически add_id с последовательностью, когда я вставляю другое поле, но add_id имеет такое условие: если add_type = "type 1", тогда установите add_id "UM", если add_type = "type 2", затем установите add_id "UB", если add_type = "тип 2" затем установите add_id "UL"
  • 0
    Затем вы должны сделать это поле необязательным во вставке, а затем выполнить триггер обновления, который выполняется после вставки данных.
Codelisting
за 0 против
Лучший ответ
CREATE TRIGGER tr_bi
BEFORE INSERT 
ON additional
FOR EACH ROW
BEGIN
DECLARE counter INT;
SELECT 1 + COUNT(*) 
    INTO counter 
    FROM additional 
    WHERE trip_num = NEW.trip_num
      AND add_type = NEW.add_type;
SET NEW.add_id = CONCAT( CASE NEW.add_type WHEN 'type 1' THEN 'UM'
                                           WHEN 'type 2' THEN 'UB'
                                           WHEN 'type 3' THEN 'UL'
                                                         ELSE '??' END,
                         counter );
END;

скрипка

PS. Я удалилadd_id из INSERT, что приводит к добавлению значения DEFAULT в CREATE TABLE. Вы можете вернуться и присвоить этому полю любое значение - оно будет безоговорочно перезаписано.

  • 0
    я обнаружил ошибку, подобную этой CREATE TRIGGER tr_bi BEFORE INSERT ON дополнительный FOR EACH ROW BEGIN DECLARE counter INT MySQL сказал: Документация № 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис рядом с '' в строке 6
Codelisting
Популярные категории
На заметку программисту