bestsource

한 테이블에 행을 삽입하고 다른 테이블의 값을 Maria와 함께 루프에 삽입DB

bestsource 2023. 8. 22. 22:16
반응형

한 테이블에 행을 삽입하고 다른 테이블의 값을 Maria와 함께 루프에 삽입DB

MariaDB 10.1에서 다른 테이블에 행을 삽입하는 트리거를 설정해야 합니다.지금까지 단일 레코드에 대한 트리거는 다음과 같습니다.

DELIMITER //
CREATE TRIGGER generate_items
    AFTER INSERT
    ON my_table
    FOR EACH ROW
BEGIN
    -- some_id is the id from my_table
    INSERT INTO another_table(some_id, some_value)
    VALUES (NEW.id, 'x');
END;
//

DELIMITER ;

나의 문제는some_value삽입할 유일한 레코드가 아니라 다른 테이블에서 가져온 값 목록입니다.실제로 방아쇠에 이런 것이 필요합니다.

-- Pseudo-code for illustrating
SET @values = SELECT value FROM some_table WHERE condition = true;
FOREACH(@value in @values) DO
  INSERT INTO another_table(some_id, some_value) VALUES (NEW.id, @value);
END

MariaDB 10.1을 사용하면 어떤 가능성이 있습니까?MariaDB 10.3이 FOR-loop을 제공한다고 들었는데 아직 데이터베이스를 업그레이드할 수 없습니다.

사용할 수 있습니다.insert ... select대신 구문insert ... values()그래서 다음과 같은 것이 있습니다.

CREATE TRIGGER generate_items
    AFTER INSERT ON my_table FOR EACH ROW
    INSERT INTO another_table(some_id, some_value)
    SELECT NEW.id, value FROM some_table WHERE condition = true
;

이렇게 하면 다음에 레코드를 삽입할 수 있습니다.another_table에 있는 바와 같이some_table지정된 조건에서 검색value동일하게 할당하는 동안 쿼리에서NEW.id모든 기록에 이르기까지

참고: 트리거는 단일 쿼리로 구성되므로 사용할 필요가 없습니다.BEGIN그리고.END구분 기호를 변경할 수도 없습니다.위의 단순화된 버전은 작동할 것입니다.

언급URL : https://stackoverflow.com/questions/58614559/inserting-rows-in-one-table-with-values-from-another-table-in-a-loop-with-mariad

반응형