UJP - 技術情報

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

     

Identityのじっけーん


Identityのじっけーん


0.改訂履歴

  • 2002.08.14 新規作成

1.はじめに

 このドキュメントでは,identityでいろいろやってみる.

 なお,使用しているSybaseは,RedHat Linux 7.2上で稼働しているSybase SQL Server 11.0.3.3である.

2.実験用環境を作る

  • 実験用のテーブルを作成して,データを入れてみる.

1> create table TEST_1
2> (
3> aa numeric(10,0) identity,
4> bb char(10)
5> )
6> go
1> insert into TEST_1 values("aa")
2> insert into TEST_1 values("bb")
3> insert into TEST_1 values("cc")
4> go
(1 row affected)
(1 row affected)
(1 row affected)
1> select * from TEST_1
2> go
 aa            bb         
 ------------- ---------- 
             1 aa         
             2 bb         
             3 cc         
(3 rows affected)
1>

3.identity_insertモードにしてみる

  • identity_insertをonにして,大きな数値のレコードを追加してみる.

1> set identity_insert TEST_1 on 
2> go
1> insert into TEST_1 (aa,bb) values(1000,"PowerBook G4")
2> go
(1 row affected)
1> select * from TEST_1
2> go
 aa            bb         
 ------------- ---------- 
             1 aa         
             2 bb         
             3 cc         
          1000 PowerBook  
(4 rows affected)
1>

4.identityフィールドを更新してみる

  • 追加したデータのIdentityの値が大きいので,小さい値でUpdateを試みる.

1> update TEST_1 set aa = 100 where aa = 1000
2> go
Msg 7744, Level 16, State 1:
Line 1:
Illegal attempt to update identity field 'aa'.
1>

  • 残念ながら,identity_insertモードでも,アップデートできない模様.

5.identityフィールドに同じ値の行を追加してみる

  • 引き続き,identity_insertモードのまま,先ほどと同じデータを追加してみる.

1> insert into TEST_1 (aa,bb) values(1000,"PowerBook G4")
2> go
(1 row affected)
1> select * from TEST_1
2> go
 aa            bb         
 ------------- ---------- 
             1 aa         
             2 bb         
             3 cc         
          1000 PowerBook  
          1000 PowerBook  
(5 rows affected)
1>

  • なんと,できちゃった.
  • identity_insertモードを解除して,データを追加してみる.

1> set identity_insert TEST_1 off
2> go
1> insert into TEST_1 values("Quadra")
2> go
(1 row affected)
1> select * from TEST_1
2> go
 aa            bb         
 ------------- ---------- 
             1 aa         
             2 bb         
             3 cc         
          1000 PowerBook  
          1000 PowerBook  
          1001 Quadra     
(6 rows affected)
1>

  • これは,identityにUniqキーをつけておけば回避できる.

6.全部データを消した後に行を追加してみる

1> select * from TEST_1
2> go
 aa            bb         
 ------------- ---------- 
             1 aa         
             2 bb         
             3 cc         
          1000 PowerBook  
          1000 PowerBook  
          1001 Quadra     

(6 rows affected)
1> delete TEST_1
2> go
(6 rows affected)
1> select * from TEST_1
2> go
 aa            bb         
 ------------- ---------- 

(0 rows affected)
1> insert into TEST_1 values("Macintosh")
2> go
(1 row affected)
1> select * from TEST_1
2> go
 aa            bb         
 ------------- ---------- 
          1002 Macintosh  
(1 row affected)
1>

  • 前回の最大値+1が設定されている事がわかる.



広告スペース
Google