请教一个并发问题

假设现在有一个学生表,里面有3个字段 学生姓名,学生编码,班级。不同班级的学生编码可以重复,但是同一个班级的学生编码不能重复。学生可以添加修改删除。如果有两个人同时添加1班的编号为001的学生,如何防止编码重复的问题?
我的想法:
1.在添加学生的方法上加synchronized,但是这样的话添加其他班级的学生的时候就都会等待,效率会很低,而且在负载均衡的情况下也不会有用。
2.在数据库表上对班级和学生编码加上联合唯一约束,这个办法可以避免上面的问题,但是不知道效率如何,是不是主流方法。

在网上查了之后发现悲观锁乐观锁什么的,但是对于我这个场景貌似不是很适合。因为平时的业务对并发的要求不高,对这方面不是很擅长,想请教一下各位类似的场景是如何处理的。因为我比较笨,麻烦各位写的稍微详细一些,谢谢。

总会存在极端情况导致并发,所以选2,保证数据库数据唯一性。并且编号这种比较重要的属性一般采用按规则自动生成而不让用户自己填。

1 个赞

嗯,但是自动生成的话,除非唯一的uuid,否则总还是会出现并发问题的吧

联合索引。在插入/修改的时候。先读,判断是否重复。再插入/修改。