当前位置: 代码迷 >> Sql Server >> sql并发查询的有关问题
  详细解决方案

sql并发查询的有关问题

热度:18   发布时间:2016-04-24 09:30:17.0
sql并发查询的问题
一个表 testTable,表中只有一列testNumber,数字型。
程序功能:插入1000条记录,从1到1000,不能有重复的数字。
实现方法:
        从1到1000循环, 查询表中有没有当前的循环值,如果没有就插入。

       实现此功能实际上是有两条sql语句,
      一条是查询 select * from testTable where testNumber=5
     一条是插入语句 insert into testTable(testNumber) values(5),  如果查询返是没有才执行。
        
程序在一台终端上运行完全没有问题。 

但是如果在两台终端上同时运行此程序就会出现问题了。 插入的记录还是1000条,但是数字不是连续的,中间会有一此数字是重复的。

经过分析发现问题是这样的: 
      4个动作
      1   sql服务器执行了A终端的查询语句,返回了false给A终端
       2  sql服务器执行了B终端的查询语句,返回了false给B终端
       3  sql服务器执行了A终端的插入语句。
       4  sql服务器执行了B终端的插入语句。
所以表中就会出现重复的数字。


怎么样才能让sql执行完动作1后,接着执行动作 3。 就是说查询和插入这两个动作不要被打断(不使用存储过程)?


       
        
------解决思路----------------------
那就不要分两句执行,直接执行一次
INSERT INTO testTable(testNumber)
SELECT 5
WHERE NOT EXISTS
(SELECT 1 FROM testTable WHERE testNumber=5)

------解决思路----------------------
在testNumber上建唯一索引。
程序不判断直接进行插入,忽略索引重复的错误。

大数据时用索引去重复比较快。
  相关解决方案