mysql 事务 for update,mysql事务锁_详解mysql 锁表 for update
摘要 腾兴网为您分享:详解mysql 锁表 for update,智慧农业,真还赚,悦读小说,学习帮等软件知识,以及电池管家,三国群英传3,userland,运满满货主版,王者荣耀,简单3d动画,嘉丽购,当代好课堂,贝壳云,saber插件,2k10全功能,plsql新建数据库,怀恩堂,nba2k14名单补丁,esetid等软件it资讯,欢迎关注腾兴网。本节内容: 探讨下mysql适应for update锁表的方法。 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock...
本节内容:
探讨下mysql适应for update锁表的方法。
由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住)。
例子:
假设有个表单products ,里面有id跟name二个栏位,id是主键。
例1: (明确指定主键,并且有此笔资料,row lock)
复制代码 代码示例:
SELECT * FROM products WHERE id='3' FOR UPDATE;
例2: (明确指定主键,若查无此笔资料,无lock)
复制代码 代码示例:
SELECT * FROM products WHERE id='-1' FOR UPDATE;
例3: (无主键,table lock)
复制代码 代码示例:
SELECT * FROM products WHERE name='Mouse' FOR UPDATE;
例4: (主键不明确,table lock)
复制代码 代码示例:
SELECT * FROM products WHERE id LIKE '3' FOR UPDATE;
注1: FOR UPDATE仅适用于InnoDB,且必须在交易区块(BEGIN/COMMIT)中才能生效。
注2: 要测试锁定的状况,可以利用MySQL的Command Mode ,开二个视窗来做测试。
由上面的InnoDB 已经交易区块引出两个问题。
1.InnoDB
mysql中有多种引擎可以供选择。
如果赛车手能根据不同的路况,地形随手更换与之最适宜的引擎,那么他们将创造奇迹。
然而目前他们还做不到那样便捷的更换引擎,但是我们却可以!
MySQL提供的几种引擎。
一般来说,MySQL有以下几种引擎:ISAM、MyISAM、HEAP、InnoDB和Berkley(BDB)。
注意:不同的版本支持的引擎是有差异的。
进一步:
如何查看MySQL的当前存储引擎?
一般情况下,mysql会默认提供多种存储引擎,可以通过下面的查看:
看的mysql现在已提供什么存储引擎:
复制代码 代码示例:
mysql> show engines;
mysql默认使用的InnoDB引擎,并且支持MyISAM,memory,archive,Mrg_myisam。
后面还跟着解释,InnoDB 的解释是:支持事务,行级别锁定,外键。
看的mysql当前默认的存储引擎:
复制代码 代码示例:
mysql> show variables like '%storage_engine%';
要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):
复制代码 代码示例:
mysql> show create table 表名;
其实这是一定的,因为我的mysql引擎就是InnoDB,默认情况下创建的表当前也是以InnoDB为引擎的喽
2. 交易区块
事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理。
比如说,在人员管理系统中,删除一个人员,即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
删除的SQL语句
复制代码 代码示例:
delete from userinfo where ~~~
delete from mail where ~~
delete from article where~~
如果没有事务处理,在删除的过程中,假设出错了,只执行了第一句,那么其后果是难以想象的!
但用事务处理。如果删除出错,只要rollback就可以取消删除操作(其实是只要没有commit就没有确实的执行该删除操作) 一般来说,在商务级的应用中,都必须考虑事务处理的!
MYSQL数据库从4.1就开始支持事务功能,据说5.0将引入存储过程。
事务是DBMS得执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID)
1,原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
2,一致性(Consistency):事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态!就拿网上购物来说吧,只有即让商品出库,又让商品进入顾客得购物篮才能构成事务!
3,隔离性(Isolation):如果多个事务并发执行,应象各个事务独立执行一样!
4,持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!
MYSQL的事务处理主要有两种方法。
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是提交一个QUERY,它就直接执行!可以通过
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
注意:用 set autocommit=0 时,以后所有的SQL都将做为事务处理,直到用commit确认或rollback结束,注意当结束这个事务的同时也开启了个新的事务!
按第一种方法只将当前的作为一个事务!个人推荐使用第一种方法!
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!
MYSQL5.0 WINXP下测试通过:
复制代码 代码示例:
mysql> use test;
Database changed
mysql> CREATE TABLE `dbtest`(
-> id int(4)
-> ) TYPE=INNODB;
Query OK, 0 rows affected, 1 warning (0.05 sec)
mysql> select * from dbtest
-> ;
Empty set (0.01 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into dbtest value(5);
Query OK, 1 row affected (0.00 sec)
mysql> insert into dbtest value(6);
Query OK, 1 row affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from dbtest;
+------+
| id |
+------+
| 5 |
| 6 |
+------+
2 rows in set (0.00 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into dbtest values(7);
Query OK, 1 row affected (0.00 sec)
mysql> rollback; //这里回滚了
Query OK, 0 rows affected (0.00 sec)
mysql> select * from dbtest;
+------+
| id |
+------+
| 5 |
| 6 |
+------+
2 rows in set (0.00 sec)
用for update来锁定行,以上例中student表为例:
1,使用begin开始一个事务
2,利用select * for update 锁定行,
3,在新窗口中验证非选中行是否被锁定 ---未被锁定
4,在新窗口中验证选中行是否被锁定 ---锁定,update语句在等待了一段时间后失败。
相关推荐
mysql 事务 for update,mysql事务锁_详解mysql 锁表 for update相关推荐
- mysql临键锁_详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)
详解 MySql InnoDB 中的三种行锁(记录锁.间隙锁与临键锁) 前言 InnoDB 通过 MVCC 和 NEXT-KEY Locks,解决了在可重复读的事务隔离级别下出现幻读的问题.MVCC ...
- mysql四种隔离级别知乎_详解MySQL事务的四大特性和隔离级别
1.事务的四大特性(ACID) 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2.一致性( ...
- mysql分页总页数算法解析_详解MySQL的limit用法和分页查询语句的性能分析
limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM table LIMIT ...
- mysql中索引的作用是什么_详解mysql中索引的作用
1. 索引是什么,首先我们可以举个例子,字典大家应该都使用过,我们可以使用目录快速定位到所要查找的内容,那么索引跟目录的作用类似,在数据库表记录中,利用索引,可以快速过滤查找到数据记录. 2. 索引类 ...
- mysql如何查看事务日记_详解 Mysql 事务和Mysql 日志
事务特性 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节. 2.一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破 ...
- mysql 事物的持久性是指_详解MySQL中事务的持久性实现原理
前言 说到数据库事务,大家脑子里一定很容易蹦出一堆事务的相关知识,如事务的ACID特性,隔离级别,解决的问题(脏读,不可重复读,幻读)等等,但是可能很少有人真正的清楚事务的这些特性又是怎么实现的,为什 ...
- mysql重做日志_详解MySQL 重做日志(redo log)与回滚日志(undo logo)
前言: 前面文章讲述了 MySQL 系统中常见的几种日志,其实还有事务相关日志 redo log 和 undo log 没有介绍.相对于其他几种日志而言, redo log 和 undo log 是更 ...
- java mysql 自动提交_详解MySQL与Spring的自动提交(autocommit)
1 MySQL的autocommit设置 MySQL默认是开启自动提交的,即每一条DML(增删改)语句都会被作为一个单独的事务进行隐式提交.如果修改为关闭状态,则执行DML语句之后要手动提交 才能生效 ...
- mysql外键约束详解_详解MySQL 外键约束
详解MySQL 外键约束,西欧,西西里,玛雅,兵种,诺曼 详解MySQL 外键约束 易采站长站,站长之家为您整理了详解MySQL 外键约束的相关内容. 官方文档: https://dev.mysql. ...
最新文章
- 用Lambda武装你的Java: 集合转换
- 搭建windows下filezilla FTP服务器
- 算法 n个数字形成的圆圈中循环删除第m个数字 C++
- 机器人学习--Robotics 4:Perception(宾夕法尼亚大学COURSERA课程)
- Gradle入门:我们的第一个Java项目
- sharepoint ECMAScript对象模型系列
- CDHtmlDialog 与 网页交互技巧
- python(9)-变量、input函数
- 路飞学城-Python爬虫集训-第一章
- 一对一单双向主键关联
- 全国计算机一级模拟考试电脑版,全国计算机等级考试一级计算机基础及MS Office应用模拟练习系统...
- 高抗干扰低功耗LCD驱动芯片-VK2C21A/B/C/D,常用在电气类、工控类低功耗驱动上
- Centos搭建socks5代理服务器
- tianmao项目的学习笔记
- 卫星导航定位误差之电离层、对流层
- Redis 源码分析跳跃表(skiplist)
- 大数据管理技术 Hadoop-JavaAPI程序案例1
- win10制作软盘,xp下进行编译,最后回到win10运行
- pv uv vv cv 的区别
- 做ctf题目的时候运行程序就会显示ImportError: cannot import name ‘flag‘ from ‘secret‘ 求大佬解答
热门文章
- AFL查看crash文件
- unity完整读取串口数据方法
- html判断是否在页面,js判断页面关闭
- openjpeg:解决静态链接时未定义引用错误:undefined reference to `__imp_opj_xxxxxxx'
- cadence ORCAD因为不正常关闭导致opj文件打不开的解决办法
- python有哪两种表现形式小练笔_爱有两种表现形式小练笔400字
- manjaro怎么启动mysql_Manjaro 入门使用教程
- c语言中 ||优先级,C语言运算符号的优先级 A: B: C:|| D:|
- 发那科系统梯形图实例,重点是带中文注释
- FPGA数字系统设计(8)——可综合电路及状态机