在我的ORM中,一个最大的问题就是怎么去模拟自增主键,因为ORM中的主键是程序控制的。
1.select max(col) from table
这种方法肯定不行,一出现并发就完蛋了。如果在程序里面做循环直到插入成功,那么逻辑就会非常的烦。。
2.添加一张专门保存主键的表,每次先更新再读取。使用事务控制并发
GO
BEGIN TRANSACTION
SELECT @MaxID = MAX_ID FROM CASSABA WHERE CATEGORY = @CATEGORY
UPDATE CASSABA SET MAX_ID = @MaxID + 1 WHERE CATEGORY = @CATEGORY
COMMIT TRANSACTION
相信第二种方法是可行的。
reference:
http://blog.csdn.net/cassaba/archive/2006/11/29/1419798.aspx