我必须编写一个或多个触发器来跟踪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 ;