【Mysql】Mysql事务处理用法与实例详解

  

     

        ,代码如下         复制代码               root@host # mysql - u root - p密码;
  输入密码:* * * * * * *
  mysql>使用教程;
  数据库修改
  mysql>创建表tcount_tbl
  ,,→(
  ,,→tutorial_author varchar (40) NOT NULL,
  ,,→tutorial_count INT
  ,,→)类型=InnoDB;
  查询好,0行影响(0.05秒)               

  可以使用其他双子座或BDB表类型,但它取决于您的安装,如果它支持这两种类型。   

  

  
  由于项目设计里面,牵扯到了金钱的转移,于是就要用到MYSQL的事务处理,来保证一组处理结果的正确性。用了事务,就不可避免的要牺牲一部分速度,来保证数据的正确性。
  只有InnoDB支持事务   

  

  事务酸原子性(原子性)、一致性(稳定性),隔离(隔离性),耐用性(可靠性)   

  

  1、事务的原子性
  一组事务,要么成功,要么撤回。   

  

  2、稳定性
  有非法数据(外键约束之类),事务撤回。   

  

  3、隔离性
  事务独立运行。
  一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。
  事务的100%隔离,需要牺牲速度。   

  

  4、可靠性
  软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。
  可靠性和高速度不可兼得,innodb_flush_log_at_trx_commit选项决定什么时候吧事务保存到日志里。
  开启事务
  开始事务或开始   

  

  提交事务(关闭事务)
  提交   

  

  放弃事务(关闭事务)
  回滚   

  

  折返点
  保存点adqoo_1
  保存点回滚adqoo_1
  发生在折返点adqoo_1之前的事务被提交,之后的被忽略   

  

  事务的终止   

  

  设置“自动提交“模式
  设置自动提交=0
  每条SQL都是同一个事务的不同命,令之间由提交或回滚隔开
  掉线后,没有承诺的事务都被放弃   

  

  事务锁定模式   

  

  系统默认:不需要等待某事务结束,可直接查询到结果,但不能再进行修改,删除。
  缺点:查询到的结果,可能是已经过期的。
  优点:不需要等待某事务结束,可直接查询到结果。   

  

  需要用以下模式来设定锁定模式   

  

  1,选择……锁定共享模式(共享锁)
  查询到的数据,就是数据库在这一时刻的数据(其他已承诺事务的结果,已经反应到这里了)
  选择必须等,待某个事务结束后才能执行   

  

  更新2,选择……(排它锁)
  从表名,例如SELECT * id<200
  那么id<200的数据,被查询到的数据,都将不能再进行修改,删除,选择……锁定共享模式操作
  一直到此事务结束   

  

  共享锁和排它锁的区别:在于是否阻断其他客户发出的选择……锁定共享模式命令   

  

  3、插入/更新/删除
  所有关联数据都会被锁定,加上排它锁   

  

  4、防插入锁
  从表名,例如SELECT * id> 200
  那么id> 200的记录无法被插入   

  

  5、死锁
  自动识别死锁
  先进来的进程被执行,后来的进程收到出错消息,并按回滚方式回滚
  innodb_lock_wait_timeout=n来设置最长等待时间,默认是50秒   

  

  事务隔离模式   

  

  (会话|全球)设置事务隔离级别
  读未提交|读承诺|可重复读| SERIALIZABLE
  1、不带会话,全球的命令
  只对下一个事务有效
  2、设置会话
  为当前会话设置隔离模式
  3,集全球
  为以后新建的所有MYSQL连接设置隔离模式(当前连接不包括在内)   

  

  隔离模式   

  

  ,,读未提交
  不隔离选择
  其他事务未完成的修改(未提交),其结果也考虑在内   

  

  ,,读取提交
  把其他事务的提交修改考虑在内
  同一个事务中,同一选择可能返回不同结果   

  

  ,,可重复读(默认)
  不把其他事务的修改考虑在内,无论其他事务是否用提交命令提交过

【Mysql】Mysql事务处理用法与实例详解