2014-11-25 32 views
0

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

你怎么插入记录他sakila_film桌桌?你是通过存储过程还是通过脚本来做到这一点? – Jaylen 2014-11-25 00:13:15

回答

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表更改的行数:

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 ;