まず第一に、同じタイプの質問がたくさんあることは知っていますが、それらは私の問題を解決しませんでした!
指定された 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
修正/提案に非常に感謝します。