20110915
事务
事务是一个独立的整体,由一个或多个sql语句组成。被执行时,如果中间出现错误将会被回滚,到执行前的状。只有事务中所有的语句成功执行才能说这个事务被成功执行。
下列笔记是在student表中所使用的
Update student(更新student表)
Set name=’qq’将名字改为qq
Where id=1;将id为1的那行的名字改为qq
Commit提交,再往下写就是第二个事务
Select*from student查询student表
Start transaction标识事物的开始
Savepoint s1;建立了一个名字为s1的保存点
Rollback work to savepoint s1;
Commit;提交语句
在mysql中总是自动提交的,可以改动为手动提交set @@autocommit=0;自动时autocommit值为1
实例:解释保存点
Update student
Set name=’qq’
Where id=101;
Savepoint s1;
Delete from student where id=101;
Commit;(如果将atuocommit值改为0了则需要写commit来提交(重新打开命令窗口时))
Rollback work to savepoint s1;(此命令执行后将回到名字改完后的状态而删除命令将中断不再执行)命令为回滚
事务和ACDI属性
ACDI是事务处理必须满足的四个原则,A代表原子性,C代表一致性,D代表隔离性,I代表持久性
原子性:意味着每个事务都必须被认为是一个不可分割的单元,假设一个事务由两个或多个任务组成,其中的语句必须同时成功才能认为事务是成功的。如果事务失败,系统将会返回到事务以前的状态。
在添加雇员这个例子中,原子性指如果没有创建雇员相应的工资表和部门记录,就不可能向雇员数据库 添加新雇员。
原子的执行是一个或者全部发生或者什么也没发发生的命题。在一个原子操作中,如果事务中的任何一个语句失败,前面执行的语句都将返回,以保证数据的整体性没有影响,这是一些关键系统尤其重要的。
一致性:不管事务是完全成功完成还是中途失败,当事务使系统处于一致的状态时,存在一致性。参照前面的例子,一致性是指如果从系统中删除一个雇员,则所有和该雇员相关的数据,包括工资数据和组的成员资格也要被删除。
隔离性:隔离性是指每个事务在它自己的空间内发生,和其他发生在系统中的事务隔离,而且事务的结果只有在它完全被执行时才能看见。即使在这样的一个系统中同时发生了多个事务,隔离性 原则保证某个特定事务在完全完成之前,其结果是看不见的。
持久性:持久性是指即使系统崩溃,一个提交的任务仍然存在。数据库日志记录了所有对于表的更新、查询、报表等。
事务隔离级
脏读:不可重读,幻读的情况,读到线程未提交的事务。
不可重读:在一个事务中,读取同一个记录两次,获取的数据不同。
幻读:在一个事务中,读取到的记录数据不同。
序列化:如果隔离级为序列化,用户之间通过一个接一个顺序地执行当前的事务提供了事务之间最大的隔离。
可重复读:在这一级上,事务不会被看成是一个序列。不过,当前在执行事务的变化仍然不能看到。也就是说,如果用户子啊同一个事务中执行同条select语句数次,结果总是相同的。
未提交读:提供了事务之间最小限度的隔离。除了容易产生虚幻的读操作外,仅处于这个隔离级的事务可以读到其他事务还没有提交的数据,如果这个事务使用其他事务不提交的变化作为计算的基础,然后那些未提交的变化被它们的父事务撤销,这就导致了大量的数据变化。
隔离级设置主要是锁的设置。