* SQL Server の UNIQUE 制約は SQL 標準に準拠してない
この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [MS SQL Server]
SQL Server2000 では、NULL 同士でもユニーク制約 (一意性制約)にひっかかる。SQL Server2000 にこんな落とし穴があるなんて思わなかった。危ないところだった。
PostgreSQL 7.3.2 ユーザガイド Chapter 2. データ定義 2.4.3. 一意性制約
http://www.postgresql.jp/document/pg732doc/user/ddl-constrai ...
NULL は NULL なんだから重複って概念はおかしい。
PostgreSQL 7.3.2 ユーザガイド Chapter 2. データ定義 2.4.3. 一意性制約
http://www.postgresql.jp/document/pg732doc/user/ddl-constrai ...
一般に、制約の対象となる列について、同じ値をもつ行が 2 行以上ある場合は、
一意性制約違反になります。
しかし、ここでは NULL 値は等価とは見なされません。
つまり、複数列での一意性制約では、制約対象の列の少なくとも 1 つに
NULL 値をもつ行を無限に格納することができるということです。
この振る舞いは SQL 標準に準拠していますが、この規則に従わない
SQL データベースもあるそうです。
ですから、移植する予定のアプリケーションを開発する際には注意してください。
- 検証 SQL
DROP TABLE uniq_test;
CREATE TABLE uniq_test(
int1 int,
int2 int,
UNIQUE (int1, int2)
);
INSERT INTO uniq_test (int1, int2) VALUES (NULL, 1);
INSERT INTO uniq_test (int1, int2) VALUES (NULL, 1);
- PostgreSQL 7.2.1 での結果
hiroaki=> DROP TABLE uniq_test;
DROP
hiroaki=> CREATE TABLE uniq_test(
hiroaki(> int1 int,
hiroaki(> int2 int,
hiroaki(> UNIQUE (int1, int2)
hiroaki(> );
NOTICE: CREATE TABLE / UNIQUE will create implicit index 'uniq_test_int1_key' for table 'uniq_test'
CREATE
hiroaki=> INSERT INTO uniq_test (int1, int2) VALUES (NULL, 1);
INSERT 31376096 1
hiroaki=> INSERT INTO uniq_test (int1, int2) VALUES (NULL, 1);
INSERT 31376097 1
- SQL Server2000 での結果
(1 件処理されました)
サーバー : メッセージ 2627、レベル 14、状態 2、行 1
UNIQUE KEY 違反、制約 'UQ__uniq_test__65851878': オブジェクト 'uniq_test' には重複したキーは挿入できません。
ステートメントは終了されました。
NULL は NULL なんだから重複って概念はおかしい。
- すべての記事の見出し (全1029件)
- 全カテゴリの一覧と記事の数
- カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。
- .net (57件)
- 2ch (19件)
- amazon (5件)
- Apache (22件)
- bash (13件)
- Bookmarklet (9件)
- C# (45件)
- chalow (18件)
- ChangeLog メモ (20件)
- coLinux (2件)
- CSS (5件)
- Delphi (5件)
- DVD (6件)
- Excel (1件)
- F-ZERO (4件)
- FF12 (31件)
- ftp (8件)
- Google (21件)
- gpg (7件)
- HTML (19件)
- http (19件)
- IE (10件)
- IIS (4件)
- iPod (2件)
- JavaScript (14件)
- Linux (63件)
- MCP (6件)
- Mozilla (14件)
- MS SQL Server (30件)
- MySQL (4件)
- Namazu (3件)
- PC (48件)
- Perl (58件)
- PHP (2件)
- Postgres (36件)
- proftpd (2件)
- qmail (1件)
- RFC (4件)
- RSS (33件)
- Ruby (15件)
- samba (3件)
- sonic64.com (6件)
- SQL (15件)
- Squid (3件)
- ssh (7件)
- Subversion (3件)
- unix (31件)
- VSS (2件)
- Windows (34件)
- winny (9件)
- XML (9件)
- xyzzy (17件)
- おいでよ どうぶつの森 (19件)
- お菓子 (5件)
- アスキーアート (13件)
- アニメ (9件)
- クレジットカード (2件)
- ゲーム (120件)
- シェルスクリプト (18件)
- シレン2 (8件)
- セキュリティ (9件)
- ソフトウェア (21件)
- デザインパターン (2件)
- ネットワーク (30件)
- バックアップ (17件)
- プログラミング (14件)
- マリオカートDS (3件)
- メール (26件)
- メモ (116件)
- ラーメン (11件)
- 音楽 (59件)
- 給油 (3件)
- 三国志大戦 (13件)
- 車 (7件)
- 書斎 (4件)
- 食 (30件)
- 買い物 (17件)
- 簿記 (8件)
- 本 (32件)
- 漫画 (9件)
- 2007-04-23 (Mon)
- 2007-03-07 (Wed)
- 2007-02-27 (Tue)
- 2007-01-17 (Wed)
- 2007-01-15 (Mon)
- 2007-01-14 (Sun)
- 2007-01-08 (Mon)
- 2006-12-01 (Fri)
- 2006-11-22 (Wed)
- 2006-11-20 (Mon)
- 2006-11-19 (Sun)
- 2006-09-30 (Sat)
- 2006-08-29 (Tue)
- 2006-08-04 (Fri)
- 2006-07-27 (Thu)
- 2006-07-23 (Sun)
- 2006-07-17 (Mon)
- 2006-07-10 (Mon)
- 2006-07-06 (Thu)
- 2006-07-03 (Mon)
- 2006-06-29 (Thu)
- 2006-06-28 (Wed)
- 2006-06-27 (Tue)
- 2006-06-25 (Sun)
- 2006-06-19 (Mon)
- 2006-06-18 (Sun)
- 2006-06-15 (Thu)
- 2006-06-11 (Sun)
- 2006-06-01 (Thu)
- 2006-05-30 (Tue)
- プロファイル
- 斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
- リンク
- RSS
- スポンサードリンク
- Powered by
- ☆さくらインターネット☆