web-dev-qa-db-ja.com

挿入後のMySQLトリガー

私は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;
16
Mishal Dholakia

あなたの場合、このようにトリガーを書き換えることができます

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から一重引用符が削除されました。これは、引用符によって、適切な識別子ではなく文字列リテラルになるためです。必要に応じてバックティックを使用できますが、予約語ではなく、特殊文字が含まれていないため不要です。
  • これは1ステートメントトリガーなので、DELIMITERコマンドとBEGIN...ENDブロックを使用する必要はありません。

ここにSQLFiddleデモ

17
peterm

おそらく区切り文字を設定する必要があります:

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ステートメントの末尾が混同されています。

6

これは私のために働いた、より単純化されたバージョン。

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);
5
Jaimin
AFTER INSERT ON `total_loaner`

バックティックを使用します。

0
Mihai