1

まず第一に、同じタイプの質問がたくさんあることは知っていますが、それらは私の問題を解決しませんでした!

指定された 2 列のセットに対して 10 行を超える場合、最も古い行を削除したいと考えています。私のトリガーは次のようになります。

 DELIMITER //

 CREATE TRIGGER TEST_TRIGGER
 AFTER INSERT
 ON table1
 FOR EACH ROW

 BEGIN

 SELECT COUNT(*)
 INTO @Tcount
 FROM table1
 WHERE columnA = NEW.columnA
 AND columnB = NEW.columnB;

 IF @Tcount > 10 THEN

 DELETE FROM table1
 WHERE id in (select * from (select MIN(id) from table1 where columnA = NEW.columnA and columnB = NEW.columnB) as t);


 END IF;
 END; 
 //
 DELIMITER;

ファイルにトリガーがあり、実行するとエラーがスローされます。完全なエラーは

ERROR 1064 (42000) at line 25: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER' at line 1

行 25 は、DELIMITER;

私のテーブルは次のようになります。

CREATE TABLE `table1` (
  `columnA` varchar(255) NOT NULL,
  `columnB` varchar(255) NOT NULL,
  `Version` varchar(255) NOT NULL,
  `Build` int(11) DEFAULT NULL,
  `Date` varchar(255) DEFAULT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
)

エラーをスローした後でもトリガーが追加されます。しかし、(columnA と columnB の特定の組み合わせに対して) 11 番目のエントリをテーブルに追加すると、次のエラーが発生します。

ERROR 1442 (HY000): Can't update table 'table1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

トリガー内の select ステートメントと delete ステートメントは、もちろん適切な値を使用して個別に実行すると問題ありません。

MySQL のバージョン5.5.46

修正/提案に非常に感謝します。

4

1 に答える 1

4

終了後にセミコロンを削除します。

... END | DELIMITER ;

それを試してみてください。

このリファレンスはあなたを助けるかもしれません: mysql delimiter error

于 2015-11-15T16:42:49.007 に答える