数据库事务的四大特性(简称ACID)是:
事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。
例如银行取款事务分为2个步骤(1)存折减款(2)提取现金。不可能存折减款,却没有提取现金。2个步骤必须同时完成或者都不完成。
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。
例如完整性约束a+b=10,一个事务改变了a,那么b也应随之改变。
分离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。
持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,即对已提交事务的更新能恢复。持久性通过数据库备份和恢复来保证。
暂时先保存到,后面再用自己的话来总结。
遇到一个问题:
1.创建表
CREATE TABLE bank ( customerName CHAR(10), --顾客姓名 currentMoney MONEY --当前余额 ) GO ALTER TABLE bank ADD CONSTRAINT CK_currentMoney CHECK(currentMoney>=1) GO INSERT INTO bank(customerName,currentMoney) VALUES(‘张三‘,1000) INSERT INTO bank(customerName,currentMoney) VALUES(‘李四‘,1)
2.执行事务
BEGIN TRANSACTION /*--转账:张三的账户少1000元,李四的账户多1000元*/ UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=‘张三‘ UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=‘李四‘ commit
3.执行更新操作:
UPDATE bank SET currentMoney=currentMoney+1000
WHERE customerName=‘李四‘
更新不不成功,把查询分析关掉再执行就成功了,原因可能是
1.有锁?
2.如果有,如何看?
原文:http://www.cnblogs.com/julieyanghappy/p/4445167.html