タグ付けされた質問 「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シーケンスは、ID列よりもパフォーマンスが高いと想定されるのはなぜですか?
どちらが優れているかに対する彼の答え:ID列または生成された一意のID値?mrdennyのコメント: SQL Denaliが登場すると、IDよりも効率的なシーケンスがサポートされますが、より効率的なものを作成することはできません。 私はちょっと確信が持てません。Oracleのシーケンスを知っているので、挿入のトリガーを作成するか、各挿入をストアドプロシージャの呼び出しにカプセル化するか、アドホック挿入を行うときにシーケンスを適切に使用することを忘れないでください。 シーケンスの利点はそれほど明白ではないと思います。

1
シーケンス-キャッシュなしvsキャッシュ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 2つの間に違いはありますか?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 ... いつ、最初の使用から2回目の使用までの期間(わずか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 を使用しているため、ギャップバグのため、Identityを使用したくありません。

1
巨大なテーブルにシリアル列を追加する最も効率的な方法
BIGSERIAL列を巨大なテーブルに追加する最も速い方法は何ですか(〜3 Bil。行、〜174Gb)? 編集: 列を既存の行の増分値にしたい(NOT NULL)。 フィルファクターを設定しませんでした(振り返ってみると、これは悪い決定のように見えます)。 ディスク容量に問題はありません。できるだけ高速にしてください。

1
PostgreSQLでのシーケンスの圧縮
私が持っているid serial PRIMARY KEYPostgreSQLのテーブルの列を。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 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.