2013-09-10 39 views
10

Tôi mới sử dụng MySQL. Tôi có hai bảng total_loaner và available_loaner. Tôi đang cố gắng tạo ra một kích hoạt cho mỗi hàng mới được thêm vào trong total_loaner, tôi sẽ thêm hàng mới đó vào ready_loaner.Trình kích hoạt MySQL sau khi chèn

Dưới đây cách bảng của tôi trông giống như:

CREATE TABLE `total_loaner` (
    `Kind` varchar(10) NOT NULL, 
    `Type` varchar(10) NOT NULL, 
    `Sno` varchar(10) NOT NULL, 
    PRIMARY KEY (`Sno`) 
) 

CREATE TABLE `available_loaner` (
    `Kind` varchar(10) NOT NULL, 
    `Type` varchar(10) NOT NULL, 
    `Sno` varchar(10) NOT NULL, 
    `Status` char(10) NOT NULL DEFAULT '', 
    PRIMARY KEY (`Sno`) 
) 

cò của tôi dường như không làm việc.

CREATE TRIGGER new_loaner_added 
AFTER INSERT ON 'total_loaner' for each row 
begin 
INSERT INTO available_loaner (Kind, Type, Sno, Status) 
Values (new.Kind, new.Type, new.Sno, 'Available'); 
END; 

Trả lời

4

Bạn có thể cần phải thiết lập delimiter của bạn:

DELIMITER $$ 

CREATE TRIGGER new_loaner_added 
AFTER INSERT ON `total_loaner` for each row 
begin 
INSERT INTO available_loaner (Kind, Type, Sno, Status) 
Values (new.Kind, new.Type, new.Sno, 'Available'); 
END$$ 

DELIMITER ; 

Ngay bây giờ, nó khó hiểu các dấu chấm phẩy ở cuối báo cáo kết quả INSERT với thời điểm cuối báo cáo kết quả CREATE TRIGGER.

0
AFTER INSERT ON `total_loaner` 

Sử dụng dấu gạch chéo ngược.

11

Trong trường hợp của bạn, bạn có thể viết lại kích hoạt của bạn như thế này

CREATE TRIGGER new_loaner_added 
AFTER INSERT ON total_loaner 
FOR EACH ROW 
    INSERT INTO available_loaner (Kind, Type, Sno, Status) 
    VALUES (NEW.Kind, NEW.Type, NEW.Sno, 'Available'); 

Lưu ý: dấu ngoặc kép

  • đơn ra khỏi tên bảng total_loaner, vì dấu ngoặc kép có hiệu quả làm cho nó một chuỗi chữ thay vì một định danh thích hợp. Bạn có thể sử dụng ve sau nếu bạn muốn nhưng nó không cần thiết vì nó không phải là một từ dành riêng và nó không chứa bất kỳ ký tự đặc biệt nào.
  • vì nó là một một tuyên bố cò bây giờ bạn không cần phải sử dụng DELIMITER lệnh và BEGIN...END khối

Đây là SQLFiddle bản demo

2

một này làm việc cho tôi, phiên bản đơn giản hơn ..

CREATE TRIGGER new_loaner_added 
    AFTER INSERT ON `DB1`.`table_name` 
    FOR EACH ROW 
     INSERT INTO `DB2`.`table_name` (messageID, conversationID, fromJID) 
     VALUES (NEW.messageID,NEW.conversationID, NEW.fromJID); 
+0

và nếu một tên cột bảng khác nhau thì những gì chúng ta SHO uld làm gì? –

-1
CREATE TRIGGER new_loaner_added 
AFTER INSERT ON total_loaner 

FOR EACH ROW 
    INSERT INTO available_loaner (Kind, Type, Sno, Status) 
    VALUES (NEW.Kind, NEW.Type, NEW.Sno, 'Available'); 
Các vấn đề liên quan