2014-04-15 3 views
0

나는 자동 증가 열 id과 다른 열 ord이있는 테이블을 가지고 있습니다.필드의 기본값을 auto_increment 값으로 설정합니다.

나의 목표는 인 ord에 대한 '기본'값을 갖는 것입니다. 트리거 (아래 참조)를 사용하고 있지만 항상 id 값 대신 0을 사용합니다.

id에서 auto_increment를 제거하면 정상적으로 작동합니다. 필드의 '기본'값을 auto_increment 필드 중 하나로 설정하는 방법은 무엇입니까?

CREATE TABLE IF NOT EXISTS `mytable` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `ord` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
); 

트리거

CREATE TRIGGER `ord_ai` BEFORE INSERT ON `mytable` 
FOR EACH ROW IF NEW.ord IS NULL THEN 
    SET NEW.ord := NEW.id; 
END IF 

답변

1

INFORMATION_SCHMEA.TABLES에서 id 필드의 다음 AUTO_INCREMENT 값을 읽고 ord 필드를 사용합니다.

delimiter // 

drop trigger if exists ord_ai // 

CREATE TRIGGER `ord_ai` BEFORE INSERT ON `mytable` 
FOR EACH ROW 
BEGIN 
    IF NEW.ord IS NULL THEN 
    SET NEW.ord := (SELECT AUTO_INCREMENT 
         FROM INFORMATION_SCHEMA.TABLES 
         WHERE TABLE_NAME = 'mytable' 
         AND TABLE_SCHEMA = DATABASE()); 
    END IF; 
END; 
// 

delimiter ; 
+0

감사합니다. 이것은 완벽하게 작동합니다. 하지만 왜 내 코드에서'id'가 0입니까? 또한'LAST_INSERT_ID()'가 작동하지 않는 이유는 무엇입니까? – Frithjof

+1

'LAST_INSERT_ID()'는 삽입이 완료된 후에 만 ​​작동합니다. 'before insert' 트리거에서는 사용할 수 없습니다. –

관련 문제