mysql外键约束无法产生约束

mysql 设置外键约束失败
1.确认字段类型,大小是否一致。
2.确认索引类型是否一致
3.其中一个或者两个表是MyISAM引擎的表,若想要使用外键约束,必须是InnoDB引擎,(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键),你可以通过查询浏览器来设置表的引擎类型。
5.你可能设置了ON DELETE SET NULL, 但是相关的键的字段又设置成了NOTS NULL 值。你可能通过修改cascade 的属性值或者把字段属性设置成allow null来搞定这个bug.
6.请确定你的Charset 和 Collate 选项在表级和字段级上的一致。
7.你可能设置为外键设置了一个默认值,如default=0。
8.在这个关系里面,其中的一个字段是一个混合键值中的一个,它没有自己独立的索引,这时,你必须为它创建一个独立的索引。
9.ALTER 声明中有语法错误。
10.请确认你两个表中的数据是否一一对应。
关于mysql外键约束不成功的笔记
关于数据库 约束或主外键约束的插入失败问题
mysql添加外键失败:sql 1452 Cannot add or update a child row:a foreign key constraint fails
Mysql无法创建外键的原因
mysql 添加外键约束报错 1452
mysql中添加外键约束失败(cannot add foreign key constraint)
mysql无法添加外键约束(cannot add foreign key constraint)
mysql添加外键各种失败情况解决
Navicat for Mysql外键创建失败
Mysql无法创建外键的原因汇总
没有更多推荐了,MySQL&InnoDB的外键约束&Foreign Key Constraint
MySQL/InnoDB的外键约束_Foreign Key Constraint
SQL外键约束
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的动作。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
SQL FOREIGN KEY Constraint on CREATE TABLE
下面的 SQL 在 "Orders" 表创建时为 "Id_P" 列创建 FOREIGN KEY:
CREATE TABLE Orders
Id_O int NOT NULL,
OrderNo int NOT NULL,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
SQL Server / Oracle / MS Access:
CREATE TABLE Orders
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders
Id_O int NOT NULL,
OrderNo int NOT NULL,
PRIMARY KEY (Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
SQL FOREIGN KEY Constraint on ALTER TABLE
如果在 "Orders" 表已存在的情况下为 "Id_P" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
撤销 FOREIGN KEY 约束
如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
InnoDB的外键约束
InnoDB中对外键约束定义的语法看起来如下:
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
InnoDB拒绝任何试着在子表创建一个外键值而不匹配在父表中的候选键值的INSERT或UPDATE操作。一个父表有一些匹配的行 的子表,InnoDB对任何试图更新或删除该父表中候选键值的UPDATE或DELETE操作有所动作,这个动作取决于用FOREIGN KEY子句的ON UPDATE和ON DETETE子句指定的referential action。当用户试图从一个父表删除或更新一行之时,且在子表中有一个或多个匹配的行,InnoDB根据要采取的动作有五个选择:
?CASCADE: 从父表删除或更新且自动删除或更新子表中匹配的行。?ON DELETE CASCADE和ON UPDATE CASCADE都可用。在两个表之间,你不应定义若干在父表或子表中的同一列采取动作的ON UPDATE CASCADE子句。
?SET NULL: 从父表删除或更新行,并设置子表中的外键列为NULL。如果外键列没有指定NOT NULL限定词,这就是唯一合法的。?ON DELETE SET NULL和ON UPDATE SET NULL子句被支持。
?NO ACTION: 在ANSI SQL-92标准中,NO ACTION意味这不采取动作,就是如果有一个相关的外键值在被参考的表里,删除或更新主要键值的企图不被允许进行。 InnoDB拒绝对父表的删除或更新操作。?
?RESTRICT: 拒绝对父表的删除或更新操作。?NO ACTION和RESTRICT都一样,删除ON DELETE或ON UPDATE子句。(一些数据库系统有延期检查,并且NO ACTION是一个延期检查。在MySQL中,外键约束是被立即检查的,所以NO ACTION和RESTRICT是同样的)。
SET DEFAULT: 这个动作被解析程序识别,但InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句的表定义。
一个通过单列外键联系起父表和子表的简单例子如下:
CREATE TABLE parent(id INT NOT NULL,
PRIMARY KEY (id)
) TYPE=INNODB;
CREATE TABLE child(id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE
) TYPE=INNODB;
InnoDB允许你用ALTER TABLE往一个表中添加一个新的外键约束:
ALTER TABLE yourtablename
ADD [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
记住先创建需要的索引。你也可以用ALTER TABLE往一个表添加一个自引用外键约束。
InnoDB也支持使用ALTER TABLE来移除 外键:
ALTER TABLE yourtablename DROP FOREIGN KEY fk_
==================================END==================================
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.039 (s). 13 q(s)为了账号安全,请及时绑定邮箱和手机
添加外键约束出错
mysql& ALTER TABLE t2 ADD FOREIGN KEY (pid) REFERENCES t1(id);ERROR 1005 (HY000): Can't create table 't1.#sql-b8c_1' (errno: 150)我搜索了一下原因说是缺少索引,但是我的两个表都有主键,老师不是说创建外键约束的时候自动创建索引吗为什么我的不行呢。跟老师代码一模一样,它添加成功之后字表有了KEY字段,代表索引,我添加不成功。
非常感谢!
我粗心了,外检引用的类型没有写unsigned,看来还是得细心啊,谢谢
写下你的评论...
Copyright (C) 2018 imooc.com All Rights Reserved | 京ICP备 号-11Mysql创建外键约束的两种方式
原创
 10:38:14
526
通过给mysql的表字段添加外键约束,可以有效的保持数据的一致性和完整性,数据就不会很容易出问题。1、创建表时直接创建外键约束create table books(
bookid number(10) not null primary key,
bookName varchar2(20) not null,
price number(10,2),
categoryId number(10) not null references Category(id)
--外键约束
);备注:必须先创建参照表,才能在创建外键约束,即必须现有表Category,再有book2、先创建表,表创建成功后,单独添加外键约束create table books(
bookid number(10) not null primary key,
bookName varchar2(20) not null,
price number(10,2),
categoryId number(10) not null
ALTER TABLE
books ADD CONSTRAINT FK_Book_categoryid FOREIGN KEY(categoryId ) REFERENCES Category(id);以上的2种方式就是目前在Mysql中添加外键约束的方式,希望今后大家在使用关联表时,可以给表的某些字段添加外键约束,使数据能够保持完整性。相关文章:以上就是Mysql创建外键约束的两种方式的详细内容,更多请关注php中文网其它相关文章!
江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。
PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...
ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...
《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。
本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。
所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...
本课以最新版ThinkPHP5.0.10为基础进行开发,全程实录一个完整企业点,从后台到前台,从控制器到路由的全套完整教程,不论是你是新人,还是有一定开发经验的程序员,都可以从中学到实用的知识~~
ThinkPHP是一个快速、开源的轻量级国产PHP开发框架,是业内最流行的PHP框架之一。本课程以博客系统为例,讲述如何使用TP实战开发,从中学习Thinkphp的实践应用。模版下载地址:http:/...
本课程是php实战开发课程,以爱奇艺电影网站为蓝本从零开发一个自己的网站。目的是让大家了解真实项目的架构及开发过程
本课以一个极简的PHP开发框架为案例,向您展示了一个PHP框架应该具有的基本功能,以及具体的实现方法,让您快速对PHP开发框架的底层实现有一个清楚的认识,为以后学习其实的开发框架打下坚实的基础。
javascript是运行在浏览器上的脚本语言,连续多年,被评为全球最受欢迎的编程语言。是前端开发必备三大法器中,最具杀伤力。如果前端开发是降龙十八掌,好么javascript就是第18掌:亢龙有悔。...
本站9月直播课已经结束,本套教程是直播实录,没有报上名或者漏听学员福利来了,赶紧看看吧,说不定这里就有你的菜
轻松明快,简洁生动,让你快速走入HTML5的世界,体会语义化开发的魅力
JavaScript能够称得上是史上使用最广泛的编程语言,也是前端开发必须掌握的三技能之一:描述网页内容的HTML、描述网页样式的CSS以及描述网页行为的JavaScript。本章节将帮助大家迅速掌握...
Bootstrap 是最受欢迎的 HTML、CSS 和 JS 框架,用于开发响应式布局、移动设备优先的 WEB 项目。为所有开发者、所有应用场景而设计,它让前端开发更快速、简单,所有开发者都能快速上手...
《php.cn独孤九贱(2)-css视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了CSS知识...
《php用户注册登录系统》主要介绍网站的登录注册功能,我们会从最简单的实现登录注册功能开始,增加验证码,cookie验证等,丰富网站的登录注册功能
jQuery是一个快速、简洁的JavaScript框架。设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的...
《PHP学生管理系统视频教程》主要给大家讲解了HTML,PHP,MySQL之间的相互协作,实现动态的网页显示和获取数据.
《弹指间学会HTML视频教程》从最基本的概念开始讲起,步步深入,带领大家学习HTML,了解各种常用标签的意义以及基本用法,学习HTML知识为以后的学习打下基础
《最新微信小程序开发视频教程》本节课程是由微趋道录制,讲述了如何申请一个微信小程序,以及开发中需要使用哪些工具,和需要注意哪些等。
全栈工程师
文章总浏览数MySQL 错误 翻译为:不能添加外键约束 求解啊_百度知道
MySQL 错误 翻译为:不能添加外键约束 求解啊
(Err)1215-不能添加外键约束这是为什么啊求解啊本人初学...
(Err)1215 -不能添加外键约束这是为什么啊 求解啊
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
来自电脑网络类芝麻团
数据类型不一致。你的主表,
的数据类型是
unsigned而你的子表,
数据类型是
int因为:INT[(M)] [UNSIGNED] [ZEROFILL]普通大小的整数。带符号的范围是-到。无符号的范围是0到。2种解决办法1、 主表数据类型, 修改为
int2、子表数据类型, 修改为
unsigned下面是一个模拟的例子:-- 主表, id 是
unsigned mysql& CREATE TABLE test_main2 (
VARCHAR(10),
PRIMARY KEY(id)
-& );Query OK, 0 rows affected (0.01 sec)-- 子表, 数据类型
的时候。mysql& CREATE TABLE test_sub2 (
main_id INT ,
VARCHAR(10),
PRIMARY KEY(id),
CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES
test_main2(id)
-& );ERROR 1005 (HY000): Can't create table 'test.test_sub2' (errno: 150)-- 子表, 数据类型
的时候mysql& CREATE TABLE test_sub2 (
main_id INT unsigned,
VARCHAR(10),
PRIMARY KEY(id),
CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES
test_main2(id)
-& );Query OK, 0 rows affected (0.02 sec)
novice_pegasus
来自电脑网络类芝麻团
novice_pegasus
采纳数:280
获赞数:532
参与团队:
你的表是Myisam吧,Myisam可以支持外键?不能吧
&不知道&呃&那我应该怎么改?你说的是MySQL引擎么&我改成这样&还是报这个错呃
呃,那我就不清楚了,外键我自己也没有使用过。
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 mysql删除表的外键约束 的文章

 

随机推荐