db2插入数据失败

使用db2,手动insert语句的时候,报如下错误:

DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=2 。

开始在网上找解决方法,以下网上的解决方法总结(事实上并没有解决我的问题):

第一种解决:

1、查了下,大概意思是违反了唯一性约束啊!
2、不过,我db2 describe table XX后发现这个表只有ID是不能为空的啊!
3、最后,直接写了条SQL在命令行执行,同样的错和代码
最后,我查了下表的索引,发现建了个组合索引,才恍然大悟。
原来,DBA昨天建了唯一性约束和索引导致的!
虽然describe出来只有ID不能为空,但是加了唯一性约束和索引后导致不能插入数据。

第二种解决:

[BUG]:ERROR [23505] [IBM][DB2/AIX64] SQL0803N INSERT 语句、UPDATE 语句或由 DELETE 语句导致的外键更新中的一个或多个值无效,因为由 "2" 标识的主键、唯一约束或者唯一索引将表 "XXX" 的索引键限制为不能具有重复值。 SQLSTATE=23505
今天在对数据库进行操作时一直报此问题,导致数据的某个表只能插入一条数据。略查了一下原来是违反了唯一约束。
23505 发生由唯一索引或唯一约束强加的约束违例。

违反了唯一约束,这时候应该看一下主键、索引等。后来发现是一个索引建成了Unique,即唯一索引,但是在插入数据的时候,这个唯一索引并没有赋值,均为空,所以报错。

[解决方法:]将唯一索引更改成普通索引即可。

我自己的解决方法:

外键问题,先在其他表添加数据,再在该表添加数据。

时间: 2024-09-29 09:17:56

db2插入数据失败的相关文章

AGS中通过FeatureServer插入数据失败、插入数据在WMTS请求中无法显示以及version概念的讨论

1.背景 在多个项目中,当我方接口给其他部门人员使用时出现了插入数据失败或者插入的数据在WMTS请求中无法显示出来的问题.针对这些问题,我在这篇文章中,将详细描述造成以上问题的原因.在此WebGIS产品的前台和后台接口中,此插入数据核心部分均是FeatureServer请求.所以我们首先对FeatureSever服务做一个大致的了解. 2.FeatureServer服务的大致了解 2.1 FeatureServer服务提供的功能 FeatureServer服务可以提供如下几种服务: 我们可以得出

当插入数据失败时,防止mysql自增长字段的自增长的方法

问题描述: 当mysql设置了自增长字段时(注意:一个表中只能设置一个自增长字段,可以不是主键,但必须是键 ),如果插入数据失败,那么自增长字段仍然会占用这个自增长值,再次成功插入数据时就会造成断层. 原因: 自增是缓存在内存字典中的,分配方式是先预留,然后再插入的.所以插入失败不会回滚内存字典. 解决方法: 在php程序中可以加一段代码,当插入数据失败时,执行sql语句重新设置auto_increment的值: $sql = alter table `tbname` auto_incremen

浅析常用STL中容器插入数据失败

昨天在上班的时候,碰到一个问题,关于 STL常用容器插入数据失败. 问题详细:在一个类构造函数填零后,那么map list 插入数据失败了,但是vector不会.测试代码如下: class Test { public: Test(){memset(this,0,sizeof(*this));} void InsertElement(){m_map.insert(std::make_pair(1,1)); } void InsetElement_vector(){ m_vector.push_ba

mysql 插入数据失败防止自增长主键增长的方法

mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说mysql插入数据失败,怎么能防止主键增长? MYSQL不保证AUTO_INCREMENT依次增长(1,2,3,4,5),但是可以保证正向增长(1,3,5,9)所以,当你某次操作失败后,下次AUTO_INCREMENT就不是顺序的了. innodb的自增是缓存在内存字典中的,分配方式是先预留,然后再

php笔记七:php操作MySQL表格(插入数据)

1.用到的SQL语句 INSERT INTO 表名 (字段列表) VALUES (值列表),(值列表)... ; 注意: 1).字段列表要和值列表对应 2).当向表中的所有字段插入数据时,可以将字段列表省略 2.例子: <?php //向表中插入数据 //包含连接数据库文件(两种方法,require比include更加严格,如果路径不对会报严重错误) //include 'conn.php'; require 'conn.php'; //拼装插入数据的SQL语句 $sql = "INSER

插入数据:insert,replace

*insert高级用法* 1.语法:insert into tbname(字段列表) values 值列表; 1.1可以不将所有的字段都插入数据.如果说需要完成部分字段的插入,需要必须存在字段列表. 没有插入的字段,使用默认值填充. insert into a_table (name) values ('jack'); 1.2如果插入部分字段,可以使用下面的set语句,不同字段用逗号隔开: insert into a_table set a_id=7,a_name='rose'; 1.3值列表的

使用pdo,使用pdo无法插入数据怎么办

如果你使用了最新版的XAMPP,那么你几乎不用改变php.ini的设置,就可以使用pdo but,插了一晚上,程序既不报错也不插入数据,真是气死人,后来发现是实例化pdo对象的时候没有指定字符集.所以一定设定字符集属性,否则极有可能插入数据失败 一个插入多条数据的例子(用到了事务) <?php $dbtype = 'mysql'; $dbname = 'olddream'; $user = "root"; $pwd = "wenwajiao"; $ip='12

关于oracle批量插入数据遇到的问题

截取部分日志信息: 2015-09-01 14:48:47,132 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]2015-09-01 14:48:47,178 INFO [org.spr

批处理数据--db2备份数据

如果要插入数据,前提先根据主键删除记录,然后在插入. 批处理包含两个必要文件 init.bat和start.bat 文档内容如下 init.bat内容如下 @echo ondb2 connect to cashman user db2inst1 using '1qaz!QAZ'db2 set schema db2inst1db2 [email protected] -vf update.sql>log.txt   //将执行结果输出到log.txtdb2 [email protected] -v