我必须编写一个或多个触发器来跟踪sakila_film表中单个变量中有多少条记录,但是我很难弄清楚该触发器是如何从http://dev.mysql.com/doc/sakila/en/sakila-structure-tables-film.html中获取的。我在下面的代码中尝试过的内容,但是却遇到了错误,我不知道可以通过其他任何方式。

create trigger records after Update on sakila_film Count(*) from sakila_film;

最佳答案

您打算在哪里在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表中的行数,我们就可以使用触发器向该表中插入一行:

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 ;

10-05 21:04
查看更多