这有点类似于以下问题:
由于唯一约束,PHP MySQL INSERT失败
但我有一个不同的转折。假设我有一个只有一列的表。该列的名称为“标题”,并且具有唯一的约束。
首先,我在title =“
something”处插入一行。下次我尝试插入“某物”时,它将由于唯一的键约束而失败(很好)。我想做的是让它失败,并检查mysql提供的错误代码,以确保由于唯一键约束而失败。(即,让数据库处理唯一性,而我只处理错误代码,并在结果返回时告诉用户标题已经存在)。
有没有办法做到这一点?
http://dev.mysql.com/doc/refman/5.5/zh-CN/error-messages-
server.html
http://php.net/manual/zh/function.mysql-
errno.php
过去我不得不这样做,这很不好玩:
if( mysql_errno() == 1062) {
// Duplicate key
} else {
// ZOMGFAILURE
}
在编程风格的注意事项
(现金到jensgram从这个答案)
你应该总是设法避免使用幻数。相反,您可以将已知的错误代码(1062
)分配给常量(例如MYSQL_CODE_DUPLICATE_KEY
)。这将使您的代码更易于维护,因为if
当1062
内存中的含义消失了几个月后,语句中的条件仍然可读:
ORA-00001:违反唯一约束(DatabaseName.Constraint1) 这是否是因为insert all执行同步插入而序列没有增加?我尝试使用Insert ALL仅用于新的插入(不是从源表复制到目标表),我不想对每一行使用Insert query。这是我在尝试的一种研究。
我运行的是JBoss EAP 7服务器和Oracle 11g数据库,以及Hibernate for JPA。我注意到一些奇怪的事情。当我第一次创建数据库并启动服务器时,一切正常。我从客户端发送请求,服务器将数据保存在数据库中。 如果我重新启动服务器并尝试这样做,我会为每个请求得到一个唯一的违反约束的异常: 我用下面的查询检查了sqlplus中的约束。(如果重要的话,我以系统用户的身份运行查询,而不
我正试图插入数据库,但我在日志上看到了这样的消息: 我找到了这个查询以获取违反的密钥:
我想知道对于这些类型的多线程场景是否有更可靠的锁处理。或者我需要添加一些东西来修复我的约束违规。 非常感谢。
以下是SQL部分,我在调试代码时出错: ORA-00001:唯一约束主键违反T_LIAV_AGENT_STATE_APPROVAL... 这是主键约束依赖的2列AV_NAME_ID,AV_STATE... 我没有重复的数据...你认为还有其他原因吗?