一旦达到某个数字,是否可以让mysql自动更新表中的字段?
我有一个名为badges
的表,它有这些字段
ID,name,image,level, percent
我可以这样做,如果百分比字段达到一定数量(例如50),则级别字段将更新为2。
我认为这会触发?
答案 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执行你的查询本身。