1,第一个问题我不清楚。
2,第二个问题我不明确。
3,第三个问题我很负责任的告诉你ROLLBACK的功能是 "清除自事务的起点或到某个保存点所做的所有数据修改并释放由事务控制的资源".MS没有告诉你他还有相当于return或其它语言中exit,quit,end之类的功能。
2,第二个问题我不明确。
3,第三个问题我很负责任的告诉你ROLLBACK的功能是 "清除自事务的起点或到某个保存点所做的所有数据修改并释放由事务控制的资源".MS没有告诉你他还有相当于return或其它语言中exit,quit,end之类的功能。
解决方案 »
- 设置主键 无法创建索引“PK_info_supply”。
- 怎么查找出这种0000001的最大号。
- 为什么我这个stored procedure执行后返回的是空表格,请大家帮我看看吧
- 触发器执行后,主动触发的表怎么没有更新?
- 在存储过程中 如何写 if else 这样的语句。 有几种方法 实现 流程语句
- 55555...我的SQL数据库出大问题了!。。。
- 求救SQLservr.exe和w3wp.exe两个进程严重吃内存和CPU
- SQLTables, SQLColumns究竟做了什么?(100分)
- sql 2000 被注入js代码问题
- 写好的一个创建数据库的SQL语句,怎样在SQL SERVER2000下运行并建立一个数据库?
- 分组查询后 想在每个分组的开始加上分组的标题 标题是分组纪录的一个叫title 的字段
- 我执行一段有大量循环的delphi程序,服务器cpu占用率为15%,内存占用也不多,别的程序在查询时就出现超时已过期,请问怎么解决
并发现象,数据库的并发和我们对数据库操作的并发好象不大一样。至少数据库在操作时会把表锁住,同一刻只有一个进程在操作啊。你所说的并发是同时对数据库进行修改,比如。
表XX有字段yy,zz
update XX set yy=1 where zz=1;而另一个用户却是
update XX set yy=2 where zz=1;那么第一个修改就被覆盖掉了,这样的并发吧?
但其实,在控制“并发”这样的方面,我们应该使用
update xx set yy=1 where yy=?? and zz=??
但第一次修改时,第二次就没有用了。为什么,因为yy已经不同了,所以就有效的控制了,你如果熟悉pb的数据窗口就知道了,第二次操作是脏数据了!!第二,
你的错误我在第一点有提到一些,
其实并发是靠我们去控制的,数据库不能避免的。比如上面的例子:
表XX有字段yy,zz
update XX set yy=1 where zz=1;
update XX set yy=2 where zz=1;
同时运行这两个命令,你说数据库怎么做呢?他会说是并发了,我不干了吗?
如果他不干了,这个数据库有什么价值??
不要把所有的责任都推向数据库,并发控制靠自己。
第三,
第三,对于Rollbakck Transaction操作,是不是执行到该语句后,它后面的语句还是要继续执行吗?是不是像return那样就停止后面的语句了?
---------------------------------
Rollbakck Transaction操作只是返回上次提交到这里对数据库的修改,而不是结束操作,所以还继续运行
每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。 脏读
当第二个事务选择其它事务正在更新的行时,会发生未确认的相关性问题。
第二个事务正在读取的数据还没有确认并且可能由更新此行的事务所更改。 不可重复读 当第二个事务多次访问同一行而且每次读取不同的数据时,会发生不一致的分析问题。
不一致的分析与未确认的相关性类似,因为其它事务也是正在更改第二个事务正在读取的数据。
然而,在不一致的分析中,第二个事务读取的数据是由已进行了更改的事务提交的。而且,不一致的分析涉及多次(两次或更多)读取同一行,而且每次信息都由其它事务更改;因而该行被非重复读取。 幻像读 当对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,会发生幻像读问题。
事务第一次读的行范围显示出其中一行已不复存在于第二次读或后续读中,因为该行已被其它事务删除。同样,由于其它事务的插入操作,事务的第二次或后续读显示有一行已不存在于原始读中。
这些原理感觉都说的有点概念化,具体到sql语句或例子中,如何说明?我感觉我程序的原因很可能是"幻像读"这一点,如果别的没时间解释,这一点能不能具体说一下或用例子说明都行,原理太抽象了,谢谢了.
你查的资料上面说的比较清楚了,
http://www.daima.com.cn/Info/33/Info32849/
这有例子,你看一下吧
现在库里有20个货物,终端a卖出去一个,那么他读出20,然后卖出一个,然后20-1=19,把19写会数据库
在终端a读出数据还没有写回去的时候,终端b也卖了一个,由于19没写回去,那么他读出20,卖了一个,20-1=19,写会数据库
虽然卖出了2个,可是数据确是19。
所以并发有时候是要在写代码的时候来控制的,数据库只能是控制你的操作级的并发。