MySQL事务

何为事务?

  事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。

    一个事务可以是一条SQL语句,一组SQL语句或整个程序。

事务的特性:  

  事务是恢复和并发控制的基本单位。
  事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
A:automicity
/*原子性:整个事务中的所有操作要么全部成功执行,要么全部失败回滚*/ C:consistency
/*一致性:事务必须是使数据库从一个一致性状态变到另一个一致性状态*/ I:isolation
/*隔离性:一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰*/ D:durability
/*持久性:事务一旦提交,其所做的修改会永久存入数据库中*/

事务的启动和结束

  在MySQL中,事务开始使用COMMITROLLBACK语句开始工作和结束。开始和结束语句的SQL命令之间形成了大量的事务。

  这两个关键字“提交”和“回滚”主要用于MySQL的事务。

  当一个成功的事务完成后,发出COMMIT命令应使所有参与表的更改才会生效。

  如果发生故障时,应发出一个ROLLBACK命令返回的事务中引用的每一个表到以前的状态。

  建议:在MySQL中有个服务器变量autocommit决定着事务的起止行为,系统默认是autocommit=ON;在实际生产环境中,应将此变量的状态设置为关闭,即需要时自己显式请求和提交事务最为合适。

事务支持SAVEPOINT

SAVEPOINT identifier  //创建保存点
ROLLBACK TO [SAVEPOINT] identifier //回滚至某保存点
RELEASE SAVEPOINT identifier //释放保存点

事务的隔离级别

/*
READ-UNCOMMITTED (读未提交) -->导致脏读;
READ-COMMITTED (读提交) --> 不可重复读;
REPEATABLE-READ (可重复读) -->导致幻读;
SERIALIZABLE(可串行化)
*/

  查看当前事务隔离级别的服务器变量:tx_isolation,默认是REPEATABLE-READ

事务日志的相关参数

innodb_log_file_size      ####
innodb_log_files_in_group #
innodb_log_group_home_dir /

锁机制

  主要是为了实现并发控制

  锁粒度:

    行级锁和表级锁

  其类型有:

    读锁:共享锁,可被其他用户进行读操作

    写锁:独占锁

  根据是否为用户手动请求,又分为:

    显式锁:用户手动请求的锁

    隐式锁:存储引擎自行根据需求施加的锁

   显式锁使用方法:

/*施加锁*/
LOCK TABLES tbl_name [[AS] alias] lock_type [, tbl_name [[AS] alias] lock_type] ... lock_type:
READ [LOCAL] | [LOW_PRIORITY] WRITE /*解除锁*/
UNLOCK TABLES

MySQL的查询缓存  

  1.判断缓存是否命中根据:查询语句的哈希值判断;

    哈希值考虑的因素有:

      查询本身、要查询的数据库、客户端使用协议版本,。。。

  2.哪些查询可能不会被缓存?

    查询中包含UDF、存储函数、用户自定义变量、临时表、mysql库中的系统表、或者包含列级权限的表、有着不确定值的函数(Now());

  3.查询缓存相关的服务器变量:

query_cache_min_res_unit  //查询缓存中内存块的最小分配单位;

    /*较小的值会减少浪费,但会导致更频繁的内存分配操作;
较大的值会造成浪费,也会导致碎片过多;
*/ query_cache_limit //能缓存的最大查询结果;对于有着较大结果的查询,建议在SELECT中使用SQL_NO_CACHE
query_cache_size //查询缓存总共可用的内存空间;单位是字节,必须是1024的整数倍;
query_cache_type //ON,OFF,DEMAND(除非SELECT语句中有SQL_CACHE,否则一律不缓存)
query_cache_wlock_invalidate //如果某表被其他的连接锁定,是否仍然可以从查询缓存中返回结果;默认为OFF,仍然可以返回结果;但有可能会改变服务器行为,ON则为禁止返回结果。

  4.查询缓存状态相关的变量:

  Qcache_inserts:可缓存查询语句的结果放入缓存中的次数

  Qcache_not_cached:可缓存但未缓存的次数

  缓存命中率评估:
    Qcache_hits/(Qcache_hits+Com_select)

MySQL事务、锁机制、查询缓存的更多相关文章

  1. MySQL- 锁机制及MyISAM表锁

    锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许 多用户 共享的资源.如何保证数据并发访问的一致性.有效性是所 ...

  2. mysql insert锁机制【转】

    最近再找一些MySQL锁表原因,整理出来一部分sql语句会锁表的,方便查阅,整理的不是很全,都是工作中碰到的,会持续更新 笔者能力有限,如果有不正确的,或者不到位的地方,还请大家指出来,方便你我,方便 ...

  3. 说一说MySQL的锁机制

    锁概述 MySQL的锁机制,就是数据库为了保证数据的一致性而设计的面对并发场景的一种规则. 最显著的特点是不同的存储引擎支持不同的锁机制,InnoDB支持行锁和表锁,MyISAM支持表锁. 表锁就是把 ...

  4. 关于MySQL的锁机制详解

    锁概述 MySQL的锁机制,就是数据库为了保证数据的一致性而设计的面对并发场景的一种规则. 最显著的特点是不同的存储引擎支持不同的锁机制,InnoDB支持行锁和表锁,MyISAM支持表锁. 表锁就是把 ...

  5. mysql 事务锁超时时间 innodb_lock_wait_timeout

    mysql 事务锁超时时间 innodb_lock_wait_timeout: # 查询全局等待事务锁超时时间 SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait ...

  6. MySQL/MariaDB数据库的查询缓存优化

    MySQL/MariaDB数据库的查询缓存优化 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL架构 Connectors(MySQL对外提供的交互接口,API): ...

  7. MySQL:锁机制和隔离事务级别

    在mysql中的锁看起来是很复杂的,因为有一大堆的东西和名词:排它锁,共享锁,表锁,页锁,间隙锁,意向排它锁,意向共享锁,行锁,读锁,写锁,乐观锁,悲观锁,死锁.这些名词有的博客又直接写锁的英文的简写 ...

  8. 理解MySql事务隔离机制、锁以及各种锁协议

    一直以来对数据库的事务隔离机制的理解总是停留在表面,其内容也是看一遍忘一边.这两天决定从原理上理解它,整理成自己的知识.查阅资料的过程中发现好多零碎的概念假设串起来足够写一本书,所以在这里给自己梳理一 ...

  9. MySQL 高级—— 锁机制

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.锁的概述 1.锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除传统的计 ...

  10. MySQL InnoDB锁机制

    概述: 锁机制在程序中是最常用的机制之一,当一个程序需要多线程并行访问同一资源时,为了避免一致性问题,通常采用锁机制来处理.在数据库的操作中也有相同的问题,当两个线程同时对一条数据进行操作,为了保证数 ...

随机推荐

  1. Dubbo + Kryo 实现高速序列化

    Dubbo 中的序列化 Dubbo RPC 是 Dubbo 体系中最核心的一种高性能.高吞吐量的远程调用方式,可以称之为多路复用的 TCP 长连接调用: 长连接:避免了每次调用新建 TCP 连接,提高 ...

  2. Python全栈开发:socket

    Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  3. HNOI2018思记

    4-13 顺顺利利到了湖南.晚上认真研读cf毒瘤题题解,未果. 发现这里含铁丰富的高温多雨式红土地.以及窗户特别深,总有一圈小阳台的房子,门楣深邃如瞳. 看了一波miaom的ZJOI游记,思考了一下解 ...

  4. leetcode-第五场双周赛-1133-最大唯一数

    第一次提交: class Solution: def largestUniqueNumber(self, A: List[int]) -> int: dict = {} for i in A: ...

  5. Ubuntu下使用SSH 命令用于登录远程桌面

    https://blog.csdn.net/yucicheung/article/details/79427578 问题描述 做DL的经常需要在一台电脑(本地主机)上写代码,另一台电脑(服务器,计算力 ...

  6. LUOGU P1967 货车运输(最大生成树+树剖+线段树)

    传送门 解题思路 货车所走的路径一定是最大生成树上的路径,所以先跑一个最大生成树,之后就是求一条路径上的最小值,用树剖+线段树,注意图可能不连通.将边权下放到点权上,但x,y路径上的lca的答案不能算 ...

  7. QQ邮箱发送信息

    #以下库为python自带的库,不需要进行安装 #邮件发信动作 import smtplib #构造邮件内容 from email.mime.text import MIMEText #构造邮件头 f ...

  8. VS2010-MFC(利用MFC向导生成单文档应用程序框架)

    一.VC++与MFC 讲VC++免不了要提MFC,MFC全称Microsoft Foundation Classes,也就是微软基础类库.它是VC++的核心,是C++与Windows API的结合,很 ...

  9. 图解SQL的Join

    原文地址:http://coolshell.cn/articles/3463.html 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的 ...

  10. JavaScript性能优化篇js优化

    JavaScript性能优化篇js优化   随着Ajax越来越普遍,Ajax引用的规模越来越大,Javascript代码的性能越来越显得重要,我想这就是一个很典型的例子,上面那段代码因为会被频繁使用, ...