事务的实现
- 使用set语句来改变自动提交模式
SET autocommit = 0; /*关闭*/
SET autocommit = 1; /*开启*/
– 注意:
— 1.MySQL中默认是自动提交
— 2.使用事务时应先关闭自动提交 CREATE DATABASE shop
;
mysql> use shop;
Database changed
mysql> create table account(
-> id int(11) not null auto_increment,
-> name varchar(32) not null,
-> cash decimal(9,2) not null,
-> primary key(id)
-> );
mysql> insert into account(name,cash) values('A',2000.00), ('B',10000.00);
-- 转账实现‘’
SET autocommit = 0; -- 关闭自动提交
START TRANSACTION; -- 开始一个事务,标记事务的起始点
UPDATE account SET cash=cash-500 WHERE `name`='A';
UPDATE account SET cash=cash+500 WHERE `name`='B';
COMMIT; -- 提交事务
rollback;
SET autocommit = 1; – 恢复自动提交
Mysql事务隔离级别设置
定义事务隔离级别 使用 set transaction isolation level 语句
运用select@@transaction_isolation 查看事务的隔离级别
5.0 版本运用 select @@tx_isolation;查看事务的隔离级别
- 隔离级别为read uncommitted (脏读)
打开客户机A 执行以下语句;
set transaction isolation level read uncommitted;
select@@transaction_isolation;
select * from account;
打开客户机B执行以下语句
set transaction isolation level read uncommitted;
start transaction;
update account set cash=cash+500 where name='B';
打开客户机A执行
select * from account;
客户机A看到了客户机B尚未提交的结果,造成了脏读现象。
2. 隔离级别为read committed (脏读)
打开客户机A 执行以下语句;
set transaction isolation level read committed;
select@@transaction_isolation;
select * from account;
打开客户机B执行以下语句
set transaction isolation level read committed;
start transaction;
update account set cash=cash+500 where name='B';
打开客户机A执行
select * from account;
MySQL客户机A在同一个事务中两次执行select * from account;的结果不同,造成了不可重复读现象
3. 隔离级别为repeatable read(MySQL的默认隔离级别)
不能避免幻影现象 其他都可(但InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。)
打开客户机A 执行以下语句;
set transaction isolation level repeatable read;
select@@transaction_isolation;
select * from account;
打开客户机B执行以下语句
set transaction isolation level repeatable-read;
start transaction;
insert into account (name,cash) values('C',3000.00);
commit;
select * from account;
打开客户机A执行
select * from account;
MySQL备份
使用mysqldump备份工具
Mysqldump客户端
转储数据库
搜集数据库进行备份
将数据转移到另一个SQL服务器,不一定是Mysql服务器
使用MySQL 命令恢复数据
- 在登录mysql的情况下: – source D:/a.sql
source 备份文件 - 在不登录的情况下
mysql -u用户名 -p密码 库名 < 备份文件