Mysql语句1452报错、1451报错、1366报错问题

编写数据库代码发现一直出错,简单做个记录吧

这是1452报错

1452-Cannot add or update a child row:a foreign key constraint fails (teaching.sc,CONSTRAINT,fk_sc_sno foreign key(studentno) references student(studentno))

刚开始我是先未插入数据然后创建的外键,结果插入数据发现报错

此时sc表未插入数据;

这是主表student数据 

 这是sc表插入的数据

 

哈哈哈哈后来发现出错的原因是因为我将字段值插入错误,如上图所示的sc表中studentno的字段值‘035222201’ ,student表字段值是‘0355222201’

于是我将字段值纠正后,运行成功。

 

sc表

上图代码如下:

create table sc(-- 学生成绩表
studentno varchar(10) not null,-- 不为空
courseno varchar(10) not null,-- 不为空
final double(4,2),-- 成绩保留小数点后两位
sname varchar(10),
primary key(studentno,courseno)-- 设置学号和课程号为主键
);

外键代码(我选择的是在建表后建立外键约束):

alter table sc add CONSTRAINT fk_sc_sno
 foreign key(studentno) references student(studentno);
-- 主表是student 外键名称是fk_sc_sno
alter table sc add CONSTRAINT fk_sc_cno 
foreign key(courseno) references course(courseno);
-- 主表是courseno 外键名称是fk_sc_cno

插入字段的代码: 

insert into sc(studentno,courseno,final,sname) values
('0822111208','c05109',91,'韩吟秋'),
('0822111208','c06108',95,'韩吟秋'),
('0822111208','c06127',67,'韩吟秋'),
('0823210007','c05103',69,'宿致远'),
('0823210007','c05127',86,'宿致远'),
('0824113307','c05103',77,'崔志坚'),
('0824113307','c05109',79,'崔志坚'),
('0824113307','c05127',87,'崔志坚'),
('0824113307','c06108',82,'崔志坚'),
('0352222201','c05109',92,'赵毓'),
('0352222201','c08106',95,'赵毓'),
('0352222201','c08123',89,'赵毓');

错误原因:插入外键的字段值在链接表中匹配不到对应字段值,所以报错

注意:在添加外键时,一定要先创建主表再创建从表,先添加主表数据再添加从表数据否则数据添加不上就会报错,如下图所示:

还有我自己报1451错误

 是因为有了外键约束无法执行删除,必须先将从表相关的外键数据删除才能删除主表的错误

1366报错(1366 - Incorrect string value: '\xE8\xAE\xA1\xE7\xAE\x97...' for column 'cname'

at row 1)

这个问题因为自己参照大佬已经解决了,所以无法找到相关的图,直接上解决方法http://blog.csdn.net/you_you0329http://blog.csdn.net/you_you0329

但是我做完这一步还是发现自己问题没有彻底解决,才发现是自己的配置问题

解决方法:

1.先去自己mysql的文件下创建一个my.ini文档文件(我这里之前下载时候就有)

 2.设置mysql的安装目录 这块换成自己解压的路径,因为我解压后直接放在我自己创建的根目录下的mysql文件,但是你要换成你自己的路径(我是个错误解压例子)。最好是这样的D:\\mysql\\mysql-5.7.13-winx64(找到mysql解压目录→新建文本文档 my.txt→输入以下内容→点击左上方菜单→点文件→另存为→保存类型:所有文件,文件名:my.ini)

[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录 这块换成自己解压的路径
basedir=D:\Mysql
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

两种方式试过,基本问题就解决了。

本人的错题本哈哈哈哈哈。希望能帮到你们哦!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值