SQL server Management Studio の使い方

以下の書籍を参照しました。
SQL Server 2008の教科書
松本美穂 松本崇博 ソシム株式会社 2009



【制約】

■NOT NULL
■PRIMARY KEY
■UNIQUE
■CHECK
■FOREIGN KEY


以下、特記ない場合、「sampleDB」というデータベースを使って作業しているものとします。




■PRIMARY KEY(主キー制約)
…重複不可、NOT NULL

NOT NULL制約が含まれているので、別途設定の必要なし

(設定方法)
オブジェクトエクスプローラで「sampleDB」内の該当のテーブルを右クリック
→「デザイン」に進むと、「テーブルデザイナ」ウィンドウが表示される。

主キー(PRIMARY KEY)を設定したい列名を右クリック
→「主キーの設定」をクリックすると、列名の左に鍵マークが表示される。

 >複合主キーの設定時は、設定したい列を[Ctrl]で複数選択する。

保存をすれば、主キー設定完了♪
(必ずすること!)


※ 重複時のエラーは「PK_テーブル名」

※ SQLでPRIMARY KEYを設定するには

ALTER TABLE テーブル名
ADD CONSTRAINT 制約名 PRIMARY KEY (列名,列名2)

制約名は、だいたい列名から取られるけど、複合主キーの場合は何か名前を付ける。



■UNIQUE制約(重複データを入力させない)
…NOT NULL制約が含まれていない。(NULLでもOK)
 ただし、1つだけで、複数行にNULL値は入れられない。

(設定方法)
オブジェクトエクスプローラで「sampleDB」内の該当のテーブルを右クリック
→「デザイン」に進むと、「テーブルデザイナ」ウィンドウが表示される。

任意の列名を右クリック
→「インデックス/キー」をクリックすると、「インデックス/キー」ダイアログが表示されるので
→[追加]をクリック。
→「全般」セクション内「種類」を「一意キー」にする。
 「列」で列を選択する。


※ SQLでUNIQUE制約を設定するには

ALTER TABLE テーブル名
ADD CONSTRAINT 制約名 UNIQUE (列名)

※ SQLでUNIQUE制約を削除するには

ALTER TABLE テーブル名
DROP CONSTRAINT 制約名



■CHECK制約(入力データの制限)
…WHERE句で指定できる演算子が利用できる。

(設定方法)
オブジェクトエクスプローラで「sampleDB」内の該当のテーブルを右クリック
→「デザイン」に進むと、「テーブルデザイナ」ウィンドウが表示される。

任意の列名を右クリック
→「制約のチェック」をクリックすると、「CHECK制約」ダイアログが表示されるので
→[追加]をクリック。
→「全般」セクションブ内「式」の右に条件式を入力。(給与>=0 など)
→「ID」セクション内「名前」で「CK_制約名」など名前を付ける。
→[閉じる]をクリックして「CHECK制約」ダイアログを閉じる。


※ 制限の無効化
データのチェックを行うため、INSERTやUPDATEの時、パフォーマンスが低下する。
そのため、一時的に制約を無効化できる。
上記の「CHECK制約」ダイアログ内「テーブルデザイナ」セクションで
「INSERTおよびUPDATEに適用」で設定可能。

※ SQLで制限を無効化するには

ALTER TABLE テーブル名
NOCHECK CONSTRAINT 制約名

※ SQLで無効化の解除

ALTER TABLE テーブル名
CHECK CONSTRAINT 制約名


■FOREIGN KEY制約(外部キー制約)
…外部キーと主キーのリレーションシップが正しいかのチェックする機能。
 ・主キーに存在しない値を追加できないようにする。
 ・外部キーから参照されている主キー値を削除できないようにする。

(設定方法)
外部キーを設定するテーブルを「テーブルA」、主キーがあるテーブルを「テーブルB」とする。
オブジェクトエクスプローラで「sampleDB」内のテーブルAを右クリック
→「デザイン」に進むと、「テーブルデザイナ」ウィンドウが表示される。

任意の列名を右クリック
→「リレーションシップ」をクリックすると、「外部キー リレーションシップ」ダイアログが表示される。
→[追加]をクリック。
→「全般」セクション内「テーブルと列の指定」の右列の[...]をクリック。
→「テーブルと列」ダイアログが表示される。
→リレーションシップ名、画面左に、テーブルBと列を指定。
 画面右のテーブルAは、すでに指定されているので、列を指定。
→[OK]で「テーブルと列」ダイアログを閉じる。
→[閉じる]をクリックして「外部キー リレーションシップ」ダイアログを閉じる。


または、オブジェクトエクスプローラの「データベースダイアグラム」を右クリックし
「新しいデータベースダイアグラム」をクリックし、テーブルを選択することで
GUI操作での設定も可能。
すでに設定されているのも確認できます。



※ SQLでFOREIGN KEY制約を設定するには

ALTER TABLE 外部キーがあるテーブル名
ADD CONSTRAINT 制約名
FOREIGN KEY (列名) REFERENCE 主キーがあるテーブル名(列名)

※ SQLで連鎖更新・連鎖削除を設定するには

主キー側のデータを更新・削除した際に、参照側(外部キー設定側)も
連鎖更新・削除することで、リレーションシップ(参照関係)を保つ。

ALTER TABLE 外部キーがあるテーブル名
ADD CONSTRAINT 制約名
FOEIGN KEY (列名) REFERENCE 主キーがあるテーブル名(列名)
ON UPDATE CASCADE
ON DELETE CASCADE

CASCADE の代わりに SETNULLを指定すると、NULL値のセットができる。



*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*

制約は、オブジェクトエクスプローラー内のテーブル名を右クリックし、
「最新の情報に更新」をクリックすると
オブジェクトエクスプローラーの表示が変わって、制約とかキーとかが確認できる。