[SQL]-制約


1.制約タイプ

  • PRIMARY KEY
  • FOREIGN KEY
  • UNIQUE
  • CHECK
  • DEFAULT
  • NULL
  • 2.主キー制約

  • データを区別できる識別子をプライマリ・キーと呼ぶ.
  • 冗長X、NULL X
  • 方法.
    USE naver_db;
    DROP TABLE IF EXISTS buy, member;
    CREATE TABLE member
    ( mem_id CHAR(8) NOT NULL PRIMARY KEY,
    mem_name VARCHAR(10) NOT NULL,
    height TINYINT UNSIGNED NULL
    );
    方法.
    DROP TABLE IF EXISTS member;
    CREATE TABLE member
    (mem_id CHAR(8) NOT NULL,
    mem_name VARCHAR(10) NOT NULL,
    height TINYINT UNSIGNED NULL,
    PRIMARY KEY (mem_id)
    );
    方法.
    CREATE TABLE member
    ( mem_id CHAR(8) NOT NULL,
    mem_name VARCHAR(10) NOT NULL,
    height TINYINT UNSIGNED NULL
    );
    ALTER TABLE member
    ADD CONSTRAINT
    PRIMARY KEY (mem_id);
    プライマリ・キーの名前付け
    CREATE TABLE member
    (mem_id CHAR(8) NOT NULL,
    mem_name VARCHAR(10) NOT NULL,
    height TINYINT UNSIGNED NULL,
    CONSTRAINT PRIMARY KEY PK_member_mem_id (mem_id)
    );

    3.外部キー制約

  • 外部キー制約は、2つのテーブル間の関係を接続し、データの整合性を保証します.
  • 方法.
    DROP TABLE IF EXISTS buy, member;
    CREATE TABLE member
    (mem_id char(8) NOT NULL PRIMARY KEY,
    mem_name VARCHAR(10) NOT NULL,
    height TINYINT UNSIGNED NULL
    );
    CREATE TABLE buy
    (num INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    mem_id CHAR(8) NOT NULL,
    prod_name CHAR(6) NOT NULL,
    FOREIGN KEY(mem_id) REFERENCES member(mem_id)
    );
    方法.
    DROP TABLE IF EXISTS buy;
    CREATE TABLE buy
    (num INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    mem_id CHAR(8) NOT NULL,
    prod_name CHAR(8) NOT NULL
    );
    ALTER TABLE buy
    ADD CONSTRAINT
    FOREIGN KEY(mem_id)
    REFERENCES member(mem_id);
  • を削除しようとしたときにエラーが発生しました.
    条件テーブルのカラム名が変更されたときに参照テーブルのカラム名を自動的に変更するには、次の手順に従います.
  • DROP TABLE if EXISTS buy;
    CREATE TABLE buy
    (num INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    mem_id CHAR(8) NOT NULL,
    prod_name CHAR(6) NOT NULL
    );
    ALTER TABLE buy
    ADD CONSTRAINT
    FOREIGN KEY(mem_id) REFERENCES member(mem_id)
    ON UPDATE CASCADE
    ON DELETE CASCADE;

    4.一意キー制約

  • の一意の値を入力し、NULL
  • を許可します.
    DROP TABLE if EXISTS buy, member;
    CREATE TABLE member
    (mem_id CHAR(8) NOT NULL PRIMARY KEY,
    mem_name VARCHAR(10) NOT NULL,
    height TINYINT UNSIGNED NULL,
    email CHAR(30) NULL UNIQUE
    );
  • テスト
  • INSERT INTO member VALUES('BLK', '블랙핑크', 163, '[email protected]');
    INSERT INTO member VALUES('TWC', '트와이스', 167, NULL);
    INSERT INTO member VALUES('APN', '에이핑크', 164, '[email protected]');

    EメールにはUNIQUE制約は含まれていません.
    NULL値を挿入可能

    5.制約の確認


    入力データ
  • の機能を確認します.
  • DROP TABLE if EXISTS member;
    CREATE TABLE member
    (mem_id CHAR(8) NOT NULL PRIMARY KEY,
    mem_name VARCHAR(10) NOT NULL,
    height TINYINT UNSIGNED NULL CHECK(height >= 100),
    phone1 CHAR(3) NULL
    );
  • テスト
  • INSERT INTO member VALUES('BLK', '블랙핑크', 163, NULL);
    INSERT INTO member VALUES('TWC', '트와이스', 99, NULL);

    TWICEは身長が100以下なので入れません
  • が必要な場合は、ALTER TABLE文を使用して制約を追加できます.
  • ALTER TABLE member                                   
    ADD CONSTRAINT                                       
    CHECK(phone1 IN('02','031','032','054','055','061'));

    6.デフォルトの定義

  • の値が入力されていない場合は、自動的に入力する値を指定しておきます.
  • DROP TABLE if EXISTS member;
    CREATE TABLE member
    (mem_id CHAR(8) NOT NULL PRIMARY KEY,
    mem_name VARCHAR(10) NOT NULL,
    height TINYINT UNSIGNED NULL DEFAULT 160,
    phone1 CHAR(3) NULL
    );
  • ALTER TABLEゲートは、後で追加できます.
  • ALTER TABLE member                  
    ALTER COLUMN phone SET DEFAULT '02';
  • テスト
  • INSERT INTO member VALUES('RED', '레드벨벳', 161, '054');
    INSERT INTO member VALUES('SPC', '우주소녀', DEFAULT, DEFAULT);
    SELECT * FROM member;