![]() |
1
11
您应该使用identity(自动递增)列。这个 bigint 数据类型可以存储值 (9223372036854775807)。我认为您的系统不会很快达到这个值,即使您正在插入和删除大量记录。 锁定问题 约束冲突 (或者更糟- 非唯一值 |
![]() |
2
8
一个
如果您的标识列中有-2147483648,例如。
如果你真的认为这还不够,你可以用
总而言之,您应该使用一个identity列,不应该关心值中的间隙,因为a)您有足够的候选值,b)它是一个没有逻辑意义的抽象数字。 如果要实现您建议的解决方案,在代码派生下一个标识列时,您必须考虑并发性,因为您必须同步访问两个竞争事务之间的当前最大身份值。实际上,您可能会导致性能显著下降,因为您必须先读取最大值,计算然后插入(更不用说同步并发事务所涉及的额外工作)。但是,如果使用标识列,则数据库引擎将为您处理并发性。 |
![]() |
3
3
继续在SQL Server中对PK使用标识功能。在mysql中,还有自动增量功能。别担心你的整数范围用完了,在这之前你的硬盘空间就用完了。 |
![]() |
4
3
您可以通过锁定表或捕获异常来解决该问题,并继续重新插入。。但那是一种很糟糕的做事方式。锁定将降低性能并导致可伸缩性问题(如果您计划的记录数量与担心int溢出的数量一样多,那么您将需要可伸缩性)。
如果担心标识字段可能溢出,请使用较大的数据类型,如bigint。您将很难生成足够的记录来溢出它。 现在,有正当理由不使用标识字段,但这不是其中之一。 |
![]() |
5
1
|
![]() |
hello_programmers · Mysql从其他表输出一列 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |
![]() |
Popo · Sql查询:返回数据库中不可用的where条件 2 年前 |
|
Hamdan Nuramdani · 对账单中一周内不同表中的数据求和 2 年前 |
|
Kugelfisch · 用php为数据库加密数据 2 年前 |