首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在MySQL中锁定特定的行和列?

问有没有办法在MySQL中锁定特定的行和列?
EN

Stack Overflow用户
提问于 2012-12-05 04:41:26
回答 2查看 1.5K关注 0票数 0

我有一个数据库表,它会不时地被一个进程更新。但是,在某些情况下,我希望强制覆盖特定行。有没有一种方法,我可以不写很多代码来处理覆盖等,只需锁定数据库本身中的行或字段?

例如,我的表看起来像

代码语言:javascript
复制
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都不能更改。我需要解决方案在很长一段时间内持续存在,无论连接是否丢失。我想锁定该行,直到我将其解锁。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-05 04:53:27

不,没有实用的方法来防止单行中的单个值发生变化。

使用除了MySQL之外的任何东西,您都可以创建一个CHECK()约束来保证John的家庭作业平均数始终为100,但我认为这并不实用。在MySQL上,你必须使用触发器才能获得相同的功能,但我再说一次,这并不实用。

其他答案涉及行级锁定,它实际上与防止单行中的单个值更改没有任何关系。

票数 0
EN

Stack Overflow用户

发布于 2012-12-05 04:47:44

从manual

InnoDB实现了标准的行级锁定,其中有两种类型的锁:

  • 共享(S)锁允许事务读取行。
  • 独占(X)锁允许事务更新或删除行。

您可以锁定特定的行,但不能锁定特定的行和列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13711501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档