-
2021-04-20 05:41:03
mysql中添加外键约束
经常用到,但是总是记不住。
语法如下:
ALTER TABLE JOB ADD CONSTRAINT fk_prono
FOREIGN KEY(PRONO)
REFERENCES PROJECT(PRONO)
ON DELETE CASCADE
ON UPDATE NO ACTION;
我在mysql中添加了外键约束,试了半天没成功,后来把外键的名字由FK改成FK_1就好了,可能mysql中FK是个保留字,注意!
相关文档:
MySQL中有很多的基本命令,show命令也是其中之一,在很多使用者中对show命令的使用还容易产生混淆,本文汇集了show命令的众多用法。
a. show tables或show tables from database_name; -- 显示当前数据库中所有表的名称。
b. show databases; -- 显示mysql中所有数据库的名称。
c. show columns from table_nam ......
所以除了给账户权限以外 还有修改 /etc/mysql/my.cnf
找到 bind-address = 127.0.0.1 修改为 bind-address = 0.0.0.0
重启mysql : sudo /etc/init.d/mysql restart
否则会报 ERROR 2003 (HY000): Can't connect to MySQL server on 'x.x.x.x' (111)
好吧 我是mysql菜鸟 以前都是走localhost的
......
/**
* 操作mysql
的基础类,其它与mysql有关的类都继承于此基类
*
* 此class中的$table都是已经包含表前缀的完整表名
*
* ver 20090717
* 使用范例
* $db = new DB('localhost','root','password','database','utf8');
* $db->debug = true;
* $db->primaryKeys = array (
* 'table_1 ......
解决方法(转):---但执行第一种办法时出现错误,第二种办法成功
1。改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"
mysql -u root -pvmwaremysql>use mysql;mysql>update use ......
http://www.developer.com/java/data/article.php/3417381/Using-JDBC-with-MySQL-Getting-Started.htm#Preface
Preface
Purpose
The purpose of this lesson is to get you beyond the initial hurdles involved in:
Downloading and installing a MySQL database server.
Preparing that database for use with JDBC ......
更多相关内容 -
SQL语句:给表添加外键的四种方式
2020-12-14 17:56:451. 创建表的同时添加外键 create table score( score int(3), st_id int(16), cs_id int(16), primary key(st_id,cs_id), FOREIGN KEY (st_id) REFERENCES student(id), FOREIGN KEY (cs_id) REFERENCES classes(id)... -
SQL语句删除和添加外键、主键的方法
2020-09-05 17:30:20本文将详细介绍SQL语句删除和添加外键、主键的方法,需要的朋友可以参考下 -
在Oracle数据库中添加外键约束的方法详解
2020-12-16 01:13:47添加外键:添加一个外键到表。 删除外键:删除已选择的外键。 使用 名 编辑框来输入新键的名。 使用 参考模式、参考表 和 参考限制 下拉列表来分别选择一个外部索引数据库、表及限制。 要包含栏位到键,只需简单地... -
添加外键
2020-08-18 15:55:24创建完表后添加 ...# 添加外键: `Score` 表中的 `SubjectId`字段 关联 `Subject` 表的 `SubjectId` 字段 alter table `Score` add constraint score_subject foreign key(`SubjectId`) references `Su创建完表后添加
语法: alter table `表名` add constraint 自定义外键名 foreign key (外键字段) references `关联表名`(`关联字段`);
示例:
# 添加外键: `Score` 表中的 `SubjectId`字段 关联 `Subject` 表的 `SubjectId` 字段 alter table `Score` add constraint score_subject foreign key(`SubjectId`) references `Subject`(`SubjectId`);
- 外键值可以为
null
- 外键字段与引用一张表的某个字段的时候,被引用的字段必须具有
unique
(唯一)约束 - 有了外键引用以后,表分为父表和子表,引用的表为父表,被引用的表为子表
- 创建时先创建父表
- 删除时先创建子表
- 插入时先插入父表数据
创建表的时候添加
-- 父表 create table if not exists `father_table`( `test_field1` int(4) primary key )charset='utf8mb4'; -- 子表 create table if not exists `child_table`( `test_field1` int(4), foreign key(`test_field1`) references `father_table`(`test_field1`) )charset='utf8mb4';
- 外键值可以为
-
mysql处理添加外键时提示error 150 问题的解决方法
2021-01-21 14:43:11像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些...已知的原因: 1, 两个字段的类型或者大小不严格匹配,例如,如果一个是INT(10), 那么外键也必须设置成INT(10), -
MySQL添加外键时报错:1215 Cannot add the foreign key constraint的解决方法
2020-09-09 23:00:35大家都知道MySQL中经常会需要创建父子表之间的约束,这个约束是需要建立在主外键基础之上的,最近在MySQL添加外键时发现了一个报错:1215 Cannot add the foreign key constraint,所以这篇文章就给大家介绍了如何... -
Mysql添加外键
2021-08-09 22:27:49当时我的思考过程 构造表格的语句肯定是不会出错(因为构造语句是show create table student得出的) 当时我就认为问题肯定是出现在添加外键的语句 那么分析添加外键的语句的问题 声明键的语句 KEY FK_name(name) ...以下是我的代码部分
CREATE TABLE `student` ( `id` INT(3) NOT NULL AUTO_INCREMENT COMMENT '用户ID', `name` VARCHAR(5) NOT NULL DEFAULT '匿名' COMMENT '用户姓名', `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '用户密码', `birthday` DATETIME DEFAULT NULL COMMENT '用户生日', `address` VARCHAR(15) DEFAULT NULL COMMENT '用户地址', `email` VARCHAR(15) NOT NULL DEFAULT '@qq.com' COMMENT '用户邮箱', `sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别', PRIMARY KEY (`id`) /*添加外键的语句*/ KEY `FK_name`(`name`) CONSTRAINT `FK_name` FOREIGN KEY(`name`) REFERENCES `t`(`name`) /*添加外键的语句结束*/ ) ENGINE=INNODB DEFAULT CHARSET=utf8;
当时我的思考过程
构造表格的语句肯定是不会出错(因为构造语句是show create table student得出的)
当时我就认为问题肯定是出现在添加外键的语句
那么分析添加外键的语句的问题
声明键的语句
KEYFK_name
(name
) 声明了一个关于name的键
给键添加对应的限制
CONSTRAINTFK_name
FOREIGN KEYname
REFERENCESt
(name
)
看上去好像是语句并没有什么毛病所以可能不是出现在语句本身的问题 应该是外键设置方面的某些问题
所以在CSDN上面进行查询可能的情况
以下是查到的信息原文链接:https://blog.csdn.net/wangpeng047/article/details/19624351
- 两个字段的类型或者大小不严格匹配。例如,如果一个是int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint。另外,你还必须确定两个字段是否一个为 signed,而另一个又是unsigned(即:无符号),这两字段必须严格地一致匹配,更多关于signed和unsigned的信息,请参阅:http://www.verysimple.com/blog/?p=57
从上述信息得出两个字段的类型和正负号必须是一致的
检查后 发现的确存在类型不统一这一问题
修改二字段的数据类型和费负属性后 解决这一问题
解决此问题后还是不行 继续研究其他可能性质- 试图设置外键的字段没有建立起索引,或者不是一个primary key(主键)。如果其中一个不是primary key的话,你必须先为它创建一个索引。
要建设外键 其实是一个字段参考另一个表的主键
此处我也有错误
将被references的对象设置为对应表的主键后 大致解决问题- 其中一个或者两个表是MyISAM引擎的表。若想要使用外键约束,表必须是InnoDB引擎(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键,只会建立索引)你需要检查表的引擎类型。
只有InnoDB可以使用外键
此处我选择的是默认选项 默认就是 InnoDB
但是处于保险起见 我选择将引擎修改为InnoDB- 外键的名字不能重复。你应该检查你的数据库以确保外健名字是唯一的,或者你在键名后面加上几个随机的字符以测试是否是这个原因。
看完上述所有的可能错误后,依然没有实现效果 后思考 可能是两个字段名必须相同 于是尝试,终实现外键
-
你可能设置了ON DELETE SET NULL,但是相关的键的字段又设置成了NOTS NULL值。你可能通过修改cascade的属性值或者把字段属性设置成allow null来解决。
-
请确定你的Charset和Collate选项在表级和字段级上的一致。
-
你可能设置为外键设置了一个默认值,如default=0。
-
ALTER声明中有语法错误
这是被参考表的字段设置
这是参考表的字段设置
这是创建外键的对应的语句CREATE TABLE `student` ( `id` INT(3) UNSIGNED NOT NULL COMMENT '学生的id', `name` VARCHAR(5) NOT NULL COMMENT '学生的姓名', `gradeid` INT(5) UNSIGNED NOT NULL COMMENT '学生的成绩id', PRIMARY KEY (`id`,`gradeid`), --创建一个键 KEY `kf_gradeid` (`gradeid`), --对这个键添加限制 CONSTRAINT `kf_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`) ) ENGINE=INNODB DEFAULT CHARSET=utf8
-
详解mysql添加外键的方法
2021-01-19 07:27:31本文主要向大家介绍了mysql添加外键的方法,通过具体的实例让大家了解,希望对大家学习mysql有所帮助。为已经添加好的数据表添加外键:语法:altertable 表名 add constraint FK_ID foreign key(你的外键字段名) ...本文主要向大家介绍了mysql添加外键的方法,通过具体的实例让大家了解,希望对大家学习mysql有所帮助。
为已经添加好的数据表添加外键:
语法:alter
table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);
例:
alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id)
//FK_ID是外键的名称
/*
CREATE
TABLE `tb_active` (
`id`
int(11) NOT NULL AUTO_INCREMENT,
`title`
varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`content`
text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`user_id`
int(11) NOT NULL,
PRIMARY
KEY (`id`),
KEY
`user_id` (`user_id`),
KEY
`user_id_2` (`user_id`),
CONSTRAINT
`FK_ID` FOREIGN KEY (`user_id`) REFERENCES `tb_user` (`id`)
)
ENGINE=InnoDB DEFAULT CHARSET=latin1
*/
删除外键
语法:
ALTER TABLE table-name DROP FOREIGN KEY key-id;
例:
ALTER TABLE `tb_active` DROP FOREIGN KEY `FK_ID`
自动键更新和删除:
外键可以保证新插入的记录的完整性,但是,如果在REFERENCES从句中已命名的表删除记录会怎么样?在使用同样的值作为外键的辅助表中会发生什么?
很明显,那些记录也应该被删除,否则在数据库中就会有很多无意义的孤立记录,MYSQL可以通过向FOREIGN
KEY...REFERENCES修饰符添加一个ON DELETE或ON
UPDATE子句简化任务,它告诉了数据库在这种情况如何处理孤立任务
关键字
含义
CASCADE
删除包含与已删除键值有参照关系的所有记录
SET
NULL 修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段)
RESTRICT
拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置)
NO
ACTION 啥也不做
请注意,通过ON
UPDATE 和 ON DELETE规则,设置MYSQL能够实现自动操作时,如果键的关系没有设置好,可能会导致严重的数据破坏,
例如:如果一系列的表通过外键关系和ON
DELETE CASCADE
规则连接时,任意一个主表的变化都会导致甚至只和原始删除有一些将要联系的记录在没有警告的情况被删除,所以,我们在操作之前还要检查这些规则的,操作之后还要再次检查.
添加外键
alter
table locstock add foreign key locstock_ibfk2(stockid) references product(stockid)
locstock
为表名, locstock_ibfk2 为外键名 第一个括号里填写外键列名, product为表名,第二个括号里是写外键关联的列名
删除外键
alter
table locstock drop foreign key locstock_ibfk2
查看表有哪些外键
show
create table locstock
[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}]
所有tables必须是InnoDB型
,它们不能是临时表。
在引用表中,必须有一个索引,外键列以同样的顺序被列在其中作为第一列。这样一个索引如果不存在,它必须在引用表里被自动创建。
在引用表中,必须有一个索引,被引用的列以同样的顺序被列在其中作为第一列。
不支持对外键列的索引前缀。这样的后果之一是BLOB和TEXT列不被包括在一个外键中, 这是因为对这些列的索引必须总是包含一个前缀长度。
如果CONSTRAINTsymbol 被给出,它在数据库里必须是唯一的。如果它没有被给出,InnoDB自动创建这个名字。
本文由职坐标整理并发布,希望对同学们学习MySQL有所帮助,更多内容请关注职坐标数据库MySQL数据库频道!
-
Navicat mysql添加外键
2022-03-09 19:59:39外键条件 在我们使用外键的时候,应该遵循如下条件: 1外键要存在,首先必须保证表的引擎是 InnoDB(默认的存储引擎),如果不是 InnoDB 存储引擎,那么外键可以创建成功,但没有约束作用; 2外键字段的字段类型... -
Mysql添加外键约束
2021-01-18 19:42:51简单说一下使用外键的好处1、完整性约束比如:用户表中有字段 用户编号(id) , 名称(username)设备表中有字段 设备编号(id) , 设备名称(devicename) 设备属于的用户编号(user_id)把设备表中的用户编号设置成外键,... -
数据库——添加外键约束
2021-09-29 10:48:10添加外键约束名字一定不能重复 -
MySQL – 无法添加外键
2021-01-19 02:02:17INCREMENT=3 DEFAULT CHARSET=utf8 接下来我尝试添加一个带有这样一个语句的表(在创建表时没有添加外键,因为它有问题): CREATE TABLE `messages` ( `id` bigint(20) NOT NULL AUTO_INCREMENT,`from` bigint(20) NOT... -
Mysql添加外键约束.
2021-01-18 21:38:54最近学习遇到一条添加外键约束的语句,记录下来.alter table selection add constraint FK_Reference_1 foreign key(course) references course (id) on delete restrict on update restrict;alter table selection ... -
SQL添加外键约束
2021-11-05 16:24:04SQL添加外键约束 alter table 表 add constraint 外键约束名称 foreign key (列) references 表 (主键列); -
mysql添加外键约束
2021-02-02 14:14:01sd_settle(settle_id) ALTER TABLE scm_material_settle_yd ADD CONSTRAINT material_settle_yd_foreignid FOREIGN KEY(form_id) REFERENCES scm_yd_settle(settle_id) 删除外键: alter table product drop foreign... -
MySQL无法添加外键约束
2020-08-18 11:32:11因此,作为项目需求,我试图将外键约束添加到数据库中,并且它第一次或在两个不同的表上运行,但是在尝试添加外键约束时,我在两个表上遇到了错误。 The error message that I get is: 我收到的错误消息是: ERROR ... -
SQL添加外键
2021-10-07 20:58:12创建表时添加 ...创建表结束后添加外键 ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (外键字段) REFERENCES 主表名称 (主表列名); 删除外键 ALTER TABLE 表名 DROP FOREIGN KEY 外键名称; ... -
什么是外键,如何添加外键?
2021-12-02 17:33:05外键 个人理解就是 外部的一个主键 Mysql里主键就是确保不能重复的一个关键词 primary ...添加外键 那么就先需要外键的限制条件 那么就需要先创建主键表 (有外键的表 叫外键表,另外一个就叫主键表) 首. -
Navicat添加外键详细操作
2020-12-22 14:27:08Navicat添加外键详细操作发布时间:2018-11-22 00:41,浏览次数:1162, 标签:Navicat前言用Navicat为mysql数据库的两个表之间建立外键关系,出现“cannot add foreign keyconstraint”错误,操作了很久不知道怎么回... -
表添加外键约束
2021-03-26 11:05:231、如果表已经存在 alter table audit add constraint emp_no foreign key(emp_no) references employees...foreign key(emp_no): 将emp_no 添加为外键 references employees_test(id):外键约束引用的是employees_te -
mysql 数据库添加外键的几种方式
2021-02-08 12:00:32创建主表:班级CREATE TABLE class(cid INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(15) NOT NULL)INSERT INTOclassVALUES(NULL,'六年级一班')INSERT INTO class ...在属性值后面直接添加(有点小问题)CREATE TAB... -
MySQL添加外键时报错:ERROR 1452
2021-07-26 21:10:45这个外键不是另一个表的主键,即外键不存在 二.外键存在还是报错,可能是外键勾选了属性NOT NULL,但是这张表里本来已经有数据了,现在新增了一列,这一列肯定是空的,所以又不符合NOT NULL的属性。所以可以先新增... -
Navicat添加外键详细操作步骤
2020-12-22 14:27:11前言用Navicat为mysql数据库的两个表之间建立外键关系,出现“cannot add foreign key constraint”错误,操作了很久不知道怎么回事,发现竟然是。。。。正文想要建立class表与student表之间的外键连接,class为父表... -
navicat 数据表添加外键
2021-03-21 18:09:06数据库简介 数据表简介 user表(用户表) 存放用户相关信息,字段...userId是myorder表中的外键,关联的是user表中的主键userId 注意: 1.myorder表中必须先新建userId字段 -
如何添加外键(MySQL)
2021-01-19 19:17:32我对SQL非常新,我试图执行一个简单的ALTER TABLE来创建一个新列,并将其用作外键来引用我的数据库中的另一个简单的表。我把两个表都改为InnoDB但是,当执行ALTER TABLE代码时,会出现以下错误:Error 1452 Cannot ...