问题标签 [unique-key]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
186941 浏览

mysql - INSERT ... ON DUPLICATE KEY(什么都不做)

我有一个包含两列唯一键的表:

我想在那个表中插入一行,但是如果键存在,什么也不做!我不希望生成错误,因为密钥存在。

我知道有以下语法:

但是有没有类似的东西:

?

0 投票
2 回答
6978 浏览

python - SQLite 中的多个唯一列

我正在尝试创建一个表,我需要它不允许 3 个字段相同的行。

当我使用 SQLLite 在 Python 中创建表时,我使用以下方法,但我几乎没有得到任何结果。它通常在写入 2 条记录后停止,因此显然有些东西认为它是重复的。

所以,我希望数据库不允许 ownerID1、ownerID2、accountKey 和 argID1 相同的记录。

任何人都可以帮我解决这个问题吗?

谢谢!

0 投票
2 回答
926 浏览

objective-c - 通过数组属性在 Core Data 中查找对象,在 >10k 元素中执行

简短:
我需要通过一个键找到核心数据对象,该键包含任意对象的唯一不可变数组(固定长度,但在运行时选择)(不仅元素成员资格,而且元素顺序决定唯一性)。然而NSManagedObject禁止覆盖 [isEqual:]. 怎么办?


Long:
我的核心数据模型中有一个实体(参见实体“...链接”的图表图像),我必须根据属性键(“元组”)保证其唯一性。到现在为止还挺好。

然而,实体的唯一属性必须是NSArray
为了让事情变得更加困难,我既不知道元组元素类类型。 我也不知道元组的元素数。好吧,实际上每个元组(至少每个核心数据上下文)的计数都是相同的,但在应用程序运行之前不知道。

我的链接实体必须只有一个实例与给定的 tuple
并且出于显而易见的原因,只有一个元组实例具有给定的任意对象数组。而如果返回
,则两个元组将被视为相等。 NSManagedObject 禁止覆盖and ,否则事情将是小菜一碟。[tuple_1 isEqual:tuple_n]YES[isEqual:][hash]

“…Tuple”对象与它们的标记数组一起创建(通过一种方便的方法)并且是不可变的(每个“…Token”及其数据属性也是如此)。(将“…Tuple”想象成“…Link”的字典键。)

"...Tuple" 实现"- (NSArray *)tokens;",它根据 "...TokenOrder" 的 "order" 键返回一个整齐有序的令牌数组。元组预计最多包含 5 个元素。)

然而,我希望有数万个(在某些极端情况下可能更多)“...Link”对象,我必须(经常)根据它们的“元组”属性找到它们

可悲的是,我在任何文献或网络上都找不到任何关于这种情况的文章(更不用说解决方案了)。

有任何想法吗?

核心数据模型

到目前为止,我提出的一个可能的解决方案是:

  1. 通过向“…Tuple”添加另一个名为“ tupleHash”的属性来按元组进行比较的元素数量较少,该属性是通过以下方式在对象创建时预先计算的:片段 1

  2. 使用 NSPredicate 查询匹配 tupleHash 的对象(缩小候选列表相当多)。

  3. 在缩小的候选列表中查找具有给定元组的“…链接”:片段 1

片段1:

片段 2:

(抱歉,markdown 似乎反对将列表与代码片段混合。)

好主意还是只是疯了?

提前致谢!

0 投票
5 回答
131 浏览

c++ - 给定 200 个字符串,什么是键入关系值 LUT 的好方法

我有200根弦。每个字符串与每个其他字符串都有关系(通过 0 到 1 之间的浮点数来衡量)。这种关系是双向的;即关系 A/B == 关系 B/A。这会产生 n(n-1)/2 个关系,即 19,800。

我想要做的是将这些关系存储在查找表中,以便给定任何两个单词,我可以快速找到关系值。

我正在使用 c++,所以我可能会使用 std::map 来存储 LUT。问题是,用于此目的的最佳密钥是什么。

密钥必须是唯一的,并且需要能够从两个单词中快速计算出来。

我的方法是为每个单词对创建一个唯一标识符。例如,给定单词“apple”和“orange”,然后我将它们组合在一起作为“appleorange”(字母顺序,最小在前)并将其用作键值。

这是一个好的解决方案还是有人可以提出更聪明的建议?:)

0 投票
9 回答
22196 浏览

java - 使用 Hibernate 基于唯一键查找或插入

我正在尝试编写一种方法,该方法将基于唯一但非主键返回 Hibernate 对象。如果实体已经存在于数据库中,我想返回它,但如果它不存在,我想创建一个新实例并在返回之前保存它。

更新:让我澄清一下,我正在为其编写的应用程序基本上是输入文件的批处理器。系统需要逐行读取文件并将记录插入到数据库中。文件格式基本上是我们模式中几个表的非规范化视图,所以我要做的是解析父记录,或者将其插入数据库,以便我可以获得一个新的合成键,或者如果它已经存在,则选择它。然后,我可以在具有外键的其他表中添加额外的关联记录回到该记录。

这变得棘手的原因是每个文件都需要完全导入或根本不导入,即对给定文件所做的所有插入和更新都应该是一个事务的一部分。如果只有一个进程在执行所有导入,这很容易,但如果可能的话,我想将其拆分到多台服务器上。由于这些限制,我需要能够留在一个事务中,但要处理已经存在记录的异常。

父记录的映射类如下所示:

我最初编写此方法的尝试如下:

问题是当我要查找的名称存在时,调用 uniqueResult() 会引发 org.hibernate.AssertionFailure 异常。完整的堆栈跟踪如下:

有谁知道是什么导致这个异常被抛出?hibernate 是否支持更好的方法来实现这一点?

让我也先发制人地解释为什么我要先插入,然后再选择是否以及何时失败。这需要在分布式环境中工作,因此我无法在检查中同步以查看记录是否已经存在和插入。最简单的方法是让数据库通过检查每次插入时的约束冲突来处理这种同步。

0 投票
1 回答
8987 浏览

postgresql - 为什么我不能在 PostgreSQL 中设置这个唯一约束?

我不断得到:

SQL 错误:错误:无法创建唯一索引“service_import_checksum_key” 详细信息:键(校验和)=()重复。

在声明中:

ALTER TABLE "public"."service_import" 添加约束 "service_import_checksum_key" UNIQUE ("checksum")

但是这个约束不是重复的。在整个数据库的任何地方都没有其他类似的约束,我不知道为什么它一直坚持认为它是重复的。我假设这是我在这里缺少的 postgres 的一些奇怪的细微差别。

我究竟做错了什么?

表转储:

0 投票
2 回答
2824 浏览

mysql - MyISAM 唯一键在 64 字节处被截断,导致冲突

我有一个 MySQL 表,将 url 存储为唯一键。我开始在我的键上遇到冲突,因为键本身似乎只是任何 url 的前 64 个字节(或者如果您愿意,它是一个 latin-1 排序的字符)。因此,如果一个 url 超过 64 个字符并且我已经有一个类似的 url,它会抛出一个错误。

例如:

引发此错误:

MyISAM 不应该有 1000 字节的密钥长度吗?

编辑: CREATE TABLE STATUS 调用中似乎没有列出前缀长度,它看起来像这样:

我尝试将一个设置为 256,如下所示:

我收到以下错误:

我认为回退只是因为我通过 MySQL Workbench 运行了 ALTER TABLE。

0 投票
4 回答
4696 浏览

php - 使用 php/javascript 的唯一序列号

有没有办法使用 php/javascript 为 Mac、Windows 等机器和 iPhone、Blackberry 等设备获取唯一的序列号?

0 投票
2 回答
2738 浏览

database-design - 在关系数据库中实现全局唯一标识符的优点/缺点和方法?

关于我问题的第一部分:我最近问自己,为关系数据库中的某些表设置唯一标识符有什么好处和权衡。例如,Facebook (FB) Graph API 允许使用相同的 URL 获取不同类型的对象,例如“用户”、“事件”、“页面”等,例如https://domain/251906384206返回一个“事件”类型的对象,而https://domain/195466193802264返回“组”类型的对象。

与提供不太“通用”的 API 相比,这种方法的好处是什么,API 将以这种方式使用:https://domain/event/251906384206https://domain/group/195466193802264。在这种情况下,类似的标识符可能用于不同的对象类型,因为每个对象类型都有其标识符范围。

关于问题的第二部分:实现全球唯一标识符的选项有哪些?

我想到的两个选择是:

  1. 使用基于继承的方法(每类表、单个表等)。假设使用每类表的方法(超级表仅包含唯一标识符作为主键,表示对象类型的子表包含与超级表相同的标识符和附加数据),超级表和子表之间需要连接,这似乎很难扩展因为超级表成了瓶颈?

  2. 提供一个包含 3 列的表,其中包含

    • 唯一标识符,
    • 对象类型特定的主键,以及
    • 表名。

    每个对象类型的附加表包含将唯一标识符引用为外键的列。每个对象类型特定的表都有自己的主键范围。

这两种方法都允许提供像上面提到的 FB API 这样的通用 API。第二种方法将允许在内部使用对象表特定的主键并仅公开全局唯一标识符。但是,如果可能在内部使用全局唯一标识符,则第二种方法也需要连接。

是否有任何关于全球唯一标识符的优缺点的经验以及实施它的最佳实践是什么?

0 投票
3 回答
547 浏览

mysql - 整个mysql表上的唯一键?

假设我有一个包含两列的 mysql 表:A 和 B。是否可以有一个唯一键,以便我只能在 A 或 B 中插入一个值(一次在整个表中)?

因此,如果 A 列包含“qwe”而 B 列包含“asd”,则这两个值不能再插入任一列中。

这不起作用:

谢谢。

编辑:我能够使用以下触发器来完成此操作:

但是,我没有看到“A OR B 已存在”错误消息,但是:

错误 1054 (42S22):“where 子句”中的未知列“不存在”

再次感谢!