mysql事物/锁

事物就是一组应该一起成功或一起失败的sql语句.

事物具有原子性,一致性,隔离性和持久性的特点:

  1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

   2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如AB互相转钱,无论怎么转,总额都不会变化.

   3、隔离性(Isolation):同一时间,只允许一个事务修改同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

   4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

 事物的执行:

  START TRANSACTION;

  BEGIN;

  UPDATE .....

  INSERT .....

  COMMIT(ROLLBACK);

使用保存点:

  使用保存点可以回滚到事务中的某些点,而且无须终止事物. 你可以使用savepoint标识符为事物设置名称, 并使用ROLLBACK TO标志语句将事物回滚到指定的保存点而不中止事务.

  SAVEPOINT mark1

  ROLLBACK To mark1

MySql的锁

  mysql有两种锁

  内部锁: mysql在自身服务器内部执行内部锁, 以管理多个回话对表内容的争用.

  外部锁: mysql为客户回话提供选项来显式地获取表锁, 以阻止其他回话访问表.

  内部锁又可以分为下面两种类型:

    行级锁: 行级锁是细粒度的, 只有被访问的行会被锁定.这允许通过多个回话,同时进行写操作.只有innodb支持行级锁

    表级锁: mysql 对MyISAM, MEMORY, MERGE 表使用表级锁,一次只允许一个回话更新这些表.这种锁定级别是的这些存储引擎更适用于只读的或以读取操作为主的或单用户的应用程序.

  外部锁:

    使用 LOCK TABLE 和 UNLOCK TABLES 语句来控制锁定.

    READ 和 WRITE 的表锁定解释如下:

      READ: 当一个表被锁定为READ时, 多个会话可以从表中读取数据而不需要获取锁. 此外, 多个回话可以在同一个表上获得锁, READ也被称为共享锁.当READ锁被保持时,没有回话可以将数据写入表格中.包括持有该锁的回话.如果有任何写入尝试,该操作将处于等待状态,知道READ锁被释放.

      WRITE: 当一个表被锁定为WRITE时,除持有该锁的会话, 其他任何会话都不能读取或向表中写入数据.WRITE锁也被称为排它锁.

    命令:

      LOCK TABLES table_name [READ | WRITE];

      UNLOCK TABLES;

  锁队列:

    除共享锁外(一个表可以有多个共享锁), 没有两个锁可以一起加在一个表上, 如果一个表已经有一个共享锁,此时有一个排它锁要进来, 那么他将被保留在队列中,直到共享锁被释放.当排它锁在队列中时, 所有后续的共享锁也会被保留在队列中.

    

原文地址:https://www.cnblogs.com/jiaxiaoxin/p/10883172.html

时间: 2024-11-10 13:02:17

mysql事物/锁的相关文章

本文实例讲解了PHP使用MySQL事物锁的实例,并备有注释加以详细说明

/** * 数据库连接 * $conn = mysql_connect('localhost', 'root', ''); * mysql_select_db('test', $conn); *mysql_query("SET NAMES GBK"); *支持事务的表必须是InnoDB类型 *一段事务中只能出现一次: *mysql_query('START TRANSACTION');//开始事务 *mysql_query(' ROLLBACK ');//回滚事务 *mysql_que

mysql事物

MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID事务.行级锁.并发 3.Berkeley DB:支持事务 一个事务是一个连续的一组数据库操作,就好像它是一个单一的工作单元进行.换言之,永远不会是完整的事务,除非该组内的每个单独的操作是成功的.如果在事务的任何操作失败,则整个事务将失败.实际上,会俱乐部许多SQL查询到一个组中,将执行所有的人都一起作为事务的一部分. 事务的特性: 事务有以下四个

mysql行锁和表锁

mysql innodb支持行锁和表锁,但是MyIsam只支持表锁.现在我们说说mysql innodb的行锁和 有如下表id为主键 为了出现演示效果,我们将mysql的autocommit设置为0 打开两个mysql命令行窗口,都设置为autocommit为0 窗口1: 窗口2: 这时候我们发现窗口2一直在阻塞,当我们在窗口1中commit后,发现窗口2有输出了. 上面我们更新不是同一个记录,为什么事物1没提交时,事物2一直等待了.因为这个时候用的是表锁. 现在我们给name字段加上索引,效果

mysql事物处理

mysql事物主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你既要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等.这样,这些数据库操作语句就构成一个事物.注意一下几点: 在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务. 事物处理可以用来维护数据库的完整性,保证成批的sql语句要么全部执行,要么全部不执行. 事物用来管理insert,update,delete语句. 先简单介绍一下事物吧.事物是DBMS的执行单位.它由有限的数

Mysql事物与二阶段提交

 1.事务的四种特性(ACID) 事务可以是一个非常简单的SQL构成,也可以是一组复杂的SQL语句构成.事务是访问并且更新数据库中数据的一个单元,在事务中的操作,要么都修改,要么都不做修改,这就是事务的目的,也是事务模型区别于其他模型的重要特征之一. 事务的原子性:原子是不可分割的,事务不可分割(没有commit数据不能被读到). 事务的持久性:在commit之后,不能丢数据.(就是在提交后,数据必须落盘redo落盘). 事务的隔离性:在数据库里面,各个事务之间不能互相影响. 事务的一致性:事务

mysql系列--锁和MVCC

锁 根据加锁的范围,MySQL ??的锁?致可以分成全局锁.表级锁和?锁三类 全局锁 全局锁就是对整个数据库实例加锁.MySQL 提供了?个加全局读锁的?法,命令是Flush tables with read lock (FTWRL).让整个库处于只读状态.全局锁的典型使?场景是,做全库逻辑备份.也就是把整库每个表都 select 出来存成?本.以前做法是通过 FTWRL对整库加只读锁备份.风险:1.如果在主库备份,在备份期间不能更新,业务停摆2.如果在从库备份,备份期间不能执行主库同步的bin

Mysql的锁机制与PHP文件锁处理高并发简单思路

以购买商品举例: ① 从数据库获取库存的数量. ② 检查一下库存的数量是否充足. ③ 库存的数量减去买家购买的数量(以每个用户购买一个为例). ④ 最后完成购买. 仅仅这几行逻辑代码在并发的情况下会出现问题,自己可以想象一下. 这里暂时就不测试了,下面会针对并发的处理给出测试结果. 创建表: CREATE TABLE `warehouse` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `stock` int(11) NOT NULL

mysql乐观锁总结和实践

上一篇文章<MySQL悲观锁总结和实践>谈到了MySQL悲观锁,但是悲观锁并不是适用于任何场景,它也有它存在的一些不足,因为悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性.如果加锁的时间过长,其他用户长时间无法访问,影响了程序的并发访问性,同时这样对数据库性能开销影响也很大,特别是对长事务而言,这样的开销往往无法承受.所以与悲观锁相对的,我们有了乐观锁,具体参见下面介绍: 乐观锁介绍: 乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据

mysql乐观锁总结和实践(转)

原文:mysql乐观锁总结和实践 上一篇文章<MySQL悲观锁总结和实践>谈到了MySQL悲观锁,但是悲观锁并不是适用于任何场景,它也有它存在的一些不足,因为悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性.如果加锁的时间过长,其他用户长时间无法访问,影响了程序的并发访问性,同时这样对数据库性能开销影响也很大,特别是对长事务而言,这样的开销往往无法承受.所以与悲观锁相对的,我们有了乐观锁,具体参见下面介绍: 乐观锁介绍: 乐观锁( Optimistic Locking )