设为首页 收藏本站
查看: 653|回复: 0

[经验分享] mysql基础(六)mysql事务

[复制链接]

尚未签到

发表于 2018-10-9 07:06:35 | 显示全部楼层 |阅读模式
mysql事务:是一个独立的工作单元  

  
事务必须通过ACID测试:
  
    原子性(Atomicity):一个事务的所有操作要么全部成功执行,要么全部失败后回滚
  
    一致性(Consistency):数据库总是从一个一致性状态转换成另一个状态
  
    隔离性(Isolation):一个事务在做出的操作在提交之前,其他事务是不可见的,隔离有多种级别
  
    持久性(Durability):一旦事务提交,其所做出的操作将永久保存在数据库中
  

  
事务的执行流程:
  
    启动事务-->执行SQL语句-->提交事务-->保存数据
  
    启动事务-->执行SQL语句-->回滚-->数据不发生任何改变
  

  

  

  
事务的隔离级别:
  
    Read Uncommitted(读取未提交内容)
  出现问题:1、2、3#不建议使用此隔离级别
  
    Read Committed(读提交)
  出现问题:2、3#大多数数据库使用的隔离级别,性能较好
  
    Repeatable Read(不可重复读)
  
        出现问题:3#mysql默认使用的隔离级别
  
    Serializable(串行化)        #数据安全性最好,并发访问能力最弱,可能会出现死锁,
  
        出现问题:4除非在数据要求比较严格的情况下,否则不建议使用
  
出现问题:
  
    1、脏读:可以读取其他事务没有提交的数据
  
    2、不可重复读:在当前事务中没有做出任何修改,但使用select查看数据时可能查看到不同的数
  
    3、幻读:在当前事务提交之前只能看见启动事务时的数据和在当前事务中做出修改的数据,
  
             而其他事务所做出的修改将不能看见
  
    4、加锁读:如果在此事务中对表进行修改,那么数据库将给做出修改的表加上表锁,
  
               在此事务提交之前其他事务对此表做出的操作都会阻塞
  

  
mysql> SHOW VARIABLES LIKE '%iso%';#查看当前的隔离级别
  
    SET tx_isolation='参数'#修改隔离级别
  对应参数(不区分大小写):
  Read-Uncommitted#1
  Read-Committed#2
  Repeatable-Read#3(默认)
  Serializable#4
  

  
    mysql> SET GLOBAL autocommit=0;#关闭自动提交事务
  
    mysql> START TRANSACTION#启动事务
  
    mysql> COMMIT#提交事务
  
    mysql> ROLLBACK#回滚
  

  

  
mysql事务日志:
  
    同事务日志和崩溃后安全恢复可以很好的保存数据安全
  

  
    事务日志包括:重做日志redo和回滚日志undo,事务日志通常比较小
  

  
    Redo记录的是已经全部完成的事务,就是执行了COMMIT的事务
  记录日志组是ib_logfile0、ib_logfile1记录日志组可以更加需要调整文件数量
  

  
    Undo记录的是已部分完成并且写入硬盘的未完成的事务
  

  
    在mysq重启后,innodb通过事务日志将所有已完成并写入磁盘的和未完成的事务进行同步
  
    并将数据写入到磁盘中完成数据库崩溃后安全恢复
  

  
    mysql> SHOW VARIABLES LIKE 'innodb_log%';#查看事务日志的相关配置
  
        innodb_log_file_size#设置事务日志大小
  innodb_log_files_in_group #设置事务日志组文件数量
  innodb_log_group_home_dir  #设置事务日志存放位置



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-618238-1-1.html 上篇帖子: 补12.关于mysql的多表查询 下篇帖子: 一小时学会mysql-Dr小白
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表