ホームページ >データベース >mysql チュートリアル >MySQLでテーブルを作成するときに外部キーを設定するにはどうすればよいですか?
テーブル作成時に外部キーを設定する Mysql メソッド: "CREATE TABLE" ステートメントで、"[CONSTRAINT >] FOREIGN KEY フィールド名 [, フィールド名 2,...] を渡します。 REFERENCES 」主キー列 1 [,主キー列 2,...]」ステートメントの設定。
MySQL 外部キー制約 (FOREIGN KEY) はテーブルの特別なフィールドであり、多くの場合主キー制約と一緒に使用されます。関連付けられた 2 つのテーブルの場合、関連付けられたフィールドの主キーが配置されているテーブルが主テーブル (親テーブル) となり、外部キーが配置されているテーブルが副テーブル (子テーブル) になります。
テーブルの作成時に外部キー制約を設定する
CREATE TABLE ステートメントで、FOREIGN KEY キーワードを使用して外部キーを指定します。構文形式は次のとおりです。
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…] REFERENCES <主表名> 主键列1 [,主键列2,…]
Example
テーブル間の外部キー関係を示すために、この例では、test_db データベースに部門テーブル tb_dept1 を作成します。構造は下表の通りです。
データ型 | 備考 | |
---|---|---|
# #INT(11) | 部門番号 | |
VARCHAR(22) | 部門名 | |
VARCHAR(22) | 部門の場所 |
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 に依存します。
注: セカンダリ テーブルの外部キーはプライマリ テーブルの主キーに関連している必要があり、主キーと外部キーのデータ型は一貫している必要があります。たとえば、両方とも INT 型であるか、両方とも CHAR 型です。このような要件が満たされていない場合、スレーブ テーブルの作成時に「ERROR 1005 (HY000): Can't create table」エラーが発生します。
推奨チュートリアル:
mysql ビデオ チュートリアル以上がMySQLでテーブルを作成するときに外部キーを設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。