我有一个数据库表,用于记录其他表中发生的更改。我的日志表的表结构如下。
Log_Table(id, table_name, operation, flag)
values (1, Customer_Table, 1, 1);
values (2, Customer_Table, 2, 1);
values (3, Customer_Table, 1, 1);
values (4, Customer_Table, 2, 1);
values (5, Customer_Table, 1, 1);
我通过执行以下操作针对网页上的按钮更新此表:
/* first */
public List<Long> select_Changes()
{
select id from Log_Table where flag =1;
}
/* (wait for user input) */
/* second */
public void update_table(List<Long> ids)
{
update Log_Table set flag =0 where id in( ids)
}
问题是在第一次和第二次操作之间由用户来执行操作。同时另一个用户同时做同样的操作。我不希望第二个用户选择第一个用户已经选择的行;也就是说,当第二个用户运行第一步时(假设自第一个用户运行后又添加了两行),结果应该是:
values(6,Customer,2,1);
values(7,Customer,1,1);
请建议我应该怎么做?选择行后,我需要锁定行以进行任何类型的操作。我尝试了 select for update 子句,但没有解决问题。它在一个网络应用程序中。