ホームページ >データベース >mysql チュートリアル >MySQL で外部キー制約を設定するにはどうすればよいですか?
MySQL 外部キー制約 (FOREIGN KEY) は、2 つのテーブルのデータ間のリンクを確立するために使用されます。1 つの列または複数の列にすることができます。テーブルには 1 つ以上の外部キーを含めることができます。
外部キーは参照整合性に対応します。テーブルの外部キーは null にすることができます。null でない場合、各外部キーの値は、別のテーブルの主キーの特定の値と等しくなければなりません。
外部キーはテーブルのフィールドであり、このテーブルの主キーではありませんが、別のテーブルの主キーに対応します。外部キーを定義した後は、別のテーブル内の関連する行を削除することはできません。
外部キーの主な機能は、データの一貫性と整合性を維持することです。たとえば、部門テーブル tb_dept の主キーは id で、従業員テーブル tb_emp5 にはこの ID に関連付けられたキー deptId があります。主テーブル (親テーブル): リレーションシップが関連付けられている 2 つのテーブルの場合、関連付けられたフィールドに主キーを持つテーブルが主テーブルになります。従属テーブル (サブテーブル): 関連付けられたリレーションシップを持つ 2 つのテーブルの場合、関連付けられたフィールドの外部キーが配置されているテーブルがセカンダリ テーブルになります。
#MySQL 外部キー制約を設定するフィールドを選択してください
テーブル作成時に外部キー制約を設定する
FOREIGN KEY キーワードを使用して、データ テーブルに外部キーを作成します。特定の構文ルール[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…] REFERENCES <主表名> 主键列1 [,主键列2,…]その内: 外部キー名は、定義された外部キー制約の名前です。テーブル内に同じ名前の外部キーがあってはなりません。フィールド名は、そのフィールドの列を示します。サブテーブルに外部キー制約を追加する必要があります。メインテーブルの名前、つまり、サブテーブルの外部キーが依存するテーブルの名前。主キー列は、定義された主キー列または列の組み合わせを表します。メインテーブルにあります。
例: テーブル間の外部キー関係を示すために、この例では test_db データベースに部門テーブル tb_dept1 を作成します。テーブル構造は次の表のようになります。
SQL ステートメントを実行して tb_dept1 を作成した結果は次のとおりです。mysql> CREATE TABLE tb_dept1 -> ( -> id INT(11) PRIMARY KEY, -> name VARCHAR(22) NOT NULL, -> location VARCHAR(50) -> ); Query OK, 0 rows affected (0.37 sec)データ テーブル tb_emp6 を作成し、テーブル tb_emp6 に外部キー制約を作成して、そのキー deptId が外部キーとしてテーブル tb_dept1 の主キー ID に関連付けられるようにします。入力 SQL ステートメントと実行結果は以下の通り。
mysql> CREATE TABLE tb_emp6 -> ( -> id INT(11) PRIMARY KEY, -> name VARCHAR(25), -> deptId INT(11), -> salary FLOAT, -> CONSTRAINT fk_emp_dept1 -> FOREIGN KEY(deptId) REFERENCES tb_dept1(id) -> ); Query OK, 0 rows affected (0.37 sec) mysql> DESC tb_emp6; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(25) | YES | | NULL | | | deptId | int(11) | YES | MUL | NULL | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (1.33 sec)上記のステートメントが正常に実行されると、fk_emp_dept1 という名前の外部キー制約がテーブル tb_emp6 に追加されます。外部キー名は deptId で、テーブル tb_dept1 の主キー ID に依存します。 ヒント: 関連とは、リレーショナル データベース内の関連するテーブル間の接続を指します。これは、同じ属性または属性のグループによって表されます。子テーブルの外部キーは、親テーブルの主キーに関連付けられている必要があり、関連付けられたフィールドのデータ型が一致している必要があります。型が異なる場合、エラー「
ERROR 1005 (HY000): Can'」が表示されます。子テーブルを作成するときに「t create table」が発生します。database.tablename'(errno:150)"。
#テーブル変更時の外部キー制約の追加データ テーブル変更時に外部キー制約を追加するための構文ルールは次のとおりです。
ALTER TABLE <数据表名> ADD CONSTRAINT <索引名> FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
例:
データ テーブル tb_emp2 を変更し、フィールド deptId を外部キーとして設定し、それをデータ テーブル tb_dept1 の主キー ID に関連付けます。入力 SQL ステートメントと実行結果は次のとおりです。が続きます。mysql> ALTER TABLE tb_emp2 -> ADD CONSTRAINT fk_tb_dept1 -> FOREIGN KEY(deptId) -> REFERENCES tb_dept1(id); Query OK, 0 rows affected (1.38 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SHOW CREATE TABLE tb_emp2\G *************************** 1. row *************************** Table: tb_emp2 Create Table: CREATE TABLE `tb_emp2` ( `id` int(11) NOT NULL, `name` varchar(30) DEFAULT NULL, `deptId` int(11) DEFAULT NULL, `salary` float DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_tb_dept1` (`deptId`), CONSTRAINT `fk_tb_dept1` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 1 row in set (0.12 sec)外部キー制約の削除
データベースに定義されている外部キーは、不要になった場合は削除できます。外部キーが削除されると、マスター テーブルとスレーブ テーブルの関連付けが解除されます。MySQL で外部キーを削除するための構文形式は次のとおりです:
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
例:
データテーブルtb_emp2の外部キーを削除 キー制約fk_tb_dept1、入力SQL文と実行結果は以下のとおりです。mysql> ALTER TABLE tb_emp2 -> DROP FOREIGN KEY fk_tb_dept1; Query OK, 0 rows affected (0.19 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SHOW CREATE TABLE tb_emp2\G *************************** 1. row *************************** Table: tb_emp2 Create Table: CREATE TABLE `tb_emp2` ( `id` int(11) NOT NULL, `name` varchar(30) DEFAULT NULL, `deptId` int(11) DEFAULT NULL, `salary` float DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_tb_dept1` (`deptId`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 1 row in set (0.00 sec)FOREIGN KEY が tb_emp2 に存在しなくなり、fk_emp_dept という名前の元の外部キー制約が正常に削除されたことがわかります。
以上がMySQL で外部キー制約を設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。