简体   繁体   中英

What's wrong with the syntax of this simple MySQL trigger?

DELIMITER $$

CREATE TRIGGER ad_user AFTER DELETE

ON `user`
FOR EACH ROW BEGIN
    DECLARE max_id INT;
    DECLARE new_id INT;

    SELECT MAX(`id`) INTO max_id FROM `user`;
    IF max_id = NULL THEN
        SET max_id = 0;
    END IF

    SELECT `new_id` INTO new_id FROM `conf` WHERE `table` = 'user';

    IF max_id < new_id THEN
        UPDATE `conf` SET `new_id` = max_id WHERE `table` = 'user';
    END IF
END$$

I got following error prompt when I create this trigger:

Error Code: 1064 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 'SELECT new_id INTO new_id FROM conf WHERE table = 'fact'; IF max_id < new_id THEN ' at line 12

Anyone can help me? Thanks in advance!

Try writing the query like this:

DELIMITER $$

CREATE TRIGGER ad_user AFTER DELETE
ON `user`
FOR EACH ROW BEGIN
    DECLARE v_max_id INT;
    DECLARE v_new_id INT;

    SELECT MAX(`id`) INTO v_max_id FROM `user`;
    IF v_max_id IS NULL THEN
        SET v_max_id = 0;
    END IF;

    SELECT `new_id` INTO v_new_id FROM `conf` WHERE `table` = 'user';

    IF v_max_id < v_new_id THEN
        UPDATE conf c
            SET c.new_id = v_max_id
            WHERE c.`table` = 'user';
    END IF;
END$$

This mostly adds semicolons and fixes the = NULL .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM