【澳门金沙vip】MySQL创建数据表并建立主外键关系

为mysql数据表建立主外键需要注意以下几点:

今天学完了最后一个mysql字段约束外键,做一下总结:

需要建立主外键关系的两个表的存储引擎必须是InnoDB。

一、外键约束和要求

1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表;
2.数据表的存储引擎只能为InnoDB
3.外键列和参照列必须有相似的数据类型。其中数字的长度或是否有符号位必须相同;而且字符的长度则可以不同;
4.外键列和参照列必须创建索引。如果外键列不存在索引的话,mysql将自动创建索引

 

*物理外键和逻辑外键
只有InnoDB才支持物理外键,平时的设计中是很少定义物理外键约束的,而是按照表与表之间的逻辑关系来定义逻辑外键,不设置物理外键

外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型。

二、外键约束的参照操作

1.CASCADE:从父表中删除或者更新且自动删除或更新子表中匹配的行

    • 删除:删除主表时自动删除从表。删除从表,主表不变
    • 更新:更新主表时自动更新从表。更新从表,主表不变    

2.SET
NULL:从父表删除或更新行,并设置了子表中的外键列为NULL,如果使用该选项,必须保证子表列没有指定NOT
NULL

    • 删除:删除主表时自动更新从表值为NULL。删除从表,主表不变
    • 更新:更新主表时自动更新从表值为NULL。更新从表,主表不变    

3.RESTRICT:拒绝对父表的删除或更新操作

4.NO ACTION:标准SQL的关键字,在mysql中与RESTRICT相同

NULL、RESTRICT、NO ACTION

删除:从表记录不存在时,主表才可以删除。删除从表,主表不变

更新:从表记录不存在时,主表才可以更新。更新从表,主表不变

 

三、创建外键命令

明确指定外键的名称:alter table book add constraint FK_BOOK foreign
key(pubid) references pub_com(id) on delete restrict(CASCADE,SET NULL)
on update restrict(CASCADE,SET NULL) ;

外键列和参照列必须创建索引,如果外键列不存在索引,mysql将自动创建索引。

 

一、SQL语句创建数据表并设置主外键关系

create table demo.ChineseCharInfo
(
    ID        int     not null     auto_increment,
    Hanzi     varchar(10)     not null,
    primary key (ID)
)
engine=innodb auto_increment=1 default charset=utf8 collate=utf8_general_ci;

create table demo.ChinesePinyinInfo
(
    ID     int     not null     auto_increment,
    CharID     int     null,
    Pinyin varchar(10)     null,
    Tone tinyint unsigned     null,
    primary key (ID),

    -- 方式一:不指定外键名称,数据库自动生成
    foreign key (CharID) references ChineseCharInfo(ID) on delete cascade on update cascade 

    -- 方式二:指定外键名称为(FK_Name)
    -- constraint FK_Name foreign key (CharID) references ChineseCharInfo(ID) on delete cascade on update cascade 
)
engine=innodb auto_increment=1 default charset=utf8 collate=utf8_general_ci;

 

二、当数据表已经存在时,就要使用下面的方法建立主外键关系

-- 为表(demo.ChinesePinyinInfo)中字段(CharID)添加外键,并指定外键名为(FK_Name)
alter table demo.ChinesePinyinInfo add constraint FK_Name foreign key (CharID) references ChineseCharInfo(ID);

-- 为表(demo.ChinesePinyinInfo)中字段(CharID)添加外键,不指定外键名,由数据库自动生成外键名
alter table demo.ChinesePinyinInfo add foreign key (CharID) references ChineseCharInfo(ID);