2011-09-19 13 views
-2

my mysql 트리거에서 if 문을 사용해야합니다. 그것은 그 다음과 같습니다mysql에서 구문 오류가 발생하는 경우

set @countentry = (SELECT count(id) as `id` FROM `tsc_page_have_wildcard` where idwildcard=1 and idpage=5); 
IF @countentry <> 0 THEN 
    INSERT INTO `tsc_page_have_wildcard` (`idpage`, `idwildcard`) VALUES (@pageid, NEW.id); 
END IF 

을 트리거를 실행하여 내가 얻을 : 오류 코드 : 1064 당신은 당신의 SQL 구문에 오류

있다;

CREATE TABLE IF NOT EXISTS `tsc_page_have_wildcard` (
    `id` int(11) NOT NULL auto_increment, 
    `idpage` int(11) NOT NULL, 
    `idwildcard` int(11) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `idpage` (`idpage`,`idwildcard`), 
    KEY `idwildcard` (`idwildcard`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; 

ALTER TABLE `tsc_page_have_wildcard` 
    ADD CONSTRAINT `tsc_page_have_wildcard_ibfk_1` FOREIGN KEY (`idpage`) REFERENCES `tsc_page` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    ADD CONSTRAINT `tsc_page_have_wildcard_ibfk_2` FOREIGN KEY (`idwildcard`) REFERENCES `tsc_wildcard` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; 

INSERT INTO `tsc_page_have_wildcard` (`id`, `idpage`, `idwildcard`) VALUES 
(1, 1, 1), 
(2, 1, 2), 
(3, 1, 3), 
(4, 1, 4), 
(5, 1, 5), 
(6, 41, 4), 
(7, 41, 5); 

: 올바른 구문 근처 'THEN @countentry <> 0

 INSERT INTO `tsc_page_have_wildcard` (`i' at line 1 

경우 테이블 구조체는 다음과 같다 사용하는 MySQL의 서버 버전에 해당하는 설명서를 확인 아무도 왜이 방아쇠에 작동하지 않는다면 알 수 있습니까?

답변

1

이 코드는 작동합니다 :

DELIMITER $$ 
CREATE /*!50017 DEFINER = 'root'@'localhost' */ TRIGGER `win` AFTER INSERT 
ON `tsc_page_have_wildcard` FOR EACH ROW 
BEGIN 
    SET @countentry = 
    (SELECT 
    COUNT(id) AS `id` 
    FROM 
    `tsc_page_have_wildcard` 
    WHERE idwildcard = 1 
    AND idpage = 5) ; 
    IF @countentry <> 0 
    THEN 
    INSERT INTO `tsc_page_have_wildcard` (`idpage`, `idwildcard`) 
    VALUES 
    (@pageid, NEW.id) ; 
    END IF ; 
END $$ 
DELIMITER ; 

세미 콜론 (;)이 나를 위해 일한 :-)

+0

경우 END 후. 감사! – Briefkasten

관련 문제