mysql外部キー(foreign key)の使用は、同じtableの2つの外部キーが1つのtableのプライマリキーに対応する
4381 ワード
公式文法:
tableの作成の公式例:tableはinnodbタイプである必要があります.インデックスも作成します.
[CONSTRAINT [symbol
]] FOREIGN KEY
[index_name
] (index_col_name
, ...)
REFERENCES tbl_name
(index_col_name
,...)
[ON DELETE reference_option
]
[ON UPDATE reference_option
]
reference_option
:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
外部キーの役割:table Aとtable B、table Aにusername、password、table Bにusername、friednameがあり、table Bのusernameを外部キーに設定すると、table Aのプライマリキーusernameが関連付けられ、table Aのusernameが削除または更新されるとtable Bも更新または削除され、table Bにtable Aにないusernameが挿入されないtableの作成の公式例:tableはinnodbタイプである必要があります.インデックスも作成します.
CREATE TABLE parent (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB;
同じtableの2つの外部キーは、1つのtableのプライマリキーの作成に対応します.create table if not exists t_user( username varchar(64) primary key, password varchar(64))ENGINE=InnoDB DEFAULT CHARSET=latin1; create table if not exists t_friend( username varchar(64), friend varchar(64), primary key(username, friend), INDEX (username,friend), CONSTRAINT fk_PerOrders FOREIGN KEY (username) REFERENCES t_user(username) ON DELETE CASCADE, CONSTRAINT fk_PerOrders1 FOREIGN KEY (friend) REFERENCES t_user(username) ON DELETE CASCADE )ENGINE=InnoDB DEFAULT CHARSET=latin1;
上面的fk_PerOrders可以任意定义的
删除table t_user时,要按照如下:
SET FOREIGN_KEY_CHECKS=0; DROP TABLE t_user; DROP TABLE t_user; SET FOREIGN_KEY_CHECKS=1;