日期:2014-05-17  浏览次数:20527 次

请教关于多人同时向一张表插入数据保证数据唯一性的问题。
现在有一张表People,结构如下:
id varchar(50) 主键
name varchar(50) 姓名
cardID varchar(50) 身份证号

在插入数据的时候会首先在表里面查询身份证是否已经存在,如果存在就不插入进去。现在一个人批量向表里面插入没有问题,但是如果多个人同时向表里面导入的话就可能出现重复的数据。
我想怎么进行控制,一个人在操作表的时候防止其他人也操作表。从而达到不会出现多人同时导入相同数据的情况。


------解决方案--------------------
把锁升级为PAG锁或者TAB锁
提高隔离级别
------解决方案--------------------
alter table student add constraint un_name unique(name) --表STUDENT,唯一列为NAME



一个人在操作表的时候防止其他人也操作表。从而达到不会出现多人同时导入相同数据的情况 ====>>>>

数据库会自行解决的。。你不用担心,你只要按数据库的约束设置即可
------解决方案--------------------
DECLARE @str int
select @str=count(*) from People where name ='xxxx' and cardID='xxxxxx'
if(@str > 0)
begin
--插入语句
end

把你得添加写成这样的 可以确保完全不可能有重复的出现
------解决方案--------------------
双主键
------解决方案--------------------
id varchar(50) 主键
cardID varchar(50) 身份证号
----------------------------------------
双主键



如果我要给身份证和姓名都设置约束,当两个都一样的时候就不能插入可以吗,具体怎么设置
----------------------------------------
这个需求应该说不符合客观现实,一个身份证号,不可能有两个姓名。
------解决方案--------------------
事务 
防止数据重复的话 用复合主键.
------解决方案--------------------
复合主键(id,cardID )或者在用select语句判断