在没有自动增量字段的数据库上的sql – AutoIncrement字段
在MS Sql Server中很容易创建自动增量字段.在我的系统中,我停止为主键使用自动增量字段,现在我使用Guid.这真的很棒,我有这么多的优势.但是在另一个非主要关键领域,我真的需要实现一个“软的自动增量”.这是因为我的系统是独立于数据库的,所以我在c#中以编程方式创建了autoinc值.
我想在自动增量的数据库上自动增量领域的解决方案,您使用的解决方案是什么?有一些Sql Ansi语句呢?并直接从我的c#生成,是一个更好的解决方案? PS:我知道从表中选择max(id)1不是真的并发友好… 解决方法生成唯一ID值的机制不能与事务隔离有关.这是数据库为每个客户端生成不同值所需要的,比SELECT MAX(id)1 FROM table的技巧更好,如果两个客户端尝试并发分配新的id值,则会导致竞争条件.您无法使用标准SQL查询模拟此操作(除非您使用表锁或可序列化的事务).它必须是内置到数据库引擎中的机制. 在SQL:2003之前,ANSI SQL没有描述为代理键生成唯一值的操作.在此之前,没有自动增加列的标准,所以几乎所有品牌的RDBMS都提供了一些专有的解决方案.当然,它们的变化很大,没有办法以简单,数据库独立的方式使用它们. > MySQL具有AUTO_INCREMENT列选项,或等同于BIGINT UNSIGNED AUTO_INCREMENT的SERIAL伪数据类型; 所有这些机制都在事务隔离之外运行,确保并发客户端获得唯一的值.在所有情况下,还有一种查询当前会话最近生成的值的方法.必须有,所以你可以使用它在子表中插入行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |