Mysql で外部キーを追加する方法: 1. CREATE TABLE ステートメントで、FOREIGN KEY キーワードを使用して外部キーを追加します; 2. ALTER TABLE ステートメントで、ADD および FOREIGN KEY キーワードを使用して外部キーを追加します。
推奨コース: MySQL チュートリアル 。
MySQL 外部キー制約 (FOREIGN KEY) はテーブルの特別なフィールドであり、主キー制約と一緒によく使用されます。関連付けられた 2 つのテーブルの場合、関連付けられたフィールドの主キーが配置されているテーブルが主テーブル (親テーブル) となり、外部キーが配置されているテーブルが副テーブル (子テーブル) になります。
外部キーは、マスター テーブルとスレーブ テーブル間の関連付けを確立し、2 つのテーブルのデータの接続を確立し、2 つのテーブルのデータの一貫性と整合性を制約するために使用されます。たとえば、果物の屋台には、リンゴ、桃、プラム、スイカの 4 種類の果物しか置いていないとすると、果物を買いに果物屋に来たとき、選択できるのはリンゴ、モモ、プラム、スイカだけになります。は購入できません。
レコードがメイン テーブルから削除されると、それに応じてテーブルの対応するレコードも変更する必要があります。テーブルには 1 つ以上の外部キーを含めることができ、外部キーは null にすることもできます。null でない場合、各外部キーの値はメイン テーブルの主キーの特定の値と等しくなければなりません。
外部キーを定義するときは、次の規則に従う必要があります:
メイン テーブルはデータベースにすでに存在しているか、データベース内に存在している必要があります。現在作成中のテーブル。後者の場合、マスターテーブルとスレーブテーブルは同一のテーブルとなり、このようなテーブルを自己参照テーブルと呼び、この構造を自己参照整合性と呼びます。
メインテーブルには主キーを定義する必要があります。
主キーには null 値を含めることはできませんが、外部キーでは null 値が許可されます。つまり、外部キーのすべての非 null 値が指定された主キーに出現する限り、外部キーの内容は正しいことになります。
メインテーブルのテーブル名の後に列名または列名の組み合わせを指定します。この列または列の組み合わせは、メイン テーブルの主キーまたは候補キーである必要があります。
外部キーの列数は、メイン テーブルの主キーの列数と同じである必要があります。
外部キーの列のデータ型は、メイン テーブルの主キーの対応する列のデータ型と同じである必要があります。
#テーブルの作成時に外部キー制約を設定する
CREATE TABLE ステートメントで、FOREIGN KEY キーワードを使用します。外部キー。具体的な構文形式は次のとおりです:[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…] REFERENCES <主表名> 主键列1 [,主键列2,…]
例 1
テーブル間の外部キー関係を示すために、この例はtest_db データベース 部門テーブル tb_dept1 のテーブル構造を次の表に示します。 tb_dept1 を作成する SQL ステートメントと実行結果は次のとおりです。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)
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)
注: セカンダリ テーブルの外部キーはプライマリ テーブルの主キーに関連している必要があり、主キーと外部キーのデータ型は一貫している必要があります。たとえば、両方とも INT 型であるか、両方とも CHAR 型です。このような要件が満たされていない場合、スレーブ テーブルの作成時に「ERROR 1005 (HY000): Can't create table」エラーが発生します。
#テーブルの変更時に外部キー制約を追加するテーブルの変更時に外部キー制約を追加することもできますが、外部キー制約はキー 制約の前提条件は、副テーブルの外部キー列のデータが主テーブルの主キー列のデータと一致している必要があり、そうでない場合はデータが存在しないということです。
データ テーブルを変更するときに外部キー制約を追加するための構文形式は次のとおりです。
ALTER TABLE <数据表名> ADD CONSTRAINT <外键名> FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
例 2
データ テーブル 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)
注: 作成したデータ テーブルに外部キー制約を追加するときは、外部キー制約が追加される列の値がすべて主キー列からのものであることを確認してください。列を空にすることはできません。
外部キー制約の削除外部キー制約がテーブル内で不要になった場合は、テーブルから削除する必要があります。外部キーを削除すると、マスターテーブルとスレーブテーブルの関連付けが解除されます。
外部キー制約を削除するための構文形式は次のとおりです。
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 サイトの他の関連記事を参照してください。