私はMySQLが初めてです。 total_loanerとavailable_loanerの2つのテーブルがあります。 total_loanerに追加された新しい行ごとにトリガーを作成しようとしています。その新しい行をavailable_loanerに追加します。
ここに私のテーブルがどのように見えるか:
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`)
)
トリガーが機能しないようです。
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;
あなたの場合、このようにトリガーを書き換えることができます
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');
注:
total_loaner
から一重引用符が削除されました。これは、引用符によって、適切な識別子ではなく文字列リテラルになるためです。必要に応じてバックティックを使用できますが、予約語ではなく、特殊文字が含まれていないため不要です。DELIMITER
コマンドとBEGIN...END
ブロックを使用する必要はありません。ここにSQLFiddleデモ
おそらく区切り文字を設定する必要があります:
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 ;
現時点では、INSERT
ステートメントの末尾のセミコロンとCREATE TRIGGER
ステートメントの末尾が混同されています。
これは私のために働いた、より単純化されたバージョン。
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);
AFTER INSERT ON `total_loaner`
バックティックを使用します。