update会锁表吗? 
两种情况:

1.带索引 2.不带索引

前提介绍:

方式:采用命令行的方式来模拟

1.mysq由于默认是开启自动提交事务,所以首先得查看自己当前的数据库是否开启了自动提交事务。

命令:select @@autocommit;

结果如下:

+————–+ 
| @@autocommit | 
+————–+ 
| 0 | 
+————–+

如果是1,那么运行命令:set autocommit = 0;设置为不开启自动提交

2.当前的数据库表格式如下

tb_user | CREATE TABLE tb_user ( 
id bigint(20) NOT NULL AUTO_INCREMENT, 
name varchar(32) DEFAULT NULL, 
phone varchar(11) DEFAULT NULL, 
operator varchar(32) DEFAULT NULL, 
gmt_create datetime DEFAULT NULL, 
gmt_modified datetime DEFAULT NULL, 
PRIMARY KEY (id
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

显然除了主键,我没有加任何索引

实际例子:

1.没有索引

运行命令:begin;开启事务,然后运行命令:update tb_user set phone=11 where name=”c1”;修改,先别commit事务。

再开一个窗口,直接运行命令:update tb_user set phone=22 where name=”c2”;会发现命令卡住了,但是当前面一个事务通过commit提交了,命令就会正常运行结束,说明是被锁表了。

2.给name字段加索引

create index index_name on tb_user(name);

然后继续如1里面的操作,也就是一个开启事务,运行update tb_user set phone=11 where name=”c1”;先不提交

然后另一个运行update tb_user set phone=22 where name=”c2”;发现命令不会卡住,说明没有锁表

但是如果另一个也是update tb_user set phone=22 where name=”c1”;更新同一行,说明是锁行了

3.总结

如果没有索引,所以update会锁表,如果加了索引,就会锁行

转自:https://blog.csdn.net/u013043762/article/details/80454396

update会锁表吗?的更多相关文章

  1. select......for update会锁表还是锁行

    select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁. 那么它加的是行锁还是表锁,这就要看是不是用了索引/主键. 没用索 ...

  2. Mysql 锁表 for update (引擎/事务)

    因为之前用过oracle,知道利用select * for update 可以锁表.所以很自然就想到在mysql中能不能适应for update来锁表呢. 学习参考如下 由于InnoDB预设是Row- ...

  3. MySQL中select * for update锁表的范围

    MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...

  4. 锁表 for update

    select for update 是为了在查询时,避免其他用户以该表进行插入,修改或删除等操作,造成表的不一致性. 举几个例子:select * from t for update 会等待行锁释放之 ...

  5. MySQL中select * for update锁表的问题

    MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...

  6. for update造成的Oracle锁表与解锁

    我遇到的情况: 当使用select语句查询表时,后面跟着for update , select * from table for update 当修改表中数据,但是没有commit就关掉PL/SQL, ...

  7. MySQL中select * for update锁表的问题(转)

    由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料 ...

  8. mysql 中select for update 锁表的范围备注

    mysql的锁表范围测试 1.主键明确时,行级锁: 解释:指定主键并且数据存在时,仅锁定指定的行,其它行可以进行操作 实例:指定了锁定id=1的行且数据存在①,在更新1时lock wait超时②,但是 ...

  9. mysql批量update操作时出现锁表

    https://www.cnblogs.com/wodebudong/articles/7976474.html 最近遇到一件锁表的情况,发现更新的语句where检索的字段,没有建索引,且是批量操作的 ...

随机推荐

  1. Rabbit的事务

    加入事务的方法: txSelect()  txCommit()  txRollback() 生产者: package com.kf.queueDemo.transactions; import jav ...

  2. No.1一步步学习vuejs 环境配置安装篇

    一 安装与配置 需要安装node.js和 nmp管理器http://nodejs.cn/安装完后测试输入命令查看版本验证 node -v //查看node.js的版本 npm -v //查看 由于有些 ...

  3. js设置时间无效的问题

    在发送短信息验证码的时候要用到js设置时间倒序问题:有时候这种常规写法会导致js失效,试了很多方法才找到问题所在,可能是因为js版本过低导致. setTimeout(showT(t-1),5000) ...

  4. laravel上传到七牛图片插件

    1.首先引入两个插件 2.在https://developer.qiniu.com/kodo/sdk/1241/php找到安装命令 在终端运行composer require qiniu/php-sd ...

  5. v-model的双向数据绑定(表单)

    可以用 v-model 指令在表单 <input>.<textarea> 及 <select> 元素上创建双向数据绑定.它会根据控件类型自动选取正确的方法来更新元素 ...

  6. JavaScript 访问对象属性和方法及区别

    这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...

  7. 怎样修改织梦网站的favicon图标

    现在很多的网站浏览器栏上都有favicon图标,比如百度,大家用织梦做好网站后,可能发现自己的网站favicon图标默认的不好看,如何修改织梦网站的favicon导航图标呢,很多人肯定有过困惑,小编遇 ...

  8. redis复制+Sentinel搭建

    1:实验环境 测试环境两台: master:172.16.16.34 slave:172.16.16.35 redis版本:redis3.2 要搭建的环境是,redis简单主从复制 2:安装redis ...

  9. jQuery Validate 无法验证 chosen-select元素

    chosen-select元素执行了chosen()方法后,为select元素加上了style="display: none;"进行隐藏,然后重新构造了一个看起来像select的下 ...

  10. 【Leetcode】【Medium】Remove Duplicates from Sorted Array II

    Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...