たとえば、「A_」などの特定の文字列で始まるテーブルで、特定の条件 AFTER a UPDATE で起動するトリガーを作成しようとしています。
CREATE TABLE `Table_TEST` (
`id` INT(11) NULL DEFAULT NULL,
`A` INT(11) NULL DEFAULT NULL,
`B` INT(11) NULL DEFAULT NULL,
`C` INT(11) NULL DEFAULT NULL
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
;
トリガーは、更新された行のインデックスまでの SUM (列 "A") から SUM (列 "B") を引いて、この SUM をこの行の列 "C" に書き込む必要があります。
CREATE DEFINER=`root`@`localhost`
TRIGGER `Table_TEST_before_insert` BEFORE UPDATE ON `Table_TEST` FOR EACH ROW
BEGIN
SET new.C = (SUM(new.A)-SUM(new.B));
END
このトリガーは機能せず、この失敗をもたらします
UPDATE `Testdb`.`Table_TEST` SET `b`='4' WHERE `id`=1 LIMIT 1;
/* SQL Fehler (1111): Invalid use of group function */
この後、それぞれのインデックスまでの指定された式に従って、そのインデックスの後に来る列「C」の他のすべての値を更新する必要があります。
現在、phpスクリプトでデータベースを更新するたびに追加する関数をphpで作成しました。しかし、実際には私が望むものではありません。
これをルーチン/トリガーとして使用します。
私が試したのはこんな感じですが、うまくいかないことに注意してください
CREATE DEFINER=`root`@`localhost`
TRIGGER `TABLE_1_before_update` BEFORE UPDATE ON `TABLE_1` FOR EACH ROW
BEGIN
SET new.C = (SUM(new.A)-SUM(new.B)) WHERE id=NEW.id;
END
私が得る失敗は次のとおりです。 SQL Fehler (1064): SQL 構文にエラーがあります。'WHERE id=NEW.id; の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。2行目のEND'
手伝ってくれませんか?