반응형
삽입시 자동으로 생성되는 자동 증가 '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
반응형
'MySql' 카테고리의 다른 글
MySQL C ++를 사용하여 mySQL 데이터베이스를 연결하는 방법 (0) | 2021.01.01 |
---|---|
MySQL Hibernate에서 생성 된 외래 키 이름 변경 (0) | 2021.01.01 |
MySQL : 특정 DB에 대한 권한 만있는 사용자 생성 (0) | 2021.01.01 |
MySQL export mysql database table contents on to a PDF file using php (0) | 2021.01.01 |
MySQL PHP / MySQL에서 시간에 4 시간을 추가하는 방법 (0) | 2021.01.01 |
댓글