长话短说,在全局包含的配置文件中,我从表中获取设置,并使用来自数据库表的settingKey,settingVal在我的代码中定义一个常量,现在我认为没有那么多开销,但是如果我最终得到了大量的设置,最好检查一下它们是否已经改变了,如果是这样的话,那就更好了。否则不会。
所以底线,我应该/我可以得到一个表的哈希并将其与最后一个已知的表哈希进行比较,以查看值是否已更改?或者我是否以完全错误的方式解决这个问题,并且有一种更有效的方法?
谢谢!
答案 0 :(得分:5)
创建一个触发器,在日志表中写入上次更新的时间等。
CREATE TABLE LOG (
id integer PRIMARY KEY AUTOINCREMENT,
tablename varchar NOT NULL,
action ENUM('insert','delete','update') NOT NULL,
action_time DATETIME NOT NULL)
DELIMITER $$
CREATE TRIGGER ai_table1 AFTER INSERT ON table1
BEGIN
INSERT INTO log (id, tablename, action, action_time)
VALUES (null, 'table1', 'insert', NOW())
END$$
CREATE TRIGGER ad_table1 AFTER DELETE ON table1
BEGIN
INSERT INTO log (id, tablename, action, action_time)
VALUES (null, 'table1', 'delete', NOW())
END$$
CREATE TRIGGER au_table1 AFTER UPDATE ON table1
BEGIN
INSERT INTO log (id, tablename, action, action_time)
VALUES (null, 'table1', 'update', NOW())
END$$
DELIMITER ;
请注意,触发器执行不触发FOR EACH ROW
,因为您只需要更改发生的日期,这会使触发器在执行多次更新时稍微加快(并且日志会稍微缩短) /删除/插入。
<强>链接:强>
触发器:http://dev.mysql.com/doc/refman/5.1/en/triggers.html
答案 1 :(得分:2)
时间戳会更容易,例如。
SELECT * FROM table WHERE last_modified > somedate
MySQL甚至会自动更新last_modified列,如下所示:
ALTER TABLE table
ADD last_modified TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP;
然后,只要您提取设置,只需记下时间戳,然后在下次需要检查时使用。
答案 2 :(得分:0)