1.数据库事务的概念,以及事务的特性
事务在计算机术语中是指访问并可能跟新数据库中各中数据项的一个程序执行单元
数据库事务特性:
1、原子性:事务作为一个整体被执行,包含在事务中的数据库执行操作要么全部被执行,要么全不执行。
2、一致性:事务应确保数据库从一个一致状态转变为另一个一致状态一致状态的含义是数据库中的数据隐瞒朱完整性约束。
3、隔离性:多个事务并发执行时,一个事物的执行不影响其他事务的执行。
4、持久性:一个事务一但提交,那么该事务对数据库的修改将永久的保存在数据库中。
2.数据库事务的开启
INNODB支持数据库事务;MYISAM不支持数据库事务
数据库事务流程:
1)事务的开启:
命令:
begin/start transaction
2)数据库增删改查
updata 表名 set 列=值 where 条件语句
insert into 表名 (列名1,列名2,···)values (值1,值2···)
select * from 表名 where 条件语句
DELETE TABLE 表名 [where 条件语句]
3)事务的提交
命令:
commit;
4)事务的回滚
命令:
rollback;
(事务的提交与回滚都会是该事务结束)
事务并发处理带来的问题
更新丢失:当两个及以上数量的事务选择同一行,然后基于最初选定的值修改时,就会发生更新问题。最后修改的会覆盖前面修改的
脏读:事务A读取到事务B还未提交的事务
不可重读:事务A在不同时间段内,读取同一行数据,得到的结果不一致。(读取到其他事务修改的值)
幻读:事务A在同一事务的不同时间段,第一次读取的行数与第二次读取的行数不一样(读取到其他事务增加的新增内容)
事务的隔离等级
读未提交(READ UNCOMMITTED):能读取到其他事务未提交的数据;可能出现的问题(脏读;不可重读;幻读;更新丢失)
读已提交(READ COMMITTED):只能读取到其他事物已提交的数据;可能出现的问题(不可重读;幻读;更新丢失)
可重复读(REPEATABLE READ):在同一事务的不同时间段,第一次与第二次读取到的结果一样(即便其他事务修改了值。);可能出现的问题(幻读)
串行化(SERIALIZABLE):事务依次执行,不存在并发问题。
设置事务隔离等级:set session transaction isolation level 隔离等级;
查看当前隔离级别:select @@transaction_isolation;
行锁与表锁
行锁:在事务的执行过程中对某一行执行增删改操作时,其他事务无法对改行进行增删改查
表锁:在事务的执行过程中对某一个表执行增删改操作时,其他事务无法对改表进行增删改查