事务:是一种机制,一个操作序列,它可以包含一条操作命令,或一组操作命令,并且把所有的命令作为一个整体一起向系统体交,或撤销
事务的特点(ACID);
1)原子性:
事务是一个完整的操作,事务的个元素是不可分的,事务的所有元素必须作为一个整体提交或回滚,如果事务中的任何元素失败,则整个事务将失败
2)一致性:
事务开始,汇总存储处于一致状态,在进行是不处于一致状态,当事务完成时,数据必须处于一至状态
3)隔离性
对数据修改的所有并发事务时彼此隔离的,这表名事务必须隔离的
4)持久性
事务的持久性指不管发生了故障,事务处理结果都是永久的,一旦事务的被提交,事务的效果被永久的保留在数据库中,
二:事务的操作
默认情况下mysql的事务是自动提交的,当sql语句提交时事务自动提交,
手动对事务进行控制的方法:
事务处理命令
使用set设置处理方式
事务处理命令控制事务:
begin 开始一个事务
commit 提交一个事务
rollback 回滚一个事务
事务必须给予innodb存储引擎
创建一个表:
MariaDB [auth]> create table users(user_name char(18) not null,user_passwd char(50) default '',primary key (user_name));
Query OK, 0 rows affected (0.00 sec)
定义它的存储引擎:
MariaDB [auth]> alter table auth.users engine=innodb
-> ;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
开始一个事务;他不会提交
MariaDB [auth]> begin;
Query OK, 0 rows affected (0.00 sec)
在里边插入数据
MariaDB [auth]> insert into users values('lisi',password('123456'));
Query OK, 1 row affected (0.00 sec)
MariaDB [auth]> insert into users values('wangwu',password('654321'));
Query OK, 1 row affected (0.00 sec)
提交事务:提交完成事务变成永久的
MariaDB [auth]> commit;
Query OK, 0 rows affected (0.00 sec)
查询:
MariaDB [auth]> select * from users;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| lisi | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| wangwu | *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
例:
开始一个事务
MariaDB [auth]> begin;
Query OK, 0 rows affected (0.00 sec)
清空李四密码
MariaDB [auth]> update users set user_passwd=password('') where user_name='lisi';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
查询:
MariaDB [auth]> select * from users;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| lisi | |
| wangwu | *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
因为没有提交,还不能确定,回滚 就又回去了
MariaDB [auth]> rollback;
Query OK, 0 rows affected (0.00 sec)
查询,回到原样:
MariaDB [auth]> select * from users;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| lisi | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| wangwu | *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
使用set命令:
禁止自动提交,在往里面插入东西,不会自动提交了,在输入一条命令:MariaDB [auth]> commit;他才会提交
MariaDB [auth]> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
开启自动提交:
MariaDB [auth]> set autocommit=1;
Query OK, 0 rows affected (0.00 sec)