标签: sequence

如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

我有一张桌子:

CREATE TABLE names (id serial, name varchar(20))
Run Code Online (Sandbox Code Playgroud)

我想要那个表中的“最后插入的 id”,而不是RETURNING id在插入时使用。好像有一个函数CURRVAL(),但我不明白如何使用它。

我试过:

SELECT CURRVAL() AS id FROM names_id_seq
SELECT CURRVAL('names_id_seq')
SELECT CURRVAL('names_id_seq'::regclass)
Run Code Online (Sandbox Code Playgroud)

但它们都不起作用。如何使用currval()获取最后插入的 ID?

postgresql sequence

81
推荐指数
4
解决办法
27万
查看次数

为什么 Denali 序列应该比身份列表现更好?

在他对哪个更好的回答中:标识列还是生成的唯一 id 值?mrdenny 说:

当 SQL Denali 出现时,它将支持比身份更高效的序列,但您无法自己创建更高效​​的东西。

我不确定。知道 Oracle 的序列后,我要么为插入创建触发器,将每个插入封装到存储过程的调用中,要么祈祷我在执行临时插入时不要忘记正确使用序列。

我怀疑序列的优势是否如此明显。

sql-server sequence sql-server-2012

36
推荐指数
2
解决办法
4003
查看次数

序列 - 无缓存 vs 缓存 1

SQL Server 2012+ 中SEQUENCE声明的 usingNO CACHE和声明的 using之间有什么区别CACHE 1吗?

序列#1:

CREATE SEQUENCE dbo.MySeqCache1
AS INT
    START WITH 1
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 9999
    NO CYCLE
    CACHE 1;
GO
Run Code Online (Sandbox Code Playgroud)

序列#2:

CREATE SEQUENCE dbo.MySeqNoCache
AS INT
    START WITH 1
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 9999
    NO CYCLE
    NO CACHE;
GO
Run Code Online (Sandbox Code Playgroud)

两者之间有什么区别吗?在 SQL Server 2012+ 环境中使用时,它们的行为会有所不同吗?

sql-server sequence sql-server-2012

25
推荐指数
1
解决办法
5250
查看次数

如何在mysql中生成一个序列

在mysql中考虑这个表

create table numbers (number int);
insert into numbers values (3), (2), (9);
select * from numbers;

+--------+
| number |
+--------+
|      3 |
|      2 |
|      9 |
+--------+
Run Code Online (Sandbox Code Playgroud)

是否有一个简单的查询来生成一个包含以下列的表

  1. 从 1 到 10 的数字
  2. 如果数字存在于表编号中,则为 1,否则为 0

我想你必须创建一个数字序列才能做到这一点。如果可能,我想创建这样一个序列而不将其存储在数据库中。

相关问题:是否有一个选择查询生成从 1 到 10(或 100 或 1000)的数字序列?

mysql sequence

23
推荐指数
2
解决办法
5万
查看次数

PostgreSQL - 在级联上截断表并用 1 重置所有层次序列

在级联上截断表时,有什么方法可以重置所有表序列。

我已经阅读了这篇文章如何在 postgres 中重置序列并用新数据填充 id 列?

ALTER SEQUENCE seq RESTART WITH 1;
UPDATE t SET idcolumn=nextval('seq');
Run Code Online (Sandbox Code Playgroud)

它仅适用于一个序列,但我的问题是重新启动截断表的所有序列。

考虑当我使用TRUNCATE sch.mytable CASCADE;它影响3个相关表,这意味着三个序列,是否有任何解决方案可以一次性重新启动此序列。

postgresql sequence truncate

20
推荐指数
1
解决办法
3万
查看次数

修复表结构以避免“错误:重复键值违反唯一约束”

我有一个以这种方式创建的表:

--
-- Table: #__content
--
CREATE TABLE "jos_content" (
  "id" serial NOT NULL,
  "asset_id" bigint DEFAULT 0 NOT NULL,
   ...
  "xreference" varchar(50) DEFAULT '' NOT NULL,
  PRIMARY KEY ("id")
);
Run Code Online (Sandbox Code Playgroud)

稍后插入一些行并指定 id:

INSERT INTO "jos_content" VALUES (1,36,'About',...)

稍后,一些记录被插入而没有 id 并且它们因错误而失败: Error: duplicate key value violates unique constraint

显然,id 被定义为一个序列:

在此处输入图片说明

每个失败的插入都会增加序列中的指针,直到它增加到一个不再存在的值并且查询成功。

SELECT nextval('jos_content_id_seq'::regclass)

表定义有什么问题?解决这个问题的聪明方法是什么?

postgresql database-design insert auto-increment sequence

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

重置 SQL Server 2012 序列

我正在测试和填充利用该SEQUENCE对象的特定表。在这个过程中,我正在测试用数以万计的插入行填充表(因为我不熟悉如何编程)。我在这个特定表格中看到的问题是,当我开始另一个人口测试时,SEQUENCE它不会重置回我想要的第一个数字(即 1)。

当我想重新运行一个新的测试时,我删除了有问题的表,然后运行以下命令:

DROP SEQUENCE foo.fee;
GO

DROP SCHEMA foo;
GO
Run Code Online (Sandbox Code Playgroud)

当我想重新运行测试时,我运行以下SCHEMA&SEQUENCE命令,这些命令按以下顺序触发:

CREATE SCHEMA foo;
GO

CREATE SEQUENCE foo.fee
START WITH 1
INCREMENT BY 1
NO CYCLE
NO CACHE;

GO
Run Code Online (Sandbox Code Playgroud)

然后我创建表:

CREATE TABLE foo.sample_table_with_data
(order_number bigint PRIMARY KEY NOT NULL,
sample_column_one nvarchar(max) NULL,
sample_column_two nvarchar(max) NULL,
sample_column_three nvarchar(max) NULL)

GO
Run Code Online (Sandbox Code Playgroud)

完成后,我运行以下插入命令 50,000 次:

INSERT INTO [foo].[sample_table_with_data] 
(
    [order_number],
    [sample_column_one], 
    [sample_column_two], 
    [sample_column_three]
) 
VALUES 
(
    NEXT VALUE FOR foo.fee, 
    'Blah', 
    'Blah Blah', 
    'Blah …
Run Code Online (Sandbox Code Playgroud)

sql-server sequence sql-server-2012

14
推荐指数
2
解决办法
3万
查看次数

在 postgres 中的多个表中使用相同的序列会出现什么问题?

我们正在考虑使用共享序列为数据库中所有表的主键分配 ID。其中大约有 100 个。只有一对夫妇经常和定期插入。在我们进入实际尝试和负载测试阶段之前,我们想排除它是“出于明显原因的糟糕想法”。

我们的峰值负载是每秒 1000 次插入,跨几个表。

到目前为止,我们的研究表明 - 序列生成速度不应该是问题 - 序列碎片(间隙)会发生,但不应该是问题 - id 耗尽不会是问题

我们不确定我们是否错过了其他重要的事情。我们会感谢人们的意见,尤其是那些之前尝试过并有过正面或负面经历的人的意见。

对于上下文 - 我们这样做有两个主要动机。

这样做的一个动机是我们可以定义一堆字典(我们称之为范围)并将人类可读的单词分配给这些 id,因此我们希望确保不同表中的 id 永远不会重叠。因此,在一个范围内,id 12345 可能被分配值“Green”,而在另一个范围内,它可能被分配“Verde”。(实际上,我们不会将它用于国际化,但我们可能有一天会使用它)。

另一个动机是使在现场有多个部署变得容易,并且知道(通过唯一设置每个部署的几个最高有效数字的序列)我们的部署不会重叠主键。(就像一个 GUID 精简版)。

postgresql sequence uuid

13
推荐指数
1
解决办法
5071
查看次数

将串行列添加到大表的最有效方法

将 BIGSERIAL 列添加到大表(约 3 Bil. 行,约 174Gb)的最快方法是什么?

编辑:

  • 我希望该列是现有行 ( NOT NULL) 的递增值。
  • 我没有设置填充因子(回想起来,这似乎是一个错误的决定)。
  • 我对磁盘空间没有问题,只是希望它尽可能快。

postgresql performance sequence update

12
推荐指数
1
解决办法
3万
查看次数

在 Oracle 中,sequence.nextval 怎么可能为空?

我有一个像这样定义的 Oracle 序列:

CREATE SEQUENCE  "DALLAS"."X_SEQ"  
    MINVALUE 0 
    MAXVALUE 999999999999999999999999999 
    INCREMENT BY 1 START WITH 0 NOCACHE  NOORDER  NOCYCLE ;
Run Code Online (Sandbox Code Playgroud)

它在存储过程中用于插入记录:

PROCEDURE Insert_Record
                (p_name    IN  VARCHAR2,                
                 p_userid  IN  INTEGER,
                 cur_out   OUT TYPES_PKG.RefCursor)
    IS
        v_id NUMBER := 0;
    BEGIN
        -- Get id value from sequence
        SELECT x_seq.nextval
          INTO v_id
          FROM dual;

        -- Line below is X_PKG line 40
        INSERT INTO X
            (the_id,            
             name,                        
             update_userid)
          VALUES
            (v_id,
             p_name,                        
             p_userid);

        -- Return new id
        OPEN cur_out FOR
            SELECT v_id the_id
              FROM dual;
    END; …
Run Code Online (Sandbox Code Playgroud)

oracle sequence

11
推荐指数
1
解决办法
9933
查看次数