2013-09-25 32 views
13

Trong MySQL tôi đã cố gắng để xác định một kích hoạt như thế này:MySQL mã lỗi 1235

DELIMITER $$ 
CREATE TRIGGER vipInvite 
AFTER INSERT ON meetings 
FOR EACH ROW 
BEGIN  
IF(NOT EXISTS (SELECT * FROM participants 
    WHERE meetid = NEW.meetid AND pid ='vip')) 
    THEN 
    IF(EXISTS(SELECT * FROM meetings WHERE meetid = NEW.meetid AND slot > 16)) 
    THEN 
    INSERT INTO participants(meetid, pid) 
    VALUES (NEW.meetid,(SELECT userid 
    FROM people WHERE people.group = 'tap' GROUP BY invite)); 
END IF; 
END IF; 
END $$ 
DELIMITER ; 

Tạo lỗi này:

This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table.

Có cách nào để làm việc xung quanh này để tôi có thể xác định nhiều trigger ?

+0

Như đã đề cập https://dba.stackexchange.com/questions/105578/error-this-version-of-mariadb-doesnt-yet-support-multiple-triggers -with-the-s MySQL 5.7.2 và MariaDB 10.2.3 hỗ trợ nhiều trình kích hoạt trên cùng một thời gian và sự kiện hành động – Musa

Trả lời

22

Lỗi này có nghĩa là bạn đã có kích hoạt AFTER INSERT trên bảng meetings.

Nếu nó là cò cùng (nghĩa vipInvite) mà bạn đã tạo trước đó và bây giờ bạn muốn thay thế nó thì bạn cần phải thả nó đầu tiên

DROP TRIGGER vipInvite; 
DELIMITER $$ 
CREATE TRIGGER vipInvite 
... 
END$$ 
DELIMITER ; 

Bây giờ nếu bạn có một số kích hoạt khác mà bạn phải trộn mã từ cả hai kích hoạt thành một, sau đó thả kích hoạt hiện có, và sau đó tạo ra một cái mới.

Để hiển thị danh sách các trình kích hoạt hiện có, hãy sử dụng SHOW TRIGGERS.

SHOW TRIGGERS WHERE `table` = 'meetings'; 
+0

Nó đã giải quyết được sự cố – user2817052

+3

@ user2817052 Tuyệt vời! Nếu bạn cảm thấy câu trả lời hữu ích, hãy xem xét ** [chấp nhận] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) ** nó. – peterm

1

Làm thế nào để tái tạo lỗi này trong MySQL:

ERROR 1235 (42000): This version of MySQL doesn't yet support 'multiple 
triggers with the same action time and event for one table' 

Chạy truy vấn sau đây:

DELIMITER // 
CREATE TRIGGER mytrigger1 AFTER INSERT ON mytable 
FOR EACH ROW 
BEGIN 
END// 

DELIMITER // 
CREATE TRIGGER mytrigger2 AFTER INSERT ON mytable 
FOR EACH ROW 
BEGIN 
END// 

Nếu bạn muốn treo nhiều hành động trên cùng một sự kiện/bảng, bạn sẽ phải nhồi nhét tất cả nó vào một kích hoạt. Bạn có thể gọi nhiều thủ tục được lưu trữ như thế này:

DELIMITER // 
CREATE TRIGGER mytrigger1 AFTER INSERT ON mytable 
FOR EACH ROW 
BEGIN 
    CALL fromulate_the_moobars(NEW.myid); 
    CALL its_peanut_butter_jelly_time(NEW.myname); 
END//