mysql外部キー(foreign key)の使用は、同じtableの2つの外部キーが1つのtableのプライマリキーに対応する

4381 ワード

公式文法:
[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;