表里有个非主键,但业务上不能重复字段,在新增一条记录时,目前的做法是先根据这个字段select一下,如果有值就返回错误消息,如果没有值就插入一条(这里先假定插入时主键不会重复)。 |
|
#1 |
唯一键约束
参考http://bbs.csdn.net/topics/350087351 |
#2 |
回复1楼: 设置成unique我知道的,如果我不想改数据库的设置,希望通过前台判断呢? |
#3 |
回复2楼: 说错,不是前台,一般是后台判断,不过问题如我之前描述。 |
#4 |
同时操作且字段重复的概率是非常小的吧
|
20分
#5 |
这个一般在数据库解决是最保险的,由程序控制会有各种漏洞
for update 因为这是插入,所以select for update不好解决,除非你锁整张表,否则你是阻止不了另外的线程插入新的数据,且当前线程 查询不到这条数据。 java锁:应用在非集群的情况下,用java的锁来解决这个问题 我遇到这个问题的一般解决方案是在前端,在插入前先做一个判断,这里主要是为了体验 |
#6 |
回复5楼: java锁:应用在非集群的情况下,用java的锁来解决这个问题 我现在也觉得数据库设置唯一比较保险,逻辑控制的话除非全锁,不然怎么都会有漏洞,而且判断太多的话还降低效率。 |
#7 |
回复6楼: java有同步锁,这样所有竞争的请求就会是排队 |