MySQL 1452 ERROR

今天在数据库添加外键的时候,遇到了问题。先创建了两个表  orders 和 order_items  ,存储引擎都是InnoDB,且都有orderid这个属性(类型完全一样)。

但是当使用命令:

alter table order_items

add foreign key (orderid) references orders (orderid);
添加外键的时候 出现了错误

ERROR 1452 : Cannot add or update a child row: a foreign key constraint fails

最后才发现,原来是我的order_items表中已经存在了数据,且orderid这个属性和orders中的不对应,因此如果添加外键,就会导致错误
此时解决的办法不外乎两个:

1.删除数据,再添加外键
2.在orders中添加对应的项,再添加外键

=============这是一篇转载,下面是引用地址=============

http://www.2cto.com/database/201210/159205.html

早知道早上来查了,费了我一下午的劲

阳春三月

博客网站疏于管理的唯一原因是:太忙!

冬去春来,不少蛰伏了一秋一冬的博客在最近两周频频刷新,有说家里小事的,有说踏青游春的,不过对于住在钱塘江边,卖命在杭州湾最潮头的人来说,这些都很有点奢侈了。这次的雨是从去年十二月末开始下的大概,搞不灵清搞不灵清就稀里糊涂下到了三月份,从惊蛰的后面几天开始,天气开始开始有转暖的迹象,天气预报开始说×天后晴转多云,气温8至15度,今年开春第一个真正的艳阳天是上周末。

趁着大好天气回去看了一眼初中的班主任Z,闲谈惊闻Z又当起了班主任;
问:你都是元老诶,怎么还让你当班主任啊,班主任那不是新来的才当当的嘛。
Z:你想得美!明天我还得去下晚自习呢~~~

刚刚到下沙的时候鼓捣了一阵子Mysql,弄出来一个蹩脚的Buchhaltung数据库,勉强可以记录汇总一下各项开支汇总,但是预算和结算没法做,因为没有详细的各种开支和收入计划,不多多少是可以用了,程序外没有任何外部代码,用的全是Mysql的Procedure和Evnet。

现在这个Buchhaltung的数据库没有必要花太多精力在上面大了,于是开始研究MongoDB。C#中数据的写入和读出数据结构已经可以完成,但是还不知道怎么设计完整的数据结构与用户交互功能,做这种工作以前只有一个痛苦,不懂无处问;现在有两重难处,不仅是无处问,连时间都不够用啊,只有每天心想着就是40分钟,就是1个小时,就搞一搞,结果一搞就有可能搞到好晚,也不一定马上就能得到一个好程序。

最后一行写清楚了今天的更新内容与新生的问题

问题总在一步步浮现,现在的阶段根本无法开始写软件的文档


住在下沙,经常会在周末进城去摸索摸索武林古都的风味,杭州是个拥挤,但是仍然令人觉得友善的城市,对于一个宁波人来说,到了杭州,还是外地人,但是杭 州人说话,我们勉强是能听懂的,我们学着杭州话,问问路是基本没问题的。杭州街头最让人觉得意外就是这些箱子上的墙画,貌似街上这些箱子的墙画都是同一家 公司画的,有功夫一定要为它们出一个专辑。

中河高架下的彩绘箱


这个妈妈级的广告演员,怎么看起来像是初中同学怎么的


在下沙已经有很多这样的公家车预示牌子,在市区的时候有些站点貌似是灵光的,
但是在下沙三号大街×六号大街交叉口的这个站点,肯定是不准的,搞来搞去都是3040米。


然而感谢这单年的起早贪黑,被敲骨吸髓一般的被压榨工作生活,让人明白了个人能力实在有限,其不谈做好自己的兴趣,保证其前提做好上司发下来的任务,都不一定那么容易,许多,只不过是杂事,只不过是杂事——要当成正事办理未为不可,但是周期却长,没法做成一件相当成功的事情,于是还是被大部分琐碎的事情吞噬了大好青春。

这个记录单,是从到了下沙之后开始记录,要做的那些私事,而现在其中鲜有完成的


新近开了一个台灯,看着挺精神的,喜欢的就是这种简约型实用性的。还有一大笔物资要购入:打印纸快没了,单片机烧录器迟早需要一个,平板电脑必须要一个——要么明年要么今年年尾。

年前的时候买了不少植物种子和油苗,其中比较大件的有:玫瑰、月季、牡丹、紫竹、水仙,以及各类碗莲种子、小草草种、花种。现在已经到了撒种的季节,可还是没有时间去关心这些,只是今天早上把这盆已经绽出绿芽的牡丹从北阳台搬到了南阳台,希望她早日早开富贵。

蛰伏了一个冬天的牡丹,旁边的韭菜是水仙


拜zlike同学所赐的一个vpn配置文件,终于在困难时期我也能上网来更新我的博客,但是不过对于我的粉丝就没有必要千里迢迢翻墙跨海来看,用google订阅器就可以了,如果发现阅读器也读不了,尝试着把http://google.com/reader,改成https://google.com/reader。

不知道有没有会看图片的内容和下面的注释,如果没有人看的话,我就干脆把那行注释改成德文了。

最后,来到这里,最喜欢还是在低空飞行的民航,儿时的飞机梦

重启MySql

换了新电脑和win7之后MySql一直未安装,于是迟迟未更新数据库的数据,今天晚上回来又鼓捣鼓捣MySql,从上周末开始一直装Mysql和MysqlWorkbench,就是Mysql服务器一直启动不了,今天晚上用MySQLInstanceConfig的时候提示1045错误,说是应该给Mysql开一个3306的端口,可能是防火墙拦住了MySql的网络访问了吧,于是在Windows的防火墙上开了一个3306的Port给MySql,终于行了,把原先备份好的数据库导了进来,接着做这个数据库。

MySQLWorkbench

一段代码

琢磨了两个礼拜,做了两张表,第二个表用来记录第一个表的统计值

———————————-mysql code———————————-

— Trigger DDL Statements
DELIMITER $$

USE `db_chyujian`$$

CREATE
DEFINER=`root`@`localhost`
TRIGGER `db_chyujian`.`Calculate_m_total`
AFTER INSERT ON `db_chyujian`.`konsum`
FOR EACH ROW
begin

# die Jahr und Monat zu absaehnen
set @date_neu = NEW.datum;
set @year_neu = YEAR(@date_neu);
set @month_neu = MONTH(@date_neu);

set @jahr_int_tmp =
convert(@year_neu, unsigned) * 100;
set @monat_int_tmp =
convert(@month_neu, unsigned);

# die Monat in monatiliche_statistik zu zaehlen
set @monat_in_statistik =  @jahr_int_tmp + @monat_int_tmp;
# die totale Betrag zu zaehlen
set @total =
(select sum(betrag) from `db_chyujian`.`konsum`
where MONTH(datum) = @month_neu );
set @total_ausflug =
(
select sum(betrag) from `db_chyujian`.`konsum`
where MONTH(datum) = @month_neu
and sorte = ‘ausflug’
);
set @total_bildung =
(
select sum(betrag) from `db_chyujian`.`konsum`
where MONTH(datum) = @month_neu
and sorte = ‘Bildung’
);
set @total_nahrung =
(
select sum(betrag) from `db_chyujian`.`konsum`
where MONTH(datum) = @month_neu
and sorte = ‘Nahrung’
);
set @total_andere =
(
select sum(betrag) from `db_chyujian`.`konsum`
where MONTH(datum) = @month_neu
and (sorte = ‘Amateur’ or sorte = ‘Alltagsgebrauch’)
);

# den Rekord in monatliche_statistik zu modifizieren
if exists (select *
from `db_chyujian`.`monatliche_statistik`
where monat = @monat_in_statistik)
then
set @ziel_id = (
select id from `db_chyujian`.`monatliche_statistik`
where monat = @monat_in_statistik);
update `db_chyujian`.`monatliche_statistik`
set `total` = @total,
`total_ausflug` = @total_ausflug,
`total_bildung` = @total_bildung,
`total_nahrung` = @total_nahrung,
`total_andere` = @total_andere
where id = @ziel_id ;

else
insert into `db_chyujian`.`monatliche_statistik`
(monat, total,  total_ausflug, total_bildung, total_nahrung, total_andere)
values
(@monat_in_statistik,
(select sum(betrag) from `db_chyujian`.`konsum` where MONTH(datum)= @month_neu),
@total_ausflug,
@total_bildung,
@total_nahrung,
@total_andere
);

end if;

end$$

流程一则

磨刀霍霍了好几个礼拜,这下应该可以写一个像样的存储过程来了。

另记:

程序里要预先判断表A中是否存在目标记录,就是月度值是2011-09月的那条记录,用exists判断,搞了半天

select *
from `db_tripsina`.`monatliche_statistik`
where exists
(select * from `db_tripsina`.`monatliche_statistik`
where monat=10) ;

实际程序里面要用if exits,写是写了,但是不知道灵不灵,先写了再说。