zoukankan      html  css  js  c++  java
  • mysql事务控制和锁定语句

    MySQL 支持对 MyISAM 和 MEMORY 存储引擎的表进行表级锁定,对 BDB 存储引擎的表进行页级锁定,对 InnoDB 存储引擎的表进行行级锁定。默认情况下,表锁和行锁都是自动获得的,不需要额外的命令。

    show status like 'table%';

    LOCK TABLES 可以锁定用于当前线程的表。如果表被其他线程锁定,则当前线程会等待,直

    到可以获取所有锁定为止。UNLOCK TABLES 可以释放当前线程获得的任何锁定。当前线程执行另一个 LOCK TABLES 时,
    或当与服务器的连接被关闭时,所有由当前线程锁定的表被隐含地解锁.

    LOCK TABLES
    tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}
    [, tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}] ...171
    UNLOCK TABLES

    lock table table_name read;
    unlock tables;

    事务控制
    默认情况下,MySQL 是自动提交(Autocommit)的,如果需要通过明确的 Commit 和
    Rollback 来提交和回滚事务,那么需要通过明确的事务控制命令来开始事务,这是和 Oracle
    的事务管理明显不同的地方。

    START TRANSACTION BEGIN 语句可以开始一项新的事务。
    COMMIT ROLLBACK 用来提交或者回滚事务。
    CHAIN RELEASE 子句分别用来定义在事务提交或者回滚之后的操作,CHAIN 会立
    即启动一个新事物,并且和刚才的事务具有相同的隔离级别,RELEASE 则会断开和客户端的
    连接。
    SET AUTOCOMMIT 可以修改当前连接的提交方式,如果设置了 SET AUTOCOMMIT=0
    则设置之后的所有事务都需要通过明确的命令进行提交或者回滚。

    只对提交的事务记录到二进制的日志中,但是如果一个事务中包含非事务
    类型的表,那么回滚操作也会被记录到二进制日志中,以确保非事务类型表的更新可以被复制到从(Slave)数据库中。

    脏读(Dirty Reads):一个事务正在对一条记录做修改,在这个事务完成并提交前,这条记录的数据就处于不一致状态;这时,另一个事务也来读取同一条记录,如果不加控制,第二个事务读取了这些“脏”数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被形象地叫做"脏读"。
    不可重复读(Non-Repeatable Reads):一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,却发现其读出的数据已经发生了改变、或某些记录已经被删除了!这种现象就叫做“不可重复读”。
    幻读(Phantom Reads):一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为“幻读”。

    “脏读”、“不可重复读”和“幻读”,其实都是数据库读一致性问题,必须由数据库提供一定的事务隔离机制来解决。
    数据库实现事务隔离的方式,基本上可分为以下两种。
    一种是在读取数据前,对其加锁,阻止其他事务对数据进行修改。
    另一种是不用加任何锁,通过一定机制生成一个数据请求时间点的一致性数据快照(Snapshot),并用这个快照来提供一定级别(语句级或事务级)的一致性读取
    从用户的角度来看,好像是数据库可以提供同一数据的多个版本,因此,这种技术叫做数据多版本并发控制(MultiVersion Concurrency Control,简称MVCC或MCC),也经常称为多版本数据库。

  • 相关阅读:
    Java二维数组
    Java实现冒泡排序
    python类简记
    LaTeX:论文Instruction最后一段的章节引用
    在Adobe IIIustator中加入数学公式——配合MathType使用
    org.springframework.web.bind.annotation不存在
    xshell5 下载安装
    MultipartFile解析Excel
    开源项目环境搭建
    学习路线
  • 原文地址:https://www.cnblogs.com/pangdajin/p/9541883.html
Copyright © 2011-2022 走看看