Sql数据库操作的问题

来源:百度知道 编辑:UC知道 时间:2024/05/06 11:28:13
小弟正在做的一个项目,有很多用户可能同时对一个表进行修改,例如:用户一预订了A车的第20个座位(总共只有20个座位),但几乎同时,用户二也预定了A车的座位,这就产生一个矛盾,因为没有座位了,但是两个用户还在为座位是谁的而争吵
如何让一个用户在修改该表时,其他用户不能修改,只能排在队列中,等用户一走了,再进行修改,我是用c#来做的,希望给点提示,谢谢。
请问,是不是采用事务之后,就可以防止两个用户同时预订座位的冲突?

用数据库事务控制

private IDataAccess _da; // 数据库访问接口
private IDbTransaction _tran; // 数据库事务控制
this._tran = this._da.BeginTransaction();
这里执行预订操作
this._tran.Rollback();

请问,是不是采用事务之后,就可以防止两个用户同时预订座位的冲突?
==========>
是的,预订座位的时候在数据库中插入记录的顺序总是有先后的,启用数据库事务以后,数据库插入这条数据时就会锁定,如果插入失败数据就会回滚,插入失败则预订没有成功。

1、简单的方法是对表加锁(古老的方法)。
2、自动排号,申请时就预置为占用。
3、记录级加锁。

自动排号较好。

用户一预订了A车的第20个座位(总共只有20个座位),但几乎同时,用户二也预定了A车的座位,
方法很多:1如果说预定座位在你的db操作中是一个insert操作的话
其实只要控制好表中的联合唯一健就可以了比如说车号+座位号这个应该是唯一的吧,也就是说在你这个表中这2个字断是联合唯一的,建立联合唯一健的方法在sql的managerment studio中建立表的index的地方把几个字段都添加近来,然后设置成unique就可以了,这样的话当你insert的时候同一个车号+座位号的数据插入时,自动就会报错。可以不用事务
如果你建立的表没有那么多限制的话就必须要用事务了,方法如xhbgq 所说

c#中带有事务处理,可以查阅相关资料。