автоматическая вставка с триггером mysql - PullRequest
0 голосов
/ 20 апреля 2020

привет, у меня проблема с 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');

здесь таблица

1 Ответ

0 голосов
/ 20 апреля 2020
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. Вы можете отменить и присвоить этому полю любое значение - оно будет перезаписано безоговорочно.

...