数据库 事务

时间:2022-03-13 03:54:15

事务:是一种机制,一个操作序列,它可以包含一条操作命令,或一组操作命令,并且把所有的命令作为一个整体一起向系统体交,或撤销

事务的特点(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)