我必须编写一个或多个触发器来跟踪单个变量中sakila_film表中已记录的总记录数,但我无法确定如何执行此操作触发该表来自{{3这就是我尝试下面的代码,但是我收到了一个错误,我不知道其他任何方式我可以做到这一点。
create trigger records after Update on sakila_film Count(*) from sakila_film;
答案 0 :(得分:1)
您计划在film
表格中存储此总行数?
如果您要使用触发器进行管理,似乎您需要两个触发器。一个用于INSERT,一个用于DELETE。 UPDATE语句不会更改表中的行数。 (请注意,外键操作不会触发触发器;如果使用DELETE规则定义了外部函数,则会引发此问题。)并且不会为TRUNCATE语句触发触发器。
抛开这些顾虑,我们需要在某个地方随时间存储行数。举个例子:
CREATE TABLE rowcount_history_film
( ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
, rowcount INT NOT NULL
, KEY rowcount_history_film_IX1 (ts)
) Engine=MyISAM;
然后,只要DML语句改变film
表中的行数,我们就可以使用trigger在该表中插入一行:
DELIMITER $$
CREATE TRIGGER film_ad
AFTER DELETE ON film
FOR EACH ROW
BEGIN
INSERT INTO rowcount_history_film (ts, rowcount)
SELECT NOW(), COUNT(*) FROM film;
END$$
CREATE TRIGGER film_ai
AFTER INSERT ON film
FOR EACH ROW
BEGIN
INSERT INTO rowcount_history_film (ts, rowcount)
SELECT NOW(), COUNT(*) FROM film;
END$$
DELIMITER ;