怎样避免插入的数据重复??

表结构如下:
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]