My storage is INNODB, IF 문에서 2 개의 쿼리를 사용하여 트리거를 만들려고합니다. 은 아래로 당신이 2 내가 첫 번째로 활성화 트리거에있는 나에게 오류Mysql 트리거가 IF 인 경우
delimiter |
CREATE TRIGGER count_delete_videos BEFORE DELETE ON videos
FOR EACH ROW BEGIN
UPDATE counts SET count = count - 1 WHERE name = 'all';
IF OLD.published = 1 THEN
DELETE FROM videos_categories WHERE id_video = OLD.id;
DELETE FROM videos_tags WHERE id_video = OLD.id;
END IF;
END;
|
delimiter ;
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= OLD.id;
END IF;
END' at line 6
을 제공하는 트리거를 볼 수 있습니다.
delimiter |
CREATE TRIGGER count_delete_videos_tags AFTER DELETE ON videos_tags
FOR EACH ROW BEGIN
UPDATE tags SET count = count - 1 WHERE id = OLD.id_tag;
END;
|
delimiter ;
delimiter |
CREATE TRIGGER count_delete_videos_categories AFTER DELETE ON videos_categories
FOR EACH ROW BEGIN
UPDATE categories SET count = count - 1 WHERE id = OLD.id_category;
IF OLD.id_category <> 20 AND OLD.id_category <> 34 THEN
UPDATE counts SET count=count-1 WHERE name='english';
ELSEIF OLD.id_category = 34 THEN
UPDATE counts SET count=count-1 WHERE name='german';
ELSEIF OLD.id_category = 20 THEN
UPDATE counts SET count=count-1 WHERE name='italian';
END IF;
END;
|
delimiter ;
그러나이 하나
delimiter |
CREATE TRIGGER count_delete_videos BEFORE DELETE ON videos
FOR EACH ROW BEGIN
UPDATE counts SET count = count - 1 WHERE name = 'all';
IF OLD.published = 1 THEN
DELETE FROM videos_categories WHERE id_video = OLD.id;
END IF;
END;
|
delimiter ;
Query OK, 0 rows affected (0.16 sec)
어떻게 내가 먼저 트리거 작업을 할 수 완벽하게 작동? 내가 뭘 잘못하고있어? 나를 도와 주신 Thx.
각 delete 문에 대해 if 절을 두 번 줄 수 있습니까? – nawfal
(카운터 제외) FON을'ON DELETE CASCADE '으로 정의하여 외장 키 제약 조건 (각 테이블에서 하나씩)과'video' 테이블에서 동일한 동작을 할 수 있다는 것을 알고 계십니까? –
그래, 나도 알아,하지만 foreing 열쇠에 MySQL에서 트리거가 활성화되지 않습니다, 그래서 다른 트리거와 함께이 쿼리를 삭제해야합니다 다른 검색어를 활성화 –