SQLには互いの表関連の整合性を保つために参照整合性という仕組みがあります。 リレーショナル・データベースならではの機能ですが、MySQLの旧安定版の3.23 (Old production release) では参照整合性はサポートされておらず、4.0からサポートされました。 但し、通常のテーブル型ではできず、InnoDB型で作成されたテーブル同士の関連でのみ可能となります。 SQLコマンドから参照整合性を扱えることで次のような利点があります。
データベースはMySQLのtestを使用し、関連テーブルは下の図のように社員表(参照表)と部門表(被参照表)を作成することにします。 部門表には全ての部署名が存在し、社員表には全ての社員が存在します。社員はいずれかの部署に属しており、 存在しない所属コードを持つことはありえません。 ここでは所属コードを削除した場合に関連する社員も同時に削除されることにします。
1: C:\>cd mysql\bin 2: C:\mysql\bin> 3: 4: C:\mysql\bin>mysql -u USERID -p 5: Enter password: ******** 6: Welcome to the MySQL monitor. Commands end with ; or \g. 7: Your MySQL connection id is 2 to server version: 4.0.15-nt 8: 9: Type 'help;' or '\h' for help. Type '\c' to clear the buffer. 10: 11: mysql> use test 12: Database changed 13: mysql> create table section ( 14: -> code char(4) primary key, 15: -> s-name varchar(20) not null unique 16: -> ) type=InnoDB; 17: Query OK, 0 rows affected (0.03 sec) 18: 19: mysql> create table member ( 20: -> ID char(4) primary key, 21: -> name varchar(20) not null unique, 22: -> code char(4) not null, 23: -> index(code), 24: -> foreign key(code) references section(code) 25: -> on delete cascade 26: -> ) type=InnoDB; 27: Query OK, 0 rows affected (0.05 sec) 28: 29: mysql> show fields from section; 30: +--------+-------------+------+-----+---------+-------+ 31: | Field | Type | Null | Key | Default | Extra | 32: +--------+-------------+------+-----+---------+-------+ 33: | code | char(4) | | PRI | | | 34: | s-name | varchar(20) | | UNI | | | 35: +--------+-------------+------+-----+---------+-------+ 36: 2 rows in set (0.00 sec) 37: 38: mysql> show fields from member; 39: +-------+-------------+------+-----+---------+-------+ 40: | Field | Type | Null | Key | Default | Extra | 41: +-------+-------------+------+-----+---------+-------+ 42: | ID | char(4) | | PRI | | | 43: | name | varchar(20) | | UNI | | | 44: | code | char(4) | | MUL | | | 45: +-------+-------------+------+-----+---------+-------+ 46: 3 rows in set (0.00 sec)