我有一个数据库表,它会不时地被一个进程更新。但是,在某些情况下,我希望强制覆盖特定行。有没有一种方法,我可以不写很多代码来处理覆盖等,只需锁定数据库本身中的行或字段?
例如,我的表看起来像
STUDENT | TEST_SCORE_AVG | HOMEWORK_AVG
John | 92.3 | 88.8
Lisa | 77.4 | 99.8
Terry | 88.0 | 64.5每一次新的考试或家庭作业,学生的平均分都会发生变化。然而,假设老师是John的母亲,不管怎样,他的家庭作业平均得了100.0分。有没有一种方法可以锁定它,这样任何试图改变值的程序都会反弹回来?我正在使用MySQL工作台访问我的MySQL数据库(InnoDB)
更新:
我还可以使用一个锁定整个行的函数来创建due -这意味着无论是TEST_SCORE_AVG还是HOMEWORK_AVG都不能更改。我需要解决方案在很长一段时间内持续存在,无论连接是否丢失。我想锁定该行,直到我将其解锁。
发布于 2012-12-05 04:53:27
不,没有实用的方法来防止单行中的单个值发生变化。
使用除了MySQL之外的任何东西,您都可以创建一个CHECK()约束来保证John的家庭作业平均数始终为100,但我认为这并不实用。在MySQL上,你必须使用触发器才能获得相同的功能,但我再说一次,这并不实用。
其他答案涉及行级锁定,它实际上与防止单行中的单个值更改没有任何关系。
发布于 2012-12-05 04:47:44
https://stackoverflow.com/questions/13711501
复制相似问题