问题标签 [primary-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 投票
19 回答
75939 浏览

database - 代理与自然/业务键

我们又来了,旧的争论仍然存在......

我们最好有一个业务键作为主键,还是我们宁愿有一个代理 id(即 SQL Server 标识)对业务键字段具有唯一约束?

请提供例子或证据来支持你的理论。

0 投票
7 回答
3628 浏览

sql - 从整数到 GUID 作为主键

我使用了几个带有整数主键的引用表。现在我想将整数更改为 GUID,使所有引用保持不变。最简单的方法是什么?

谢谢!

添加

我确实了解这个过程,所以我需要更详细的建议,例如,如何填写新的 GUID 列。使用默认值 newid() 是正确的,但是对于已经存在的行呢?

0 投票
4 回答
6620 浏览

mysql - 关于主键和插入的简单mysql问题

在mysql中,当它自动递增时,如何获取用于插入操作的主键。

基本上,我希望在语句完成时返回新的自动增量值。

谢谢!

0 投票
11 回答
4480 浏览

database-design - 我应该有一个专用的主键字段吗?

我正在设计一个供 Web 应用程序使用的小型 SQL 数据库。

假设一个特定的表有一个名称字段,不允许任何两行具有相同的值。但是,用户将能够随时更改名称字段。

此表中的主键将用作其他表中的外键。因此,如果将 Name 字段用作主键,则任何更改都需要传播到其他表。另一方面,唯一性要求将被自动处理。

我的直觉是添加一个整数字段作为主键,它可以由数据库自动填充。拥有这个领域有什么意义还是浪费时间?

0 投票
5 回答
758 浏览

insert - 双击双插入分辨率?

一名团队成员在使用旧的内部系统时遇到了问题,其中用户双击网页上的链接可能会导致从浏览器发送两个请求,从而导致在比赛中同一记录的两个数据库插入健康)状况; 最后一个运行失败,主键违规。已经提出并讨论了几种解决方案和技巧:

  1. 在网页上使用 Javascript 通过禁用第一次点击时的链接来减少第二次点击。这是减少问题发生的一种快速简便的方法,但不能完全消除它。

  2. 将服务器端的请求执行包装在事务中。由于相关表上的服务器负载和锁定级别,这被认为过于昂贵的操作。

  3. 捕获失败的插入引发的主键异常,将其识别为这样,然后吃掉它。这具有以下缺点:(a) 供应商锁定,必须知道特定于数据库的异常的细微差别,以及 (b) 可能不记录/处理合法的数据库故障。

  4. #3 的扩展,通过在插入失败时尝试更新记录并检查更新结果以确保它返回 1 条受影响的记录。

是否还有其他未考虑的选项?被忽视的选项是否有优缺点?万恶之中,孰轻孰重?

0 投票
8 回答
33162 浏览

database - Sequential Guid 相对于标准 Guid 有哪些性能改进?

当用作数据库内的主键时,是否有人测量过 Sequential Guid 与 Standard Guid 的性能?


我不认为需要唯一的密钥是可猜测的,从 Web UI 或其他部分传递它们本身似乎是一种不好的做法,如果您有安全问题,我看不到如何使用 guid 可以改进事情(如果这是问题,请使用使用框架的适当加密功能的真实随机数生成器)。
我的方法涵盖了其他项目,可以从代码生成顺序 guid,而无需访问数据库(也适用于 Windows),并且它在时间和空间上是独一无二的。
是的,提出问题的目的是为了回答它,为那些选择 Guid 进行 PK 的人们提供一种提高数据库使用率的方法(在我的例子中,它允许客户在无需更改服务器的情况下维持更高的工作量)。

似乎安全问题很多,在这种情况下不要使用顺序 Guid,或者更好的是,对 PK 使用标准 Guid,这些 Guid 从您的 UI 来回传递,而顺序 guid 用于其他所有内容。与往常一样,没有绝对的真理,我也编辑了主要答案以反映这一点。

0 投票
5 回答
327 浏览

java - 序列生成的主键的正确大小是多少?

目前,我们系统中的主键长度为 10 位,刚刚超过 Java 整数的限制。我想避免这些键中的数字溢出导致的任何维护问题,但同时我不想牺牲太多系统性能来存储我永远不需要的无限大数字。

您如何处理管理主键的大小?我是否最好坚持使用 Java 整数,以获得更大的 Long 的性能优势,并在需要时增加大小,或者我应该硬着头皮,在我的大部分 PK 中使用 Java Long,并且永远不必担心溢出序列大小?

0 投票
4 回答
863 浏览

c# - 获取新条目的主键

我有许多子表具有父表的外键。

如何在父表中添加一个条目并获取该条目的主键,以便我可以在子表中输入指向父表中的条目的行?

我正在从 C# 应用程序的 MS Access 数据库中执行此操作。

0 投票
13 回答
18656 浏览

sql - INSERT 语句后的@@IDENTITY 总是返回 0

我需要一个在数据库上执行 INSERT 语句并返回 Auto_Increment 主键的函数。我有以下 C# 代码,但是,虽然 INSERT 语句工作正常(我可以看到数据库中的记录,PK 生成正确并且行 == 1),但 id 值始终为 0。关于可能发生的任何想法错误的?

为了回应答案,我尝试了:

但我现在收到错误“SQL 语句结束后找到的字符”

我正在使用带有 OleDb 连接的 MS Access 数据库,Provider=Microsoft.Jet.OLEDB.4.0

0 投票
3 回答
2072 浏览

database - 巨大的(20 位)主键和 SQLite

如果我尝试将具有 20 位主键的数据插入 SQLite 数据库,第二个插入语句会出错,因为它“不是唯一的”。如果我选择从 SQLite 命令提示符中可以看到的值,则主键是用科学计数法编写的。列类型为十进制。有没有办法强制 SQLite “按原样”插入值,即使值那么长,也能保持精度/“正常表示”?