关于SQL Server死锁
transaction 1:
------------------------------------------------------
begin transaction
update table1 set cola = 'str1'
Waitfor time '10:12:00'
update table2 set colb = 'str2'
rollback transaction
transaction 2:
------------------------------------------------------
begin transaction
update table2 set colb = 'str2'
Waitfor time '10:12:00'
update table1 set cola = 'str1'
rollback transaction
同时运行这两个事务,将导致死锁。(先创建table1和table2,并插入一些值;waitfor time 适当修改)
SQL Server本身会处理死锁,通过选择一个死锁牺牲品,回滚死锁牺牲品的事务,来避免死锁。
SQL Server在上面这两个事务中自动选择一个作为死锁牺牲品,该事务将收到如下消息:
------------------------------------------------------
Msg 1205, Level 13, State 56, Line 7
事务(进程 ID 52)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
SQL Server选择死锁牺牲品根据的是代价最小原则,用户也可以通过设置DEADLOCK_PRIORITY选项进行干预。
例如,在事务1 set DEADLOCK_PRIORITY low,在事务2 set DEADLOCK_PRIORITY high,则发生死锁时SQL Server将选择事务1作为死锁牺牲品。
如何避免死锁:
1. 多个并发事务按照同样的顺序访问对象
2. 在事务中避免用户交互
3. 尽量缩短事务的执行时间,客户端不应把一个事务分成多次发送。
4. 设置更低的隔离级别
5. 使用捆绑连接
相关文档:
列出TableA中有的而TableB中没有, 以及B中有而A中没有的记录:
其中两个表的结构相同,选择的Key可以多个
Select Key from
( select * from TableA
Union select * from TableB
)
group by Key
having count(Key)=1
列出TableA中有的而TableB中没有的记录:
Select Key from
( (select * from TableA
Un ......
Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表
问题:
1、查询“”课程比“”课程成绩高的所有学生的学号;
SELECT a.S# from (SELECT s#,score from SC WHERE C#='001') a,
(SELECT s#,score fr ......
怎么增加SQL Server连接数
1. 看操作平台的連接數是多少
控制台的授權看看
2. 進GENERAL看看SQL SERVER USERS CONNECTIONS
增大即可
sp_configure 'number of connection'
go ......
在有关数据库的项目开发中,编码,bug修改等等,都需要查看操作相关的SQL文,如果SQL文比较复杂的话,我们自己排版非常麻烦,同时也很花费时间。可能有的公司自己开发了格式化工具或者购买了格式化工具软件。有了格式工具我们就节省了排版时间。
介绍一下SQLinFormpro_Desktop(htt ......
----start
在SQL语句中应该尽量避免使用OR,因为这样做会影响SQL语句的性能。考虑下面的情况:
CREATE TABLE USER
(
NAME VARCHAR(20) NOT NULL,---姓名
BIRTHDAY DATE---生日
);
现在有这样一个问题:让你查找一下生日是1949-10-1(共和国同龄人)或1978-12-18(十一届三中全会召开时间) ......