我有这个名为books的表
create table books (price INT,title VARCHAR(50),type VARCHAR(5));
我需要一个触发器,在另一个名为myregister
的表中插入当前日期,以及在该日期删除的图书数量。所以我想出了这个:
CREATE TABLE myregister (dates DATE,number INT);
DELIMITER |
CREATE TRIGGER deleted AFTER DELETE on books
FOR EACH ROW BEGIN
set @cnt = if(@cnt is null, 1, (@cnt+1));
set @dat = CURDATE();
INSERT INTO myregister values(CURDATE(),@cnt);
END;
|
DELIMITER ;
但有两个问题:
该变量是全局变量,并且每删除一本书都是重要的,与日期无关。
触发器计算每一行,因此最后,表myregister有n
行,每行都删除了一行。
答案 0 :(得分:0)
如果重新定义myregister
表以使dates
列唯一,则可以重写触发器以插入行(如果尚不存在)或增量如果是这样的话。
注意:number
是MySQL中的保留字。您的触发器可能具有更具体的名称,因为如果为其他表添加更多触发器,deleted
将不会显而易见。
CREATE TABLE myregister (dates DATE PRIMARY KEY, `number` INT);
CREATE TRIGGER deleted AFTER DELETE on books
FOR EACH ROW
INSERT INTO myregister VALUES(CURDATE(), 1)
ON DUPLICATE KEY UPDATE `number` = `number` + 1;
INSERT INTO books VALUES(1, 'test', 'test'), (2, 'test', 'test'),
(3, 'test', 'test'), (4, 'test', 'test'), (5, 'test', 'test');
DELETE FROM books;
INSERT INTO books VALUES(1, 'test', 'test'), (2, 'test', 'test'),
(3, 'test', 'test'), (4, 'test', 'test'), (5, 'test', 'test');
DELETE FROM books;
SELECT * FROM myregister;
-- 2016-05-09, 10