加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql创建外键的表_MySQL创建数据表并建立主外键关系

发布时间:2022-12-03 08:03:41 所属栏目:MySql教程 来源:未知
导读: 为mysql数据表建立主外键需要注意以下几点:
需要建立主外键关系的两个表的存储引擎必须是InnoDB。
外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型。
外键列和参照列必须

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

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

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

外键列和参照列必须创建索引MySQL 创建数据表,如果外键列不存在索引,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);

三、删除主外键约束

-- 通过修改列的属性来删除自增长,第一个(ID)为原列名,第二个(ID)为新列名

alter table demo.ChinesePinyinInfo change ID ID int not null;

-- 删除表(demo.ChinesePinyinInfo)中的主键约束,如果主键列为自增列,则需要先删除该列的自增长

alter table demo.ChinesePinyinInfo drop primary key;

-- 删除表(demo.ChinesePinyinInfo)中的名称为(FK_Name)的外键

alter table demo.ChinesePinyinInfo drop foreign key FK_Name;

四、主外键关系的约束

如果子表试图创建一个在主表中不存在的外键值,数据库会拒绝任何insert或update操作。

如果主表试图update或者delete任何子表中存在或匹配的外键值,最终动作取决于外键约束定义中的on delete和on update选项。

on delete和on update都有下面四种动作。

cascade:主表删除或更新相应的数据行,则子表同时删除或更新与主表相匹配的行,即级联删除、更新。

set null:主表删除或更新相应的数据和,则子表同时将与主表相匹配的行的外键列置为null。当外键列被设置为not null时无效。

no action:数据库拒绝删除或更新主表。

restrict:数据库拒绝删除或更新主表。如果未指定on delete或on update的动作,则on delete或on update的默认动作就为restrict。

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!