Identityのじっけーん
Identityのじっけーん
0.改訂履歴
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>
|