mysql梳理笔记---事务

什么是事务

  • 1.事务是数据库系统区别于其他文件系统的重要特性之一
  • 2.事务是一组具有原子性的SQL语句,或是一个独立的工作单元(要么全部完成,要么全部失败)

事务的特性

  • 原子性:一个事物必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败,对于一个事务来说,不可能只执行其中的一部分操作。
  • 一致性:一致性是指事务将数据库从一种一致性状态转换到另一种一致性状态,在事务开始之前和事务结束之后数据库数据的完整性没有破坏。
  • 隔离型:要求一个事务对数据库中的数据进行修改,在未提交完成前对其他事务是不可见对。默认隔离级别:可重复读。
    • 未提交读(READ UNCOMMITED)
    • 已提交读(READ COMMITED)
    • 可重复读(REPEATABLE READ)

    隔离型由低到高,并发性由高到低

  • 持久性:一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,已经提交的修改数据也不会丢失(数据库级别,磁盘损坏等不算)

什么是大事务:运行时间比较长,操作等数据比较多的事务

风险:

  • 锁定太多的数据,造成大量的阻塞和锁超时
  • 回滚时所需的时间比较长
  • 执行时间长,容易造成主从延迟

如何处理大事务

  • 1.避免一次处理太多的数据
  • 移出不必要在事务中的SELECT操作

示例:

MYSQL的事务处理主要有两种方法

  • 用begin,rollback,commit来实现
  • 直接用set来改变mysql的自动提交模式:set autocommit = 0 的时候,你以后所有的sql都将作为事务处理,直到你用commit确认或 rollback结束.

用begin,rollback,commit来实现

对着网上的栗子敲一下,然后填填注释

./mysql -u root -p // 链接数据库
use we7     // 切换数据库
CREATE TABLE runoob_transaction_test( id int(5)) engine=innodb;     // 创建表,engine设置成innodb。innodb支持事务,myisam不支持事务
select * from runoob_transaction_test;   // 查看表里的数据
begin;  // 开始事务
insert into runoob_transaction_test value(5);   // 插入值
insert into runoob_transaction_test value(6);
commit;     // 结束事务
select * from runoob_transaction_test;  // 查看结果 都被插入了


begin;  // 开始事务
insert into runoob_transaction_test values(7);  // 插入值
rollback;   // 回滚
select * from runoob_transaction_test; //查看结果 回滚了

随机浏览