본문 바로가기
MySql

MySQL 삽입 트리거 후 MySQL은 자동 증가 값을 가져오고 삽입 후 필드 값을 업데이트하면 "알 수없는 열"오류가 발생합니다.

by 베이스 공부 2021. 1. 1.
반응형

삽입시 자동으로 생성되는 자동 증가 'ID'기본 키 필드의 값을 다른 필드 'Sort_Placement'에 할당하여 삽입 후 동일하도록 트리거를 만들려고합니다.

왜 이렇게하는지 궁금하다면 'Sort_Placement'가 변경 가능한 테이블의 정렬 값으로 사용되지만 기본적으로 레코드는 테이블 하단에 추가됩니다.

표 데이터

`ID` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`Account_Num` mediumint(8) unsigned NOT NULL,
`Product_Num` mediumint(8) unsigned NOT NULL,
`Sort_Placement` mediumint(8) unsigned DEFAULT NULL,
`Order_Qty_C` smallint(6) NOT NULL DEFAULT '0',
`Order_Qty_B` smallint(6) NOT NULL DEFAULT '0',
`Discount` decimal(6,2) NOT NULL DEFAULT '0.00',
PRIMARY KEY (`ID`),
UNIQUE KEY `ID_UNIQUE` (`ID`)

트리거 삽입 후

CREATE 
TRIGGER `order_guide_insert_trigger`
AFTER INSERT ON `order_guide`
FOR EACH ROW
    BEGIN
    IF Sort_Placement IS NULL THEN
        SET Sort_Placement = NEW.ID;
    END IF;
END;

나는 운없이 "NEW"접두사를 사용하는 많은 조합을 시도했다. 예를 들어 각 필드 이름 앞에 NEW 접두사를 넣습니다.

직접 해보기

INSERT INTO `order_guide` (`Account_Num`, `Product_Num`) VALUES ('5966', '3');

삽입 오류

ERROR 1054: Unknown column 'Sort_Placement' in 'field list'

 

해결 방법

 

이것은 약간의 해킹처럼 보이지만 MySQL에 내장 된 LAST_INSERT_ID () 함수를 사용하여 작동시킬 수있었습니다.

CREATE TRIGGER `order_guide_insert_trigger`
BEFORE INSERT ON `order_guide`
FOR EACH ROW 
BEGIN
    IF NEW.Sort_Placement IS NULL THEN
        SET NEW.Sort_Placement = LAST_INSERT_ID() + 1;
    END IF;
END;

이것은 또한 작동하고 작동하는 것 같습니다.

CREATE TRIGGER `order_guide_insert_trigger`
BEFORE INSERT ON `order_guide`
FOR EACH ROW 
BEGIN
    IF NEW.Sort_Placement IS NULL THEN
        SET NEW.Sort_Placement = (SELECT ID FROM order_Guide ORDER BY id DESC LIMIT 1) + 1;
    END IF;
END;

 

참조 페이지 https://stackoverflow.com/questions/16597467

 

 

반응형

댓글