有没有办法在MySQL中锁定特定的行和列?
问题描述:
我有一个数据库表,它不时得到一个进程的更新。但是,在某些情况下,我想强制覆盖特定的行。有没有一种方法,我可以不写很多代码来处理覆盖等,只是锁定数据库本身的行或字段?有没有办法在MySQL中锁定特定的行和列?
例如,我的表看起来像
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的)
UPDATE:
我也与锁定整行的功能作出应有的 - 这意味着,无论是TEST_SCORE_AVG
也不HOMEWORK_AVG
所能改变的。无论连接是否丢失,我都需要解决方案持续很长一段时间。我想锁定该行,直到我,否则解锁
答
不,没有实际方法来防止单个行中的单个值不断变化。
除了使用MySQL以外的任何东西,你可以创建一个CHECK()约束条件来保证John的作业平均总是100,但我不会说那么实际。在MySQL上,你必须使用触发器才能获得相同的功能,但我再也不会这么称呼。
其他答案指的是行级锁定,这实际上与防止单个行中的单个值发生更改无关。
母校在学校偏袒吗?说它不是这样! – JYelton