万一有同时插入数据的这种情况,怎么办?

youlostme 2010-11-11 11:35:51
比如,2个员工在各自的电脑上面添加商品的数据。他们要按照编码的顺序添加。

目前数据库的编码到了100这里了,而他们彼此之间都不知道另外一个人也在添加数据。所以,他们在各自的界面中,输入的编码都是101.

程序本身会判断这个编码是否在数据库中,如果有,就不会让数据插入。如果这2个人不是在同一时间插入的话,没问题,其中一个后添加到人,会提示修改编码。

但是万一,这2个人在同一时刻同一秒同时点击了添加的话。我不知道数据库会有什么反应。没做过这方面的测试。

虽说是概率很小,但也可能会出现。

那么,如何处理这个问题呢?
...全文
220 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
caosir157880 2010-11-17
  • 打赏
  • 举报
回复
将编号作为唯一主键,提交时验证就可以了
oxhead_lzp 2010-11-16
  • 打赏
  • 举报
回复
方法很多,是不是用锁要看你的应用,前面说的都是办法。
scfanxzq 2010-11-16
  • 打赏
  • 举报
回复
如果确定不能用自增来解决,那么最省心的就是保存之前,先对目标表加上一个排他锁,然后看这里面的最大编号是多少,就像上面一个人说的,没有绝对的并发,总是有先后的,即使是绝对同一时刻点击的保存按钮,也会因为电脑本身以及网络原因,造成有先后顺序,因此,只要存在排它锁,就可以保证同一时刻只有一个人能够读取和修改表
cohye 2010-11-16
  • 打赏
  • 举报
回复
锁机制
自增列
账号唯一性管理
youlostme 2010-11-16
  • 打赏
  • 举报
回复
谢谢大家
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 andylist 的回复:]
不用高深的什么锁,因为我不懂。
在保存前先搜一下数据库,如果存在该编码就终止,不然再保存就行了。
[/Quote]
锁很高深么?
select * from table with tablockx 为表table开启排它锁
husion01 2010-11-13
  • 打赏
  • 举报
回复
关注...
dmate 2010-11-12
  • 打赏
  • 举报
回复
数据库唯一约束
xjq2003 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lyhoo163 的回复:]
1、每次插入,都有先后秩序,没有真正的并发,可量化在微秒级。
2、数据库自带了互斥的功能,内部队列排除机制,达到先后分别执行不同的操作。
3、在自己的插入语句中,首先检查是否有该行数据(ID),无就插入,有就更新。

这样,就无扰了。
[/Quote]
lyhoo163 2010-11-12
  • 打赏
  • 举报
回复
1、每次插入,都有先后秩序,没有真正的并发,可量化在微秒级。
2、数据库自带了互斥的功能,内部队列排除机制,达到先后分别执行不同的操作。
3、在自己的插入语句中,首先检查是否有该行数据(ID),无就插入,有就更新。

这样,就无扰了。
somemak 2010-11-12
  • 打赏
  • 举报
回复
A:
1.建立一个存放编号的表,只需存放编号的最大值。
2.在添加新编号时锁表,直到新编号正确存入时再解锁。(锁为不可读)
3.在添加新编号处理异常,

B:
将编号作为唯一主键,主键冲突由数据库自己处理。

A是冲突前做好判断,防止冲突;B是冲突发生后将后添加的数据取消。
andylist 2010-11-12
  • 打赏
  • 举报
回复
不用高深的什么锁,因为我不懂。
在保存前先搜一下数据库,如果存在该编码就终止,不然再保存就行了。
learning8899 2010-11-12
  • 打赏
  • 举报
回复
唯一性约束
liangpei2008 2010-11-11
  • 打赏
  • 举报
回复
搞一个自增列不就行了,自增列是DBMS自己进行维护的
火龙岛主 2010-11-11
  • 打赏
  • 举报
回复
使用锁机制
luohao14789 2010-11-11
  • 打赏
  • 举报
回复
数据库好像都自带了互斥的功能吧
继续关注中……
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 smallhand 的回复:]
使用锁机制
[/Quote]
+1,这种很容易并发的操作最好写成存储过程,在存储过程中开始事务使用排它锁禁止读或写数据。
阿三 2010-11-11
  • 打赏
  • 举报
回复
1.将这个字段设置为主键.
2.设置为自增
vision2000 2010-11-11
  • 打赏
  • 举报
回复
程序本身会判断这个编码是否在数据库中,如果有,就不会让数据插入。

2个人同时提交在程序看来也有个先后,没有真正的并发
可以在同一事务内先锁表,判断是否存在,再插入,再解锁
kye_jufei 2010-11-11
  • 打赏
  • 举报
回复
自增列,鎖機制。。。
加载更多回复(1)

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧