Questions tagged «sequence»

可以生成唯一整数的对象。

9
如何在PostgreSQL中使用currval()获取最后插入的ID?
我有一张桌子: CREATE TABLE names (id serial, name varchar(20)) 我想要该表中的“最后插入的ID”,而无需RETURNING id在插入时使用。似乎有一个功能CURRVAL(),但我不知道如何使用它。 我尝试过: SELECT CURRVAL() AS id FROM names_id_seq SELECT CURRVAL('names_id_seq') SELECT CURRVAL('names_id_seq'::regclass) 但它们都不起作用。如何使用currval()获取最后插入的ID?

2
为什么Denali序列的性能要优于Identity列?
在他对哪个更好的回答中:标识列或生成的唯一ID值?麦丁妮说: 当SQL Denali发布时,它将支持比身份更有效的序列,但是您自己无法创建更有效的序列。 我不确定。了解Oracle的序列后,我要么创建一个插入触发器,要么将每个插入封装到存储过程的调用中,要么祈祷当我进行临时插入时不要忘记正确使用序列。 我怀疑序列的优势是否如此明显。

1
顺序-NO CACHE vs CACHE 1
在SQL Server 2012+中,SEQUENCE声明使用NO CACHE和声明使用之间有区别CACHE 1吗? 顺序1: CREATE SEQUENCE dbo.MySeqCache1 AS INT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999 NO CYCLE CACHE 1; GO 顺序2: CREATE SEQUENCE dbo.MySeqNoCache AS INT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999 NO CYCLE NO CACHE; GO 两者之间有什么区别吗?在SQL Server 2012+环境中使用时,它们的行为会有所不同吗?

2
如何在MySQL中生成序列
考虑这个表在MySQL create table numbers (number int); insert into numbers values (3), (2), (9); select * from numbers; +--------+ | number | +--------+ | 3 | | 2 | | 9 | +--------+ 是否有一个简单的查询来生成具有以下列的表 从1到10的数字 如果表号中存在数字,则为1,否则为0 我想您必须创建一个数字序列才能执行此操作。如果可能的话,我想创建一个这样的序列而不将其存储在数据库中。 相关问题:是否有一个选择查询生成一个从1到10(或100或1000)的数字序列?
19 mysql  sequence 

1
修复表结构以避免出现“错误:重复的键值违反唯一约束”
我有这样创建的表: -- -- 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") ); 稍后,插入一些指定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) 表定义有什么问题?解决此问题的明智方法是什么?

2
重置SQL Server 2012序列
我正在测试和填充利用该SEQUENCE对象的特定表。在这个过程中,我正在测试用成千上万的插入行填充表(因为我不熟悉如何编程)。我在此特定表上看到的问题是,当我开始另一个人口测试时,SEQUENCE它不会重置回我想要的第一个数字(即1)。 当我希望重新运行新测试时,请删除有问题的表,然后运行以下命令: DROP SEQUENCE foo.fee; GO DROP SCHEMA foo; GO 当我想重新运行测试时,我运行以下SCHEMA&SEQUENCE命令,它们按以下顺序触发: CREATE SCHEMA foo; GO CREATE SEQUENCE foo.fee START WITH 1 INCREMENT BY 1 NO CYCLE NO CACHE; GO 然后创建表: 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 一旦完成,我将运行以下插入命令50,000次: …

1
序列正在重用
我有一个序列,可以为系统中的对象生成跟踪号。它已经运行了一段时间了。 上周,我们注意到它开始重新使用值。 似乎发生的事情是,在晚上的不同时间点,它将回滚到前一天的值。然后它将继续从该点生成值。 因此,例如,我可以得到这样的东西: 10112 10113 10114 10115 10116 10117 10118 10113 10114 10115 10116 ... 何时发生,第一次使用与第二次使用之间的持续时间(少至10分钟或几小时)或回滚了多少(少至1次至数百次)似乎没有任何规律。 我曾考虑过运行跟踪(现在仍然可以),但是我认为序列对象没有被直接修改。我认为这是因为修改日期已经过了几天,并且指出了我们手动提高该值以尝试消除重复项的时间。(此后此问题已经发生过好几次了。) 是否有人知道每晚可能导致序列回滚和重用值的原因? 更新:要回答评论中的几个问题: @@Version: Microsoft SQL Server 2012(SP1)-11.0.3000.0(X64)2012年10月19日13:38:57 创建脚本: CREATE SEQUENCE [schemaName].[SequenceName] AS [bigint] START WITH 410014104 INCREMENT BY 1 MINVALUE 410000000 MAXVALUE 419999999 CYCLE CACHE GO 我没有唯一约束(但我打算穿上)。但是,这只会让我知道何时重用了值。不是什么导致值重置。我的工作是每5分钟保存一个新值。时间和价值跳跃没有遵循规律。 我已经检查了事件日志,看是否有错误。唯一正在发生的事情是这样的:http : //support.microsoft.com/kb/2793634 我们今天正在应用此修复程序。我不认为这些是相关的,但是可能是相关的。

3
在Oracle中如何让sequence.nextval为null?
我有一个这样定义的Oracle序列: CREATE SEQUENCE "DALLAS"."X_SEQ" MINVALUE 0 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 0 NOCACHE NOORDER NOCYCLE ; 在存储过程中使用它来插入记录: 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 …
11 oracle  sequence 

3
如何创建带有使用序列的列的表?
我有以下 CREATE TABLE [MyTable] ( [ID] [bigint] PRIMARY KEY NOT NULL, [Title] [nvarchar](64) NOT NULL ) CREATE SEQUENCE MyTableID START WITH 1 INCREMENT BY 1 NO CACHE ; GO 我想在MyTable上插入新记录,并将ID设置为序列的下一个值。我该怎么做?触发,或者还有其他方法吗?怎么样? 当我使用SQL Server 2012时,由于gap bug,我不想使用身份。

1
向大表添加串行列的最有效方法
将BIGSERIAL列添加到巨大的表(〜3个Bil。行,〜174Gb)中,最快的方法是什么? 编辑: 我希望该列为现有行(NOT NULL)的增量值。 我没有设置填充因子(回想起来,这似乎是一个错误的决定)。 我的磁盘空间没有问题,只是希望它尽可能快。

1
在PostgreSQL中压缩序列
我id serial PRIMARY KEY在PostgreSQL表中有一列。id由于我已删除相应的行,因此缺少许多。 现在,我想通过重新启动序列并以保留id原始id顺序的方式重新分配s 来“压缩”表。可能吗? 例: 现在: id | data ----+------- 1 | hello 2 | world 4 | foo 5 | bar 后: id | data ----+------- 1 | hello 2 | world 3 | foo 4 | bar 我尝试了StackOverflow答案中提出的建议,但没有成功: # alter sequence t_id_seq restart; ALTER SEQUENCE # …

1
明确授予权限以更新必要的串行列的序列?
最近,我确实以超级用户身份创建了一个表格,其中包括一个序列ID列,例如, create table my_table ( id serial primary key, data integer ); 当我希望我的非超级用户用户对该表具有写权限时,我授予了它权限: grant select, update, insert, delete on table my_table to writer; 在这样做之后的一个随机时间点,该用户进行的插入操作开始失败,因为该用户没有权限修改my_table_id_seq与串行列关联的序列。不幸的是,我无法在当前数据库中重现该内容。 我通过为用户提供所需的权限来解决此问题,如下所示: grant all on table my_table_id_seq to writer; 有人可以帮助我了解 为什么在某个时候以前足够的权限可能会开始失败? 授予具有串行列的表的写许可权的正确方法是什么?

2
SQL Server 2008:每天重启的序列
我必须添加一个触发器,该触发器应使用以下格式字符串更新列:<current_date>_<per_day_incremental_id>,例如2015-10-01_36。ID必须是递增的,并且允许有空格。 我的方法很幼稚:用当前日期和当前序列值创建一个表,并在其中保留一条记录: create table DailySequence ( date date, sequence int ) insert into DailySequence values (getdate(), 1); CREATE TRIGGER MakeHumanReadableId ON dbo.AuditMeasures FOR INSERT AS DECLARE @ret int; DECLARE @tempDate date; DECLARE @nowDate date; SET @nowDate = getdate(); SELECT @ret = t.sequence, @tempDate = t.date from DailySequence as t; IF …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.