我有一个数据库表,它会不时地被一个进程更新。但是,在某些情况下,我想强制覆盖特定的行。有没有办法,我可以不编写大量代码来处理覆盖等,只需锁定数据库本身的行或字段?
例如,我的表格看起来像
STUDENT | TEST_SCORE_AVG | HOMEWORK_AVG
John | 92.3 | 88.8
Lisa | 77.4 | 99.8
Terry | 88.0 | 64.5
每次新的考试或家庭作业,学生的平均成绩都会发生变化。然而,说老师是约翰的母亲,无论如何,他的平均作业得到100.0。有没有办法锁定它,以便任何试图更改值的程序将被反弹?我正在使用MySQL工作台来访问我的MySQL数据库(InnoDB)
更新:
我还可以通过锁定整行的函数来实现 - 这意味着TEST_SCORE_AVG
和HOMEWORK_AVG
都不会被更改。无论连接是否丢失,我都需要解决方案持续很长一段时间。我想锁定行,直到我解锁它
答案 0 :(得分:0)
答案 1 :(得分:0)
不,没有实用的方法可以防止单行中的单个值发生变化。
使用除了MySQL以外的任何东西,你可以创建一个CHECK()约束来保证John的作业平均值总是100,但我不会称之为实用。在MySQL上,你必须使用触发器来获得相同的功能,但我再也不会称之为实用。
其他答案指的是行级锁定,这与防止单行中的单个值更改无关。