MySQL创建数据表并建立主外键关系
为mysql数据表建立主外键需要注意以下几点:
需要建立主外键关系的两个表的存储引擎必须是InnoDB。
外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型。
外键列和参照列必须创建索引,如果外键列不存在索引,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。
MySQL创建数据表并建立主外键关系的更多相关文章
- SQL Server语句创建数据库和表——并设置主外键关系
简单的创建数据库的 SQL 语句: use master go if exists(select * from sysdatabases where name='Test') begin select ...
- SQL Server数据库中导入导出数据及结构时主外键关系的处理
2015-01-26 软件开发中,经常涉及到不同数据库(包括不同产品的不同版本)之间的数据结构与数据的导入导出.处理过程中会遇到很多问题,尤为突出重要的一个问题就是主从表之间,从表有外检约束,从而导致 ...
- Sql Server有主外键关系时添加、删除数据
当表之间有主外键关系时删除数据会被约束,添加.删除失败 解决办法,我们可以先把主外键关系的检查约束给关掉 → 然后删除数据 → 之后再把约束打开 查询出关掉所有外键约束的语句 SELECT 'ALTE ...
- EntityFramework Core 迁移忽略主外键关系
前言 本文来源于一位公众号童鞋私信我的问题,在我若加思索后给出了其中一种方案,在此之前我也思考过这个问题,借此机会我稍微看了下,目前能够想到的也只是本文所述方案. 为何要忽略主外键关系 我们不仅疑惑为 ...
- MySQL 创建数据表
MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (col ...
- 九、MySQL 创建数据表
MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (col ...
- SQL SERVER中获取表间主外键关系
sql server 2008中的主外键关系获取方式: 转自:http://www.cnblogs.com/ke10/archive/2012/06/11/2544655.html SELECT OB ...
- 通过SQL脚本来查询SQLServer 中主外键关系
在SQLServer中主外键是什么,以及主外键如何创建,在这里就不说了,不懂的可以点击这里,这篇文章也是博客园的博友写的,我觉得总结的很好: 此篇文章主要介绍通过SQL脚本来查看Sqlserver中主 ...
- MySQL创建数据表
* 创建数据表 * * * 一.什么是数据表 * * * * 二.创建数据表的SQL语句模型 * * DDL * * ...
随机推荐
- javascript 原型世界浅析
一. 无中生有 起初,什么都没有. 造物主说:没有东西本身也是一种东西啊,于是就有了null: 现在我们要造点儿东西出来.但是没有原料怎么办? 有一个声音说:不是有null嘛? 另一个声音说:可是nu ...
- ASP.NET MVC View使用Conditional compilation symbols
由于View(.cshtml)的运行时编译关系,在项目级别中定义的symbols是无法被直接使用的.需要在Web.config中添加compilerOptions(在View目录下的Web.confi ...
- jfinal如何获取参数为数组的值
前台: var postParams = { ids:["qw","ew"]}; 后台: String[] userids = this.getParaValu ...
- yii---进行接受参数
GET接受参数: Yii::$app->request->get($key, $default):第一个参数($key)为用户get请求的key,第一个参数选填:第二个参数($defaul ...
- java后台设计简单的json数据接口,设置可跨域访问,前端ajax获取json数据
在开发的过程中,有时候我们需要设计一个数据接口.有时候呢,数据接口和Web服务器又不在一起,所以就有跨域访问的问题. 第一步:简单的设计一个数据接口. 数据接口,听起来高大上,其实呢就是一个简单的Se ...
- HDU - 5651 xiaoxin juju needs help 逆元模板
http://acm.hdu.edu.cn/showproblem.php?pid=5651 题意:生成回文串.输出所有回文串的可能数. 题解:mod除法会损失高位,用逆元来代替除法,模板如下 ac代 ...
- Cloudrea manager5安装CDH5文档
一.主机规划.存储规划 服务器配置信息:CentOS6.5 最小化安装+development tools组包,其余组件yum安装即可. 二.系统设置如下: 1.服务器信息如下(/etc/hosts文 ...
- 代码参数里的 payload 是什么意思???
代码参数里的 payload 是什么意思???
- w_scripting_language
https://en.wikipedia.org/wiki/Scripting_language A scripting or script language is a programming lan ...
- linux环境下python的部署
linux系统环境自带python2.6,但有时我们项目使用的版本可能是3.x以上等等,此时我们需要在linux中再安装项目所需的python版本,此时就涉及多版本共存问题了,很多同学在安装多个版本P ...