事务在数据库中是工作的逻辑单元,单个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制,可以确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行。
事务的四大特性ACID
- 原子性(Atomicity):一个事务里所包含的SQL语句是一个整体,是不可分割的,要么不做,要么都做。
- 一致性(Consistency):事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的。
- 隔离性(Isolation):数据库允许多个并发事务同时对其中的数据进行读写和修改的能力,隔离性可以防止事务在并发执行时,由于他们的操作命令交叉执行而导致的数据不一致状态。
- 持久性(Durability):当事务结束后,它对数据库中的影响是永久的,即便系统遇到故障的情况下,数据也不会丢失。
COMMIT语句(提交事务)
COMMIT [ WORK ] [ COMMENT clause ] [ WRITE clause ] [ FORCE clause ];
ROLLBACK语句(回滚事务)
ROLLBACK [ WORK ] [ TO [SAVEPOINT] savepoint_name | FORCE 'string' ];
TRANSACTION语句(设置事务)
SET TRANSACTION 语句可以用来设置事务的各种状态,比如只读、读/写、隔离级别,为事务分配名称或将事务分配回滚段等等。
SET TRANSACTION [ READ ONLY | READ WRITE ]
[ ISOLATION LEVEL [ SERIALIZE | READ COMMITED ]
[ USE ROLLBACK SEGMENT 'segment_name' ]
[ NAME 'transaction_name' ];
● READ ONLY:可以将事务设置为只读事务。
● READ WRITE:可以将事务设置为读/写事务。
● ISOLATION LEVEL: 如果指定,它有两个选项:
1.ISOLATION LEVEL SERIALIZE:如果事务尝试更新由另一个事务更新并未提交的资源,则事务将失败。
2.ISOLATION LEVEL READ COMMITTED:如果事务需要另一个事务持有的行锁,则事务将等待,直到行锁被释放。
● USE ROLLBACK SEGMENT:可选的。 如果指定,它将事务分配给由 ‘segment_name’ 标识的回退段,该段是用引号括起来的段名称。
● NAME:为 ‘transaction_name’ 标识的事务分配一个名称,该事务用引号括起来
LOCK TABLE语句(锁表)
LOCK TABLE 语句可以用来锁定表、表分区或表子分区。
LOCK TABLE tables IN lock_mode MODE [ WAIT [, integer] | NOWAIT ];
参数:
1、tables:用逗号分隔的表格列表。
2、lock_mode:它是以下值之一:
lock_mode | 描述 |
---|---|
ROW SHARE | 允许同时访问表,但阻止用户锁定整个表以进行独占访问。 |
ROW EXCLUSIVE | 允许对表进行并发访问,但阻止用户以独占访问方式锁定整个表并以共享方式锁定表。 |
SHARE UPDATE | 允许同时访问表,但阻止用户锁定整个表以进行独占访问。 |
SHARE | 允许并发查询,但用户无法更新锁定的表。 |
SHARE ROW EXCLUSIVE | 用户可以查看表中的记录,但是无法更新表或锁定SHARE表中的表。 |
EXCLUSIVE | 允许查询锁定的表格,但不能进行其他活动。 |
WAIT:它指定数据库将等待(达到指定整数的特定秒数)以获取 DML 锁定。
NOWAIT:它指定数据库不应该等待释放锁。