| 问题状态 |
|
|
| 跪求一个关于mysql的问题 |
悬赏分:100 已经过期 过期时间2007-7-5 14:47
|
我现在有3张表,student,sc,course,代码如下 CREATE TABLE sc ( `id` int(10) unsigned NOT NULL auto_increment COMMENT 'id', `Sno` int(10) unsigned NOT NULL default '0' COMMENT '学号', `Cno` int(10) unsigned NOT NULL default '0' COMMENT '课程号', `Grade` int(10) unsigned default NULL COMMENT '成绩', PRIMARY KEY (`id`), KEY `FK_sc_1` (`Sno`), KEY `FK_sc_2` (`Cno`), CONSTRAINT `FK_sc_1` FOREIGN KEY (`Sno`) REFERENCES `student` (`id`), /* 外键信息 */ CONSTRAINT `FK_sc_2` FOREIGN KEY (`Cno`) REFERENCES `course` (`id`) /* 外键信息 */ ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE student ( `id` int(10) unsigned NOT NULL auto_increment COMMENT 'id', `Sno` int(10) unsigned NOT NULL default '0' COMMENT '学号', `Sname` varchar(45) default NULL COMMENT '姓名', `Ssex` char(2) default NULL COMMENT '性别', `Sdept` varchar(10) default NULL COMMENT '所在系', `Sage` int(10) unsigned default NULL COMMENT '年龄', `Saddress` varchar(45) default NULL COMMENT '籍贯', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE course ( `id` int(10) unsigned NOT NULL auto_increment COMMENT 'id', `Cno` int(10) unsigned default NULL COMMENT '课程号', `Cname` varchar(45) default NULL COMMENT '课程名', `Ccredit` int(10) unsigned default NULL COMMENT '学分', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312; 其中student中有数据: 好比(id:1,sno:20040001,sname:"李文",ssex:"f",sdep:"asdf",sage:20,saddress:"上海") course中有数据: 好比(id:1,cno:1,cname:"数据库",ccredit:2) 我现在的问题是student表和course表一切正常,sc表也能建立,但建立好sc表后就无法插入数据例如插入如下数据 (insert into sc values (1,20040001,1,82);) 他就报ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f ails (`hibernate/sc`, CONSTRAINT `FK_sc_1` FOREIGN KEY (`Sno`) REFERENCES `stude nt` (`id`))错 |
| 提问者:marcodeba@hotmail.com - 头衔:开发爱好者 |
| |
| |
|
|
| 回复答案 |
共15条 |
| |
你的 student 表的主键是“id”你插入的应该是 (insert into sc values (1,1,1,82);) 因为你的student表中的Sno=“20040001”它不是主键。
|
| 回答者:zhangboxinji@126.com - 头衔:开发爱好者 2008-4-14 19:49:13 |
|
| |
我发现你的插入语句有两个问题,其一,你的课程号字节那么长,不应该定义为int类型,应定义为varchar或是更大的数据类型;其二,你的id定义的是自动增长类型,在插入时,语句应写为:insert into sc values (id,20040001,1,82); |
| 回答者:ydhmzb@163.com - 头衔:开发爱好者 2008-4-11 3:13:17 |
|
| |
你本意应该是这样的吧: CREATE TABLE sc ( `id` int(10) unsigned NOT NULL auto_increment COMMENT 'id', `Sno` int(10) unsigned NOT NULL default '0' COMMENT '学号', `Cno` int(10) unsigned NOT NULL default '0' COMMENT '课程号', `Grade` int(10) unsigned default NULL COMMENT '成绩', PRIMARY KEY (`id`), KEY `FK_sc_1` (`Sno`), KEY `FK_sc_2` (`Cno`), CONSTRAINT `FK_sc_1` FOREIGN KEY (`Sno`) REFERENCES `student` (`sno`), /* 外键信息 */ CONSTRAINT `FK_sc_2` FOREIGN KEY (`Cno`) REFERENCES `course` (`cno`) /* 外键信息 */ ) ENGINE=InnoDB DEFAULT CHARSET=gb2312; yanglingsx@sina.com 都回答过了
|
| 回答者:wxywwwt@163.com - 头衔:开发爱好者 2008-3-5 14:55:02 |
|
| |
由于sc表id列为auto_increment,插入数据时应缺省: insert into sc(Sno,Cno,Grade) values (1,1,82); |
| 回答者:yiliu_001@sohu.com - 头衔:开发爱好者 2008-3-3 13:49:06 |
|
| |
怎么不用mysql-font的软件啊,用那个就没有那些SQL语法错误了~~ |
| 回答者:gyjmail@qq.com - 头衔:开发爱好者 2008-2-27 11:59:22 |
|
| |
第一步:原来的东西都不要改动,仅仅将插入信息改为 insert into sc values (1,2004001,1,82);//注意4后面是两个0,不是三个0 第二步:如果运行成功继续看我的回答,否则不用向下看了 第三步:原理解释--〉当设置外健约束的时候,向含有外建的表中插入的数据必须是参照表里面已经存在的。我说'已经存在的'是指由外建约束的字段,如果没有约束,那么就简单了,随便插入了。 |
| 回答者:qwxi_1@163.com - 头衔:开发爱好者 2007-10-4 0:31:21 |
|
| |
你本意是这个吧? CREATE TABLE sc ( `id` int(10) unsigned NOT NULL auto_increment COMMENT 'id', `Sno` int(10) unsigned NOT NULL default '0' COMMENT '学号', `Cno` int(10) unsigned NOT NULL default '0' COMMENT '课程号', `Grade` int(10) unsigned default NULL COMMENT '成绩', PRIMARY KEY (`id`), KEY `FK_sc_1` (`Sno`), KEY `FK_sc_2` (`Cno`), CONSTRAINT `FK_sc_1` FOREIGN KEY (`Sno`) REFERENCES `student` (`sno`), /* 外键信息 */ CONSTRAINT `FK_sc_2` FOREIGN KEY (`Cno`) REFERENCES `course` (`cno`) /* 外键信息 */ ) ENGINE=InnoDB DEFAULT CHARSET=gb2312; 吧,外键定义错了,sc.sno 对的是 student.sno , 不是 student.id cno同上
|
| 回答者:yanglingsx@sina.com - 头衔:开发爱好者 2007-8-13 16:17:09 |
|
| |
报错的原因:往sc表中插值时违反了外键约束。 解决的办法:先分别往course表和student表中添加主键为20040001和1的记录,在执行insert into sc values (1,20040001,1,82); 如果要往sc表中插入记录,sno 和 cno 字段的值在student和course表中必须要有相同的主键值。 |
| 回答者:sshzhangwg@163.com - 头衔:初级程序员 2007-7-27 10:10:45 |
|
| |
建议下个 MySQL-Front(MYSQL 图形界面操作工具) 进行 手动插入数据 我一般都是 这样做的 大家不要笑我哈 |
| 回答者:cmmysnake@163.com - 头衔:开发爱好者 2007-7-12 20:25:58 |
|
| |
你手动在数据库中插入,如何能插入就证明你建的表没有问题, 如果不能就说明你的表主键有问题, 最后给你提个建意,你最好不要在数据库中建立关联,如果你用hibernate的话,你可以在hibernate中建立关联。这样如何你以后要改数据库的话就不会出问题了,你如果用hibernate的话,往SC表中插入数据必顺将和这个表有关联的对象一起插入 |
| 回答者:li-qi-guang@163.com - 头衔:开发爱好者 2007-7-7 1:32:54 |
|
| |
insert into sc(Sno,Cno,Grade) values(2004001,1,82); 测试一下这样写,如果使用insert into sc values(2004001,1,82); 我也插入不了数据; |
| 回答者:zhangqingjun198309@163.com - 头衔:开发爱好者 2007-7-6 11:30:04 |
|
| |
insert into sc values (1,20040001,1,82); 由于sc表id列为auto_increment,插入数据时应缺省,请试一下: insert into sc values (20040001,1,82); |
| 回答者:szp1972126@163.com - 头衔:开发爱好者 2007-7-5 21:42:59 |
|
|
|
|
| 欢迎使用本系统,智囊团。踊跃回答,赢得积分。 |
|
| 使用有问题请到 帮助 |
|