当前位置: 首页 > news >正文

oppo软件商店app下载网站首页关键词如何优化

oppo软件商店app下载,网站首页关键词如何优化,什么自己做网站吗,做游戏排行榜的网站模板疑问:Mysql多事务默认情况下,同时修改同一条记录运行修改吗?是否要手动加上for update行锁。 猜想:MySQL 会自动对涉及的数据行加上写锁(排他锁),以确保数据的一致性和隔离性。这是在默认的事务…
  • 疑问:Mysql多事务默认情况下,同时修改同一条记录运行修改吗?是否要手动加上for update行锁。

  • 猜想:MySQL 会自动对涉及的数据行加上写锁(排他锁),以确保数据的一致性和隔离性。这是在默认的事务隔离级别 Repeatable Read 下的行为。

  • 验证

第一个事务不结束,并对message_id=40的记录进行修改

BEGIN;
UPDATE message SET message_name = '瓜瓜在哪里' WHERE message_id = 40;
SELECT * FROM message WHERE message_id = 40;

第二个事务同样执行,对该记录进行修改

BEGIN;
UPDATE message SET message_name = '瓜瓜不见了' WHERE message_id = 40;
SELECT * FROM message WHERE message_id = 40;
COMMIT;
  • 结果
    第二个事务,一直处于阻塞状态,知道我42秒将第一个事务COMMIT后,才获得锁进行修改操作。
UPDATE message SET message_name = '瓜瓜不见了' WHERE message_id = 40
> Affected rows: 1
> 时间: 42.577s
  • 结论

在多事务同时修改同一条记录的情况下,MySQL 会自动对涉及的数据行加上写锁(排他锁)。
注意:读该条记录的话不受影响。 不是事务,进行修改同一条也会阻塞。

  • 引出问题:那么自动也可以加锁的话,我怎么验证手动加锁for update是否生效,因为它不手动加锁,也会自动加锁阻止update。
  • 测试1:于是想到不结束的事务,不作修改就不会自动加锁。

第一个事务只做查询

BEGIN;
SELECT * FROM message WHERE message_id = 40;

第二个事务对该记录进行修改,查看是否阻塞

BEGIN;
SELECT * FROM message WHERE message_id = 40;
UPDATE message SET message_name = '瓜瓜不见了' WHERE message_id = 40;
SELECT * FROM message WHERE message_id = 40;
COMMIT;
BEGIN
> OK
> 时间: 0.016sSELECT * FROM message WHERE message_id = 40
> OK
> 时间: 0.02sUPDATE message SET message_name = '瓜瓜不见了' WHERE message_id = 40
> Affected rows: 0
> 时间: 0.016sSELECT * FROM message WHERE message_id = 40
> OK
> 时间: 0.018sCOMMIT
> OK
> 时间: 0.017s
  • 结论:发现不会阻塞正常修改。

  • 测试2:对查询手动加排它锁,FOR UPDATE,其他事务对该记录进行修改,查看是否阻塞。

第一个事务对查询手动加排它锁,FOR UPDATE

BEGIN;
SELECT * FROM message WHERE message_id = 40 for UPDATE;
SELECT * FROM message WHERE message_id = 40;

第二个事务对该记录进行修改

BEGIN;
SELECT * FROM message WHERE message_id = 40;
UPDATE message SET message_name = '瓜瓜不见了' WHERE message_id = 40;
SELECT * FROM message WHERE message_id = 40;
COMMIT;
BEGIN
> OK
> 时间: 0.015sSELECT * FROM message WHERE message_id = 40
> OK
> 时间: 0.016sUPDATE message SET message_name = '瓜瓜不见了' WHERE message_id = 40
> Affected rows: 0
> 时间: 5.325sSELECT * FROM message WHERE message_id = 40
> OK
> 时间: 0.017sCOMMIT
> OK
> 时间: 0.015s
  • 结论:在修改操作是,会有阻塞现象,知道我提交了第一个事务才继续运行。

  • 补充:

    • 自动加锁和where或set的条件字段是否为索引和主键无关。
    • 自动加的锁和手动加的FOR UPDATE锁是同一种类型的锁(排它锁)。
    • 刚开始我以为自动加锁会与隔离级别有关,于是更换了READ-COMMITTED和READ-UNCOMMITTED隔离级别测试,发现事务执行update语句都会自动加锁,影响别的事务。
show variables like '%tx_isolation%';
set tx_isolation='READ-COMMITTED';
set tx_isolation='READ-UNCOMMITTED';
http://www.tj-hxxt.cn/news/101670.html

相关文章:

  • 网站seo推广seo教程2345网址导航应用
  • 海安做网站的公司关键词挖掘排名
  • 上杭网站设计如何做网站设计
  • fedora做网站服务器网络推广员的工作内容和步骤
  • 怎么添加wordpress模板文件夹长沙官网seo分析
  • 网站实例深圳谷歌网络推广公司
  • 苏州网站建设白石搜狗提交入口网址
  • 网页设计好看的网站竞价托管sem服务
  • 创业网站推广怎么做交易平台官网
  • 石家庄日报官网搜索引擎优化的基本原理
  • 博客网站开发报告seo就业前景如何
  • 号卡分销系统源码简述如何优化网站的方法
  • 设计师必备的国际设计网站百度注册网站
  • 商标注册 网站建设如何入账站长友情链接
  • 辽宁专业模板网站建设公司云优化软件
  • 潍坊网站制作 熊掌号中国去中心化搜索引擎
  • 宝坻做网站淘宝指数查询
  • 乌海网站建设高级搜索引擎
  • 做30个精品网站谷歌广告联盟官网
  • ui设计哪家培训好百度seo怎么收费
  • ssh实训做网站代码下载百度官网认证申请
  • 视频网站哪个做的好处百度热词
  • wordpress 投稿者插件浙江seo博客
  • 私人定制哪个网站做的比较好如何做网站平台
  • 网站建设费用多少钱广告联盟论坛
  • 设计网站大全免费下载seo网站优化专员
  • 做设计接外快在哪个网站seoul
  • 网站订票策划方案网络营销专业的就业方向
  • 网站中怎么做网站统计新闻 最新消息
  • 芜湖网站建设网站制作公司网站推广的基本手段有哪些