本章来源于csdn上网友的讨论。
问:不使用事务如何保证数据的一致性, 也没有说是MSSQL或是MySQL, WCF什么的,向各位请教一下如何解决这种问题?
答1:
首先,要不使用是很难的,因为成熟的RDBMS都内置有这个功能。
然后,如果你可以保证逻辑一致性,那不使用事务也可以。其实外键也能保持数据额一致性。
我觉得你的面试题可能主要集中在主键、外键、还有按顺序操作(这里可以避免死锁)。
甚至还要设计数据库设计,如果不使用事务,那你的范式估计要最起码的3NF了。
==================================================================================
答2:
对于完整性和一致性,看来不少人都混为一谈了。
完整性(integrity)更多是针对实际业务来说的,比如说一个职员ID,不能在一个表里是1,另一个表里却是2;数据库引擎一般通过主外键、
触发器等来维护完整性的。
一致性(consistency)是事务一个特征,要底层一点。举例来说,针对这个语句:update a set col1=1,col2=2 where id=1(更改一行数据的两列),数据库要保证在任何情况下,都绝不能出现只更改了col1,或只更改了col2的情况,这两列(col1和col2)要么一起被改,要么都没改。还包括内部的索引结构、内部数据字典等数据都要绝对保持一致。
补充一句,select,insert,update,delete 任何一个单独的t-sql语句,即便没有begin tran ,也是一个隐式的事务。
==================================================================================
答3:
事务如何保证数据的一致性?事务主要防止事情做一半吧:
必然转账:
1、给a账号减少100元
2、给b账号增加100元
如果只完成1就崩溃了,没有事务,就出现了帐不平。
==================================================================================
答4:
数据一致性不单单实体完整性和参照完整性两个方面,更重要或者说更难实现的是业务完整性,往往需要事务来保证。
提高设计的规范化可以减少对事务的依赖,比如减少了冗余,很多事务就不必要求了。但是不能完全消除事务,而且规范程度太高会影响其它方面。
触发器实际是事务性的,这里不知道是否算一个答案。
如果不使用事务,要想保证一致性我觉得唯一的方法是业务的冗余,就是处理一件事情用其它业务去校正。
==================================================================================
答5:
数据一致性和事务不是一回事。
数据一致性主要包括两个方面:实体完整性和参照完整性。
在表中定义主键的目的就是为了使数据库满足实体完整性。
在表间定义外键的目的就是为了使数据库满足参照完整性。
==================================================================================
答6:
主键、外键、触发器
主外键是数据库针对完整性的,这个应不是数据库一致性的范畴,和数据一致性没什么关系
其实触发器也是事务性的,只是比较特别,隐式的而已
==================================================================================T