今天面试题: 
      不使用事务如何保证数据的一致性, 也没有说是MSSQL或是MySQL, WCF什么的,向各位请教一下如何解决这种问题?

解决方案 »

  1.   

    首先,要不使用是很难的,因为成熟的RDBMS都内置有这个功能。
    然后,如果你可以保证逻辑一致性,那不使用事务也可以。其实外键也能保持数据额一致性。
    我觉得你的面试题可能主要集中在主键、外键、还有按顺序操作(这里可以避免死锁)。
    甚至还要设计数据库设计,如果不使用事务,那你的范式估计要最起码的3NF了。
      

  2.   

    使用外键并使用insert和update规范
      

  3.   

    不使用事务,就是用人吧,比如
    一个操作逻辑有三件事
    1.1插入数据到a表(人1负责)
    1.2更新数据到b表(人2负责)
    1.3删除数据到c表(人3负责)
    总控(人4)那么使用4个人来监控呵呵~~
      

  4.   

    对于完整性和一致性,看来不少人都混为一谈了。(PS:这个面试官估计也把两者搞混了,呵呵)完整性(integrity)更多是针对实际业务来说的,比如说一个职员ID,不能在一个表里是1,另一个表里却是2;数据库引擎一般通过主外键、触发器等来维护完整性的。一致性(consistency)是事务一个特征,要底层一点。举例来说,针对这个语句:update a set col1=1,col2=2 where id=1(更改一行数据的两列),数据库要保证在任何情况下,都绝不能出现只更改了col1,或只更改了col2的情况,这两列(col1和col2)要么一起被改,要么都没改。还包括内部的索引结构、内部数据字典等数据都要绝对保持一致。
      

  5.   


    赞同!补充一句,select,insert,update,delete 任何一个单独的t-sql语句,即便没有begin tran ,也是一个隐式的事务。如果真正意义上的不用事务了。 还真是不知道数据库该咋干活....
      

  6.   


    他是在考你NOSQL的CAP原则么?感觉像是
      

  7.   

    存储过程可以完成,但是必须保证数据类型不会被自动转化,比如一个列(int类型的),你给值'123456',sql 2005会把'123456'自动转化成123456的,这时候就会出错
      

  8.   

    如果是非分布式的系统的话,建议用command模式如果是分布式的话http://rdc.taobao.com/blog/cs/?p=671 可以看看这个文章其实楼主的问题是很现实的,比如说淘宝系统 如果采用数据库事务 整体的效率就会很糟糕了,避免使用数据库内部机制进行处理是很多超大并发网站采用的必然手段
      

  9.   

    隔离级别: 悲观并发和乐观并发区别在于读锁是不是影响写锁,如果影响就是悲观并发,如果不影响就是乐观并发.
    其实最简单的说就是 在不同的隔离级别上select 操作上什么锁, 这个锁持续到什么时间,,是读完一条释放一条..还是一直持续到事务结束... 
    读未提交  没有加共享锁而是加的模式锁,所以我们认为他上乐观并发,
    读提交    有加共享锁,共享锁是读完一条释放一条,我们认为他是悲观并发.
    可重复读  有加共享锁,共享锁持续到事务结束..我们认为他是悲观并发.
    可序列化
    行版本控制已提交读
    快照              这都不写 了..你懂的...这是楼上的问题..楼主的问题很简单
    1. 隔离级别
    2. 我完全读的时候不让写.. select * from dbo.student with(updlock) 
    --这就是表锁, 其他人只能读修改不了这不了,这不就数据完整了吗? 
      

  10.   

    我估计面试官是想考NOSQL的知识,否则就是装了。
      

  11.   

    如果用是用java在操作数据的话,也不难,流程控制一下就行了。如果是在数据里,那就不了解了
      

  12.   

    使用外键并使用insert和update规范
      

  13.   

    数据的一致性, 也没有说是MSSQL或是
      

  14.   

    set up your isolation to "series" level, which downgrade ur performance on the other hand
      

  15.   

    使用分布式事务. 
    如果是不支持分布式事务的数据库, 则需要手工做事务控制, 或是换一个支持的吧...或者, 修改数据的动作在应用层完成(数据cache在应用层, 数据检查均在应用层完成...).
      

  16.   

    时间戳
    比如有两张表a,表b.
    每张表建立个时间戳,正常情况下他们两个的时间戳是一致的,如果a表被更新但是b表没有被更新的话这两张表的时间戳不同