标签: unique-constraint

如何在rails上使ruby处理来自MySQL的重复记录错误

我的数据库上有多个字段的唯一索引.因此,如果您尝试在重复记录上调用save,它会引发ActiveRecord :: StatementInvalid并显示mysql错误.有没有办法通过创建唯一约束来在rails中处理这个问题,或者在发生这种情况时让它返回相关的错误消息?

继承人追踪:

ActiveRecord::StatementInvalid: Mysql::Error: Duplicate entry '2010-12-09-2-0-1-1' for key 2: INSERT INTO `entries` (`rejected_at`, `created_at`, `comments`, `overtime`, `submitted_at`, `updated_at`, `time`, `approved`, `day`, `user_id`, `approved_at`, `job_id`, `submitted`, `rejected`) VALUES(NULL, '2010-12-09 21:50:46', NULL, 0, NULL, '2010-12-09 21:50:46', 2.0, NULL, '2010-12-09', 1, NULL, 1, NULL, NULL)
 from /home/cmatthews/src/cannon/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:219:in `log'
 from /home/cmatthews/src/cannon/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:319:in `execute'
 from /home/cmatthews/src/cannon/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:259:in `insert_sql'
 from /home/cmatthews/src/cannon/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:329:in `insert_sql'
 from /home/cmatthews/src/cannon/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:44:in `insert_without_query_dirty'
 from /home/cmatthews/src/cannon/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:18:in `insert'
 from /home/cmatthews/src/cannon/vendor/rails/activerecord/lib/active_record/base.rb:2901:in `create_without_timestamps'
 from /home/cmatthews/src/cannon/vendor/rails/activerecord/lib/active_record/timestamp.rb:53:in `create_without_callbacks'
 from /home/cmatthews/src/cannon/vendor/rails/activerecord/lib/active_record/callbacks.rb:266:in `create'
 from /home/cmatthews/src/cannon/vendor/rails/activerecord/lib/active_record/base.rb:2867:in `create_or_update_without_callbacks'
 from /home/cmatthews/src/cannon/vendor/rails/activerecord/lib/active_record/callbacks.rb:250:in `create_or_update'
 from /home/cmatthews/src/cannon/vendor/rails/activerecord/lib/active_record/base.rb:2538:in …
Run Code Online (Sandbox Code Playgroud)

ruby mysql ruby-on-rails insert unique-constraint

10
推荐指数
2
解决办法
1万
查看次数

在两个varchar字段上创建Unqiue不区分大小写的约束

在Oracle 10g中,如何在两个varchar字段上添加唯一的不区分大小写的约束?例如,给定表中已有​​的以下记录:

"Stephen", "Swensen"
"John", "Smith"
Run Code Online (Sandbox Code Playgroud)

以下插入无效:

"stephen", "Swensen"
"John", "smith"
"stephen", "swensen"
Run Code Online (Sandbox Code Playgroud)

但是以下插入是有效的:

"Stephen", "Smith"
"John", "Swensen"
Run Code Online (Sandbox Code Playgroud)

sql oracle10g unique-constraint

9
推荐指数
2
解决办法
9666
查看次数

如何在ormlite中执行多列唯一约束(SQLite)

我正在使用Android的ormlite,我正在尝试获得多列唯一约束.到目前为止,我只能对这样的个别列进行独特约束:

CREATE TABLE `store_group_item` (`store_group_id` INTEGER NOT NULL UNIQUE ,
    `store_item_id` INTEGER NOT NULL UNIQUE ,
    `_id` INTEGER PRIMARY KEY AUTOINCREMENT );
Run Code Online (Sandbox Code Playgroud)

而我想要的是

CREATE TABLE `store_group_item` (`store_group_id` INTEGER NOT NULL ,
    `store_item_id` INTEGER NOT NULL ,
    `_id` INTEGER PRIMARY KEY AUTOINCREMENT,
    UNIQUE( `store_group_id`, `store_item_id` );
Run Code Online (Sandbox Code Playgroud)

在我的模型中,我一直在使用以下注释用于唯一列:

@DatabaseField( unique = true )
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个工作?

sql sqlite unique-constraint ormlite

9
推荐指数
2
解决办法
7341
查看次数

为什么Google Appengine中没有独特的约束?

我已经看过很多关于如何在appengine中实现唯一约束的文章和问题,但实际上我没有找到关于为什么不存在此功能的任何解释.

如果appengine开发人员认为最好不要实现这样的功能,我相信他们有充分的理由,但我有兴趣理解为什么他们这么做.

这个决定是否受到业绩问题的影响?为什么?

任何有关这方面的详细解释将不胜感激.

google-app-engine unique-constraint google-cloud-datastore

9
推荐指数
1
解决办法
2863
查看次数

具有web2py的多列唯一约束

可以将特定列标记为unique = true.在web2py中处理多列唯一约束的最正确方法是什么?

例如,假设我有一个汇率表.它可以包含从货币到货币和汇率的列.拥有两个具有相同from和to货币的行是没有意义的.什么是最优雅或最正确的方式来使/从组合独特?

web2py unique-constraint

9
推荐指数
2
解决办法
2162
查看次数

两列唯一约束的组合

我创建了连接表t1t2的表t1t2,如下所示:

CREATE TABLE t1t2(
id integer primary key,
t1_id integer,
t2_id integer,
foreign key(t1_id) references t1(id),
foreign key(t2_id) references t2(id));
Run Code Online (Sandbox Code Playgroud)

是否可以定义一个约束(限制),它只启用元组的唯一值(t1_id,t2_id)?或者我应该在应用程序中检查这个?

sqlite constraints unique-constraint

9
推荐指数
2
解决办法
7034
查看次数

跨多个列的排列的唯一postgres约束

给出Postgres数据库中的以下三列:第一,第二,第三; 如何创建约束以使排列是唯一的?

例如,如果('foo', 'bar', 'shiz')存在于db中,('bar', 'shiz', 'foo')则将其排除为非唯一.

sql postgresql database-design constraints unique-constraint

9
推荐指数
2
解决办法
780
查看次数

oracle db中具有多个字段的条件唯一约束

我有这张桌子:

XPTO_TABLE (id, obj_x, date_x, type_x, status_x)
Run Code Online (Sandbox Code Playgroud)

我想创建适用于领域的唯一约束(obj_x, date_x, type_x),只有当status_x <> 5.

我试图创建这个,但Oracle说:

line 1: ORA-00907: missing right parenthesis
Run Code Online (Sandbox Code Playgroud)
CREATE UNIQUE INDEX UN_OBJ_DT_TYPE_STATUS
ON XPTO_TABLE(
    (CASE
         WHEN STATUS_X <> 5
         THEN
             (OBJ_X,
              TO_CHAR (DATE_X, 'dd/MM/yyyy'),
              TYPE_X)
         ELSE
             NULL
     END));
Run Code Online (Sandbox Code Playgroud)

什么是正确的语法?

sql oracle conditional unique unique-constraint

9
推荐指数
2
解决办法
1万
查看次数

核心数据(添加唯一约束后):注释:修复多对多关系的丢失删除传播

在我们添加Unique key i.es Constraint之后,这个问题就开始了.

经常更新会议管理对象会删除与会议管理对象具有一对一反比关系的事件管理对象.

错误CoreData:注释:修复对象0x60c00009c4d0(0x60c000621e40)上多对多关系meetingList的丢失删除传播,错误为0x60800009ac20(0x60800023a360)

数据模型

我的核心数据模型中有三个实体

(CDEvent, CDMeeting, CDMLCheckin) .
Run Code Online (Sandbox Code Playgroud)

实体属性和关系如下所述:

关系 在此输入图像描述

属性:CDEvent 在此输入图像描述 CDMeeting 在此输入图像描述

CDMLCheckin 在此输入图像描述

独特的约束:

  • CDEvent实体将eventUUID作为唯一约束.
  • CDMeeting实体将meetingUUID作为唯一约束.

关系

  • CDEvent < - >> CDMeeting
    • CDEventCDMeeting是与删除规则级联的多对多关系,从CDMeeting到CDEvent的反向关系是与删除规则无效的一对一.
  • CDEvent < - >> CDMLCheckin
    • CDEventCDMLCheckin与删除规则级联的多对多关系,从CDMLCheckin到CDEvent的反向关系是与删除规则无效的一对一.

完整说明:https://docs.google.com/document/d/1y2DQhBBLqjAP9eWbx5YpQhH7oVigxT_mcJDnPLlOMtQ/edit?usp=sharing

注意

  • 如果我删除唯一约束eventUUIDCDEvent一切工作正常.

请帮助我们,因为我们被打了一个多星期:(

core-data objective-c unique-constraint ios ios9

9
推荐指数
1
解决办法
657
查看次数

为现有的PostgreSQL索引添加唯一约束

我的PostgreSQL 9.3数据库中有一个索引:

CREATE INDEX index_foos_on_bar_and_baz ON foos USING btree (bar, baz);
Run Code Online (Sandbox Code Playgroud)

(来自使用Ruby on Rails的模式迁移)

索引存在并使事情变得更快.既然我已经清理了重复的foos,我想让这个索引变得独一无二:

CREATE UNIQUE INDEX index_foos_on_bar_and_baz ON foos USING btree (bar, baz);
Run Code Online (Sandbox Code Playgroud)

有没有办法改变现有的索引并使其独一无二?或者更容易/更快地删除现有索引并创建一个新的独特索引?

sql postgresql indexing ruby-on-rails unique-constraint

8
推荐指数
1
解决办法
1181
查看次数