一段代码

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

———————————-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$$

一个trigger trigger的错误

晚上想更新一下数据,没想到insert了两条数据就报错:

ERROR 1062: Duplicate entry ‘1’ for key ‘PRIMARY’ SQL Statement

怎么检查都没有查到有重复的主键,只好瞎子抹黑一样逐个alter表格的属性,直到删除了前几天设置的一个trigger,这个错误才排除

=============== TRIGGER CODE ================

— Trigger DDL Statements
DELIMITER $$

USE `db_chyujian`$$

CREATE
DEFINER=`root`@`localhost`
TRIGGER `db_chyujian`.`ins_test`
AFTER INSERT ON `db_chyujian`.`buchhaltung_chyujian`
FOR EACH ROW
begin
insert into monatliche_statistik(id, monat, Total, total_ausflug,
total_bildung, total_nahrung, total_andere)
values(1, 10, new.betrag, 0, 0, 0, 0);
end$$

=============== RELEVANT BLOG ================

http://www.tripsina.com/?p=1522