关于自增列引发的并发性问题
1、数据窗口提交时报sqlcode=-3 ;
2、对数据窗口中的数据进行修改或删除,后来却发现修改或删除到了其它的数据 ;
3、从数据窗口中取出自增列作为key进行其它操作,发现得到的数据并非自己想要的。
原因:
当一个数据窗口以自增列为key column,它在新增行后提交时,数据库产生一自增值,然后先写入数据库,再从数据库中提取出来放回datawindow,而提取的这个值是取最后生成的自增值,如果在产生与取回之间有其它的列插入,那么取值就会出错,并且是一种无法回避的错误。
解决方法:
1、将数据窗口的update属性为设为 “key and updateable columns”,数据不会被保存,但会出现“现象1”的问题,在并发性强的场合这种提示可用“频繁”来形容,很难被用户接受。
2、将数据窗口update属性为设为 “key”,数据可以被保存,但如果要在不重新retrive的情况下对datawindow中的数据进行操作的话,将出现“现象2”与“现象3”的问题;出现数据错误我想是每一个程序员都不能容忍的吧。
3、重新设计表结构与数据窗口,使用可控字段作为主键,能解决问题,但如果产品成型,改动太大。
4、……
还请大家一起来讨论有没有更好的解决办法。
相关推荐
深入探寻mysql自增列导致主键重复问题的原因
前几天开发的同事反馈一个利用load data infile命令导入数据主键冲突的问题,分析后确定这个问题可能是mysql的一个bug,这里提出来给大家分享下。以免以后有童鞋遇到类似问题百思不得其解,难以入眠,哈哈。
SqlServer Mysql数据库修改自增列的值及相应问题的解决方案
SQL Server 平台修改自增列值 由于之前处理过sql server数据库的迁移工作,尝试过其自增列值的变更,但是通过SQL 语句修改自增列值,是严格不允许的,直接报错(无法更新标识列 ‘自增列名称‘)。sql server我测试是2008、2012和2014,都不允许变更自增列值,我相信SQL Server 2005+的环境均不允许变更字段列值。 如果非要在SQL Server 平台修改自增列值的,那就手动需要自增列属性,然后修改该列值,修改成功后再手动添加自增列属性。如果在生成环境修改自增列的话,建议在空闲时间(零点以后,平台或网站使用的用户很少的时间段)来处理这类问题。数据量大
怎么重置mysql的自增列AUTO_INCREMENT初时值
重置 MySQL 自增列 AUTO_INCREMENT 初时值 注意, 使用以下任意方法都会将现有数据删除. 方法一: delete from tb1; ALTER TABLE tbl AUTO_INCREMENT = 100; (好处, 可以设置 AUTO_INCREMENT 为任意值开始) 提示:如果表列和数据很多, 速度会很慢, 如90多万条, 会在10分钟以上. 方法二: truncate tb1; (好处, 简单, AUTO_INCREMENT 值重新开始计数.) 怎么重置mysql的自增列 1. 支持设置自增列的值 ALTER TABLE table_name AUTO_INCRE
SQL SERVER 自增列
判断Table是否存在自增列(Identity column)
SQL Server 2008怎样添加自增列实现自增序号
在做《机房收费系统》的时候,有的表需要添加自增列,在添加新纪录时自动添加一个序号。下面我给大家介绍两种添加方法: 一、通过T-SQL代码. 代码如下: alter table 表名 add 列名 int IDENTITY(1,1) NOT NULL 这里用到了identity关键字:indentity(a,b),a b均为正整数,a表示开始数,b表示步长,indentity(1,1)就代表从1开始,每次增加1 二、通过企业管理器 打开对象资源管理器,新建表,如下图 插入列,设置列属性,标识增量为步长,标识种子为开始数,如下图 初学者,不当之处敬请批评指正!


数据库相关
