编写数据库代码发现一直出错,简单做个记录吧
这是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
两种方式试过,基本问题就解决了。
本人的错题本哈哈哈哈哈。希望能帮到你们哦!