数据库事务

数据库事务的概念。
事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体
一起向系统提交或撤销操作请求,即这一组数据席命令要么都执行,要么不执行。
事务是一个不可分制的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。
事务适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等。通过
事务的完整性以保证数据的一致性。
一、事务的ACID特点。
事务具有四个属性:ACID.
原子性(Atomicity)
一致性(Conslistency)
隔离性(lsolation)
持久性(Durability)
1、原子性。
事务是一个完整的操作,事务的各元素是不可分的(原子的),事务的所有元素必须作为一个整体
提交或回滚,如果事务中的任何元素失败,则整个事务将失败。
2、一致性
当事务充成时,数据必须处于一致状态,在事务开始之册,数据牌汇会存楼的数据处于一致状态;
在正在进行的事务中,数据可能处于不一致的状态;当事务完成时,数据必须再次回到已知的一致状态。
3、隔离性
对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应该以任何方式依赖
于或影响其他事务,修改数据的事务可以在另一个使用相同数据的事务开始之前访同这些数据,或者在另
一个使用相同数据的事务结束之后访何这些数据。
4、持久性。
事务的持久性指不管系统是否发生了故障,事务处理的结果都是永久的。一旦事务被提交,事务的效
果会被永久地保留在数据库中。
二、事务的操作。
默认情况下MYSOL的事务是自动提交的,当语句提交时事务便自动提交。
手动对事务进行控制的方法:
1、事务处理命令控制
2、使用sct设置事务处理方式
事务处理命令控制事务:
begin 开始一个事务
commit 提交一个事务
rollback 回滚一个事务(撤销)
事物的操作必须基于lnnodb存储引擎。
commit实例:
MariaDB> create database auth;
MariaDB> use auth
MariaDB [auth]> create table users(user_name char(18) not null,user_passwd char(50) default'',primary key(user_name));
MariaDB [auth]> alter table auth.users engine=innodb;
MariaDB [auth]> begin; //事务开始
MariaDB [auth]> insert into users values('lisi',password('111111'));
MariaDB [auth]> insert into users values('wangwu',password('222222'));
MariaDB [auth]> commit; //事务结束并提交
MariaDB [auth]> select * from users;
+------------+-----------------------------------------------------------+
| user_name | user_passwd |
+------------+-----------------------------------------------------------+
| lisi | *FD571203974BA9AFE270FE62151AE967ECA5E0AA |
| wangwu | *A0C1808B1A47CECD5C161FEE647F5427F4EB6F98 |
+-------------+----------------------------------------------------------+

rollback实例:
MariaDB [auth]> use auth
MariaDB [auth]> begin;
MariaDB [auth]> update users set user_passwd=password('') where user_name='lisi';
MariaDB [auth]> rollback; //回滚(撤销操作),从begin开始的所有命令都将被撤销

2、使用set命令进行控制
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
示例:
MariaDB [auth]> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)

MariaDB [auth]> use auth
Database changed
MariaDB [auth]> insert into users values('zhouliu',password('123123'));
MariaDB [auth]> insert into users values('lilili',password('123321'));
MariaDB [auth]> commit; //提交前面两条SQL语句,为一个实务
MariaDB [auth]> select * from users;
+---------------+--------------------------------------------------------------------------+
| user_name | user_passwd                                                                   |
+---------------+--------------------------------------------------------------------------+
| lilili              | *437F1809645E0A92DAB553503D2FE21DB91270FD -|
| lisi              | *FD571203974BA9AFE270FE62151AE967ECA5E0AA |
| wangwu     | *A0C1808B1A47CECD5C161FEE647F5427F4EB6F98 |
| zhouliu       | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 -|
+---------------+--------------------------------------------------------------------------+
4 rows in set (0.00 sec)

 

posted @ 2019-10-14 21:01  有无  阅读(225)  评论(0编辑  收藏  举报

博客记录了我学习linux过程中的一些问题及解决方法,内容可能仅适用于个人,如带来不便,望请见谅!