自动Mysql更新

时间:2015-05-15 10:38:29

标签: php mysql triggers

一旦达到某个数字,是否可以让mysql自动更新表中的字段?

我有一个名为badges的表,它有这些字段

ID,name,image,level, percent

我可以这样做,如果百分比字段达到一定数量(例如50),则级别字段将更新为2。

我认为这会触发?

3 个答案:

答案 0 :(得分:3)

你可以做几件事。

语法

您甚至可以在语法中编写它,尽管表中的值没有更改,然后只显示其他内容。喜欢这个

 @Override
protected void onDestroy() {
    super.onDestroy();
    for (int i=0;i<Constants.imageUrls.size();i++){
        ImageView imageView = (ImageView)list.get(i).findViewById(R.id.image);
        imageView.setImageDrawable(null);
    }
}

在触发器中

每次插入后,您必须计算值,然后相应地更新。也许是这样的

SELECT  ID, 
        name,
        image, 
        CASE WHEN percent > 50 THEN 2 ELSE level END AS Level, 
        percent FROM....

存储过程

您可以简单地安排执行存储过程的事件。但是,如果你确实需要在值达到50时更改值,那么这将不起作用。

DELIMITER $$

DROP TRIGGER IF EXISTS databasename.badges_AUPD$$
USE databasename$$
CREATE TRIGGER `badges_AUPD` AFTER UPDATE ON `badges` FOR EACH ROW

// Added this line from Andreas Wederbrands answer which is the correct way

set new.level := case when percent < 50 then 0
                    when percent < 75 then 1
                    else 2;
    $$
DELIMITER ;

答案 1 :(得分:1)

在读取而不是存储时,最好计算派生值,这样您就可以随时更改阈值

create trigger set_level
before insert on some_table
for each row begin
  set new.level := case when percent < 50 then 0
                        when percent < 75 then 1
                        else 2;
end

您的另一种选择是在触发器中设置level的值

before update

对{{1}}执行相同操作。

您不应该在插入/更新一行或几行时重新计算整个表级别。

答案 2 :(得分:0)

是可以使用脚本执行此操作并由服务器自动运行和执行..

按照以下步骤操作:

1)首先在数据库字段中编写要更新的代码。

2)为服务器设置一个cronjob执行你的查询本身。