首页 > 数据库 > MySQL > 正文

mysql事务处理用法与实例细说

2024-07-24 12:31:31
字体:
来源:转载
供稿:网友
       代码如下 复制代码 root@host# mysql -u root -p password;
      Enter password:*******
      mysql> use TUTORIALS;
      Database changed
      mysql> create table tcount_tbl
    -> (
    -> tutorial_author varchar(40) NOT NULL,
    -> tutorial_count  INT
    -> ) TYPE=InnoDB;
Query OK, 0 rows affected (0.05 sec)
可以使用其他GEMINI或BDB表类型,但它取决于您的安装,如果它支持这两种类型。
 
事务 ACID Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
 
1、事务的原子性
一组事务,要么成功;要么撤回。
 
2、稳定性
有非法数据(外键约束之类),事务撤回。
 
3、隔离性
事务独立运行。
一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。
事务的100%隔离,需要牺牲速度。
 
4、可靠性
软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。
可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。
开启事务
START TRANSACTION 或 BEGIN
 
折返点
SAVEPOINT adqoo_1
ROLLBACK TO SAVEPOINT adqoo_1
发生在折返点 adqoo_1 之前的事务被提交,之后的被忽略
 
需要用以下模式来设定锁定模式
 
1、SELECT …… LOCK IN SHARE MODE(共享锁)
查询到的数据,就是数据库在这一时刻的数据(其他已commit事务的结果,已经反应到这里了)
SELECT 必须等待,某个事务结束后才能执行
 
2、SELECT …… FOR UPDATE(排它锁)
例如 SELECT * FROM tablename WHERE id<200
那么id<200的数据,被查询到的数据,都将不能再进行修改、删除、SELECT …… LOCK IN SHARE MODE操作
一直到此事务结束
 
共享锁 和 排它锁 的区别:在于是否阻断其他客户发出的 SELECT …… LOCK IN SHARE MODE命令
 
3、INSERT / UPDATE / DELETE
所有关联数据都会被锁定,加上排它锁
 
4、防插入锁
例如 SELECT * FROM tablename WHERE id>200
那么id>200的记录无法被插入
 
5、死锁
自动识别死锁
先进来的进程被执行,后来的进程收到出错消息,并按ROLLBACK方式回滚
innodb_lock_wait_timeout = n 来设置最长等待时间,默认是50秒
 
mysql事物处理实例
 
MYSQL的事务处理主要有两种方法
1.用begin,rollback,commit来实现
    begin开始一个事务
    rollback事务回滚
    commit 事务确认
2.直接用set来改变mysql的自动提交模式
    mysql默认是自动提交的,也就是你提交一个query,就直接执行!可以通过
    set autocommit = 0 禁止自动提交
    set autocommit = 1 开启自动提交
    来实现事务的处理。
但要注意当用set autocommit = 0 的时候,你以后所有的sql都将作为事务处理,直到你用commit确认或 rollback结束,注意当你结束这个事务的同时也开启了新的事务!按第一种方法只将当前的做为一个事务!
MYSQL只有 INNODB和BDB类型的数据表才支持事务处理,其他的类型是不支持的!

(编辑:武林网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表