表结构如下:
id name sid
1 aaa 1
2 aaa 2
3 bbb 3
4 bbb 4
5 ccc 5
id是主键。
sid是递增并且唯一的,但不是主键。
现有程序的做法是先select查询出最大得sid
然后在程序里加1,在insert插入数据库。
如果并发查询,再插入,sid就可能重复。有什么办法避免这种情况发生???
(数据库隔离级别设置的方法就不要考虑了。select加for update好像也不适用。)
by the way
insert into 表(table_name) values (select....)这种方式和上边说的那种方式一样吗???
补充下 也可以把唯一字段设置为候选码
这样只要处理错误操作即可
请参考锁表操作
每次添加前锁定操作表
[color=blue]sid可以用触发器来处理[/color]