自動採番列

  MDB ( Access 2000 以降 )



  
create table [自動] (
	[社員コード] IDENTITY(100,10)
	,[氏名] VARCHAR(50)
	,primary key([社員コード])
)
  

IDENTITY は COUNTER でも可
最初の 100 は初期値で、次の 10 が増分

以下は変更

  
alter table [自動] 
alter column [社員コード] IDENTITY(500,2)
  

insert 後、自動採番された値を取得するには、@@IDENTITY を使用します

insert into board (board_title) values( NULL );
select @@IDENTITY;




  SQLServer



  
create table [自動] (
	[社員コード] int IDENTITY(100,10)
	,[氏名] VARCHAR(50)
	,primary key([社員コード])
)
  

MDB と違って、データ型の記述が必要
tinyint、smallint、int、bigint、decimal(p,0)、または numeric(p,0) 列に割り当てることができます

初期値を以下のようにして変更できます

  
DBCC CHECKIDENT ([自動], RESEED, 500)
  

次に作成されるデータは510 です





既存の列を IDENTITY には変更できないようなので、そのような目的の場合には
いくつかパターンがあります。

1) 既存の ID の内容を破棄し、ID 値を持つ列の定義位置が一番最後に変更される。
  
ALTER TABLE [テーブル名]  ADD [新しいID列名] INT IDENTITY;
ALTER TABLE [テーブル名] DROP [元のID列のインデックス名];
ALTER TABLE [テーブル名] DROP COLUMN [元のID列名];
sp_rename 'テーブル名.新しいID列', '元のID列名', 'COLUMN';
  

2) SQLServer 同士で http://winofsql.jp/VA003334/msde060812212122.htm を行う

3) 新しいテーブルを IDENTITY 付きで定義し、SET IDENTITY_INSERT を使用する
SET IDENTITY_INSERT [テーブル名] ON
insert 文で ID 値に明示的に値をセット
SET IDENTITY_INSERT [テーブル名] OFF
※ 同一セッションで実行する事。


insert 後、自動採番された値を取得するには、SCOPE_IDENTITY( ) 関数を使用します

insert into board (board_title) values( NULL );
select SCOPE_IDENTITY( );

SCOPE_IDENTITY と @@IDENTITY は、現在のセッション内の任意のテーブルで生成された最後の ID 値を返します。
ただし、SCOPE_IDENTITY が返す値は、現在の有効範囲の中で挿入された値に限られます。
@@IDENTITY の場合は、特定の有効範囲に限定されません。



  MySQL

  
create table `自動` (
	`社員コード` BIGINT NOT NULL AUTO_INCREMENT
	,`氏名` VARCHAR(50)
	,primary key(`社員コード`)
)

または

create table `自動` (
	`社員コード` BIGINT NOT NULL AUTO_INCREMENT UNIQUE
	,`氏名` VARCHAR(50)
)
  

●インデックス付きの AUTO_INCREMENT カラムに NULL(推奨)または 0 を挿入すると、
そのカラムには連続値の次の値が設定される。(それ以外の値では、その値が設定されるので注意)
●通常、これは value+1 になる(value はテーブルに現在格納されているそのカラムの最大値)。
●AUTO_INCREMENT は 1 から開始される
●4.1.0 以降では、`社員コード` SERIAL と記述できる


既存の整数列を AUTO_INCREMENT 化
  
alter table `テーブル名`
   change column `列名`
   `列名` int unsigned not null auto_increment,add index (`列名`)
  

insert 後、自動採番された値を取得するには、LAST_INSERT_ID() 関数を使用します

insert into board (board_id,board_title) values( NULL, NULL );
select LAST_INSERT_ID();

※ LAST_INSERT_ID() は、接続単位に最後の値を保持します。
※ 単一の INSERT 文を使用して複数のレコードを挿入した場合、LAST_INSERT_ID() は最初に挿入されたレコードの値を返します





  PostgreSQL

  
create table "自動" (
	"社員コード" SERIAL
	,"氏名" VARCHAR(50)
	,primary key("社員コード")
)
  

次の値を挿入するには、デフォルト値を割り当てるよう指定してください。
これは、INSERT文の列リストからその列を除外するか、DEFAULTキーワードを使用することで行ないます

serial は、実際は sequence を作成します。
serial で作成された sequence はテーブルの削除と共に削除されます

  
create sequence "自動_社員コード_seq";
create table "自動" (
	"社員コード" integer DEFAULT nextval('自動_社員コード_seq') NOT NULL
	,"氏名" VARCHAR(50)
	,primary key("社員コード")
)
  
シーケンスの存在の確認は、pg_class で行えます ( relkind = 'S' )。


以下は増分の変更

  
alter sequence 自動_社員コード_seq
	increment 10
  

以下は開始番号の変更

  
alter sequence 自動_社員コード_seq
	restart 100
  


insert 後、自動採番された値を取得するには、lastval() 関数を使用します

insert into "自動" ("氏名") values(NULL);
select lastval();

※ 現在のセッションのnextvalで戻される最新の値を返します。
※ 現在のセッションでnextvalが未だ呼ばれていなければエラーになります。



  Oracle

  
Oracle では テーブルと関連付けた自動番号生成はできません。

sequence を作成して、insert 文の values 句に シーケンス名.nextval として
使用する事になります
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加




SQLの窓  天気  IT用語辞典
Yahoo!ニュース  マルチ辞書
PHP マニュアル  Google URL短縮 


フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ