第十一章SQL程序设计 锁 锁用来提供数据库的并发性控制。如果没有锁, SQLServer就没 有防止多个用户同时更新同一数据的机制。一个锁就是在多用户环境 中对某一种正在使用中的资源的一个限制,它阻止其他用户访问或修 改资源中的数据。 SQLServer为了保证用户操作的一致性,自动对资 源设置和释放锁。例如,当用户正在更新一个表时,没有任何其他用 户能修改甚至查看已经更新过的记录。当所有的与该用户相关的更新 操作都完成后,锁便会释放,并且记录变成可访问的。 通常, SQLServer中有三类锁: 共享锁:也称为读锁,是加在正在读取的数据上的。共享锁防止别的 用户在加锁的情况下修改该数据,共享锁和别的共享锁是相容的。 更新锁:和独占锁很相似,更新锁防止别人在改变数据的过程中修改 数据。 独占锁:当要改变数据时使用独占锁。它防止别的用户读取或修改正 在工作的数据。直到将锁释放为止,独占锁不与别的锁兼餮
第十一章 SQL程序设计 ❖ 锁 锁用来提供数据库的并发性控制。如果没有锁,SQL Server就没 有防止多个用户同时更新同一数据的机制。一个锁就是在多用户环境 中对某一种正在使用中的资源的一个限制,它阻止其他用户访问或修 改资源中的数据。SQL Server为了保证用户操作的一致性,自动对资 源设置和释放锁。例如,当用户正在更新一个表时,没有任何其他用 户能修改甚至查看已经更新过的记录。当所有的与该用户相关的更新 操作都完成后,锁便会释放,并且记录变成可访问的。 通常,SQL Server中有三类锁: 共享锁:也称为读锁,是加在正在读取的数据上的。共享锁防止别的 用户在加锁的情况下修改该数据,共享锁和别的共享锁是相容的。 更新锁:和独占锁很相似,更新锁防止别人在改变数据的过程中修改 数据。 独占锁:当要改变数据时使用独占锁。它防止别的用户读取或修改正 在工作的数据。直到将锁释放为止,独占锁不与别的锁兼容
第十一章SQL程序设计 编写有效的事务 在实际程序设计和管理过程中,应尽可能使事务保持简短,以减少 并发连接间的资源锁定争夺。在有少量用户的系统中,运行时间长 效率低的事务可能不会成为问题,但是在拥有成千上万用户的大型数 据库系统中,这样的事务将导致无法预知的后果。设计时,需要遵循 以下原则: 不要在事务处理期间要求用户输入。 在事务启动之前,获得所有需要的用户输入。 在浏览数据时,尽量不要打开事务。 在所有预备的数据分析完成之前,不应启动事务。 保持事务尽可能简短。 在知道了必须要进行的修改之后,启动事务,执行修改语句,然后立即提交 或回滚。只有在需要时,才打开事务。 灵活使用更低的事务隔离级别。 灵活地使用更低的游标并发选项。 在事务中尽量使访问的数据量最小 尽量减少锁定的行数,从而减少事务之间的争夺。 小心地管理隐性事务,以便避免并发问题
第十一章 SQL程序设计 ❖ 编写有效的事务 在实际程序设计和管理过程中,应尽可能使事务保持简短,以减少 并发连接间的资源锁定争夺。在有少量用户的系统中,运行时间长、 效率低的事务可能不会成为问题,但是在拥有成千上万用户的大型数 据库系统中,这样的事务将导致无法预知的后果。设计时,需要遵循 以下原则: 不要在事务处理期间要求用户输入。 在事务启动之前,获得所有需要的用户输入。 在浏览数据时,尽量不要打开事务。 在所有预备的数据分析完成之前,不应启动事务。 保持事务尽可能简短。 在知道了必须要进行的修改之后,启动事务,执行修改语句,然后立即提交 或回滚。只有在需要时,才打开事务。 灵活使用更低的事务隔离级别。 灵活地使用更低的游标并发选项。 在事务中尽量使访问的数据量最小。 尽量减少锁定的行数,从而减少事务之间的争夺。 小心地管理隐性事务,以便避免并发问题