oracle的update锁行还是锁表,update语句锁表还是锁行

select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁。

选择查询语句不会被锁定,但选择.for update不仅有查询的功能,还有锁,而且是悲观锁。

那么它是行锁还是表锁取决于是否使用了索引/主键。

如果没有使用索引/主键,则它是表锁,否则它是行锁。

00-1010创建表sql。

//id是主键//name是唯一索引创建表` user` (`id`int (11)不为null auto _ increment,` name`varchar (255)默认为null,` age`int (11)默认为null,` code` varchar (255)默认为null,主键(` id `),key` idx _ age ` (` age `)使用btree)engine=innodb auto _ increment=1570068默认charset=utf8需要关闭自动提交,并设置@@autocommit设置为手动提交。0代表手动提交,1代表自动提交。

面试官问:select......for  update会锁表还是锁行?

00-1010示例1:

使用主键id作为查询条件,然后打开另一个事务来更新数据。更新被阻止和锁定,要查询的id为1的行数据被锁定。

图1显示了第一个事务,该事务尚未提交。图2显示了第二个事务,它更新数据并被阻止。图3显示了第二个事务,它长时间未能获得锁,并报告了一个错误。面试官问:select......for  update会锁表还是锁行?

面试官问:select......for  update会锁表还是锁行?

面试官问:select......for  update会锁表还是锁行?

例2:

当我们打开一个事务来更新另一个id为2的数据时,

面试官问:select......for  update会锁表还是锁行?

面试官问:select......for  update会锁表还是锁行?

示例3(索引):

Age在表创建开始时创建了一个唯一的索引。

面试官问:select......for  update会锁表还是锁行?

面试官问:select......for  update会锁表还是锁行?

面试官问:select......for  update会锁表还是锁行?

例4:

使用通用字段代码进行操作。

面试官问:select......for  update会锁表还是锁行?

面试官问:select......for  update会锁表还是锁行?

面试官问:select......for  update会锁表还是锁行?

对于另一个事务,我将更新另一个数据。如果更新成功,我将锁定该行,如果失败,我将锁定该表。

面试官问:select......for  update会锁表还是锁行?

面试官问:select......for  update会锁表还是锁行?

00-1010如果查询条件中使用了索引/主键,则选择.for update将锁定行。

如果是普通字段(无索引/主键),则选择.for update将锁定该表。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/48743.html

(2)

相关推荐