mysql 外键(foreign key)的使用,同一个table的两个外键对应一个table的主键

官方语法:

[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,friendname,当把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的两个外键对应一个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; 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值