![]() |
1
759
是的,SERIAL是等效函数。
SERIAL只是一个围绕序列创建表时宏。您不能在现有列上更改SERIAL。 |
![]() |
2
244
您可以使用任何其他
integer data type
,例如
例子:
最好使用自己的数据类型,而不是用户 serial data type . |
![]() |
3
116
如果你想在已经存在的表中的id中添加序列,你可以使用:
|
![]() |
4
55
从Postgres 10开始,也支持SQL标准定义的标识列:
创建一个标识列,除非明确要求,否则该列不能被覆盖。以下插入将失败,列定义为
然而,这可以被推翻:
当手动提供值时,也需要手动调整基础序列,这与使用
默认情况下,标识列不是主键(就像
|
![]() |
5
54
虽然看起来序列是 MySQL auto_increment有一些微妙但重要的区别: 1.失败的查询会增加序列/序列序列列在查询失败时递增。这会导致失败查询的碎片化,而不仅仅是行删除。例如,在PostgreSQL数据库上运行以下查询:
您应该得到以下输出:
请注意uid是如何从1到3而不是从1到2的。 如果您使用以下命令手动创建自己的序列,仍然会发生这种情况:
如果你想测试MySQL的不同之处,请在MySQL数据库上运行以下命令:
你应该得到以下内容 无碎片化 :
2.手动设置串行列值可能会导致未来的查询失败。@trev在之前的回答中指出了这一点。 要模拟此情况,请手动将uid设置为4,稍后将“碰撞”。
表格数据:
运行另一个插入:
表格数据:
现在,如果你运行另一个插入:
它将失败,并显示以下错误消息:
相比之下,MySQL将优雅地处理这个问题,如下所示:
测试是在MySQL 5.6.33、Linux(x86_64)和PostgreSQL 9.4.9上进行的 |
![]() |
6
36
抱歉,重复一个旧问题,但这是谷歌上弹出的第一个Stack Overflow问题/答案。 这篇文章(首先在谷歌上出现)讨论了PostgreSQL 10使用更新的语法: https://blog.2ndquadrant.com/postgresql-10-identity-columns/ 这恰好是:
希望有帮助:) |
![]() |
7
17
您必须小心不要直接插入到SERIAL或序列字段中,否则当序列达到插入值时,您的写入将失败:
|
![]() |
8
15
在所提问题的背景下,并回应@sereja1c的评论,创建
|
![]() |
9
8
自从PostgreSQL 10
|
![]() |
10
5
这种方法肯定会奏效,我希望它能有所帮助:
您可以在下一个链接中查看详细信息: http://www.postgresqltutorial.com/postgresql-serial/ |
![]() |
11
3
创建序列。
并更改表格
|
|
Johnny T · 基于当前值的SQL合并表[重复] 8 月前 |
![]() |
Peter Schofield · 类型转换Postgresql 8 月前 |
![]() |
Kevin Smeeks · Pyspark JDBC分区读取 8 月前 |
![]() |
Andrus · 如何在sql中查找第二个匹配项 8 月前 |