SQL / MySQL查询(搜索标志更改)?

时间:2016-10-24 18:04:32

标签: mysql sql database search

数据库表包含一个带有标志(“1” - 工作和“0” - 不工作过程)的列和其他字段,用于描述机器在/同时的各种特性。我们需要的是只提取对应于条件改变(标志改变)的“行” - 即当标志为第一个“1”时的行(之后将有其他条目为“1”,但不在此处任何感兴趣的点,只是第一个),当它变为“0”时的行(可能有多个条目后面带有“0”),而不是再次变为“1”的行等等。我们需要这个在一个记录中(即,变量S - 当标志变为“1”时该变量的值以及当标志变为“0”时的值)。

1 个答案:

答案 0 :(得分:0)

我会创建另一个名为change_handled的列。创建一个触发器,以便在标志值发生变化时设置change_handled=0

CREATE TRIGGER detect_flag_change BEFORE UPDATE ON my_table
FOR EACH ROW
 SET NEW.change_handled = (OLD.change_handled AND (NEW.flag = OLD.flag));

NEW.flag=OLD.flag条件意味着如果标志作为更新的一部分而更改,则值将不同,因此相等性将为false。然后将change_handled设置为false。

OLD.change_handled AND ...条件表示如果未处理某行,则change_handled将为false,因此即使后续UPDATE应用于该行而不更改标志,它也将保持为false。

所以,一旦你有了这个专栏change_handled,就可以搜索它为假(0)的行。

然后我猜你有一些工作者应用程序可以对更改的行执行某些操作。该应用程序应使用UPDATE设置change_handled=true来锁定事务中的行。但是,在工人完成工作之前,不要进行该交易。这样,如果工作人员被中断,更新将被回滚,然后其他人可以处理它。