最近用mysql有这么一个需求

item表:id,item,url,websiteid

website表:id,domain

item表示从不同网站获取的信息

website表示获得信息的网站,其中的web字段是该网站的域名

显然item表的websiteid和website表的id是关联的。

现在想要做到插入一条item记录(item,url,websiteid)

一种方法是全都在应用程序那边做。应用程序拿到url,分割出域名,先去website表查查看有没有,没有的话新增一条。这样就可以拿到websiteid,再将item,url连同websiteid插入到item表。

另一种方法就是这里要将的trigger。当然用存储过程也可以,但这方面我还没研究。

在item表上设置trigger,作用是应用程序只要插入item,url即可,其他的工作由trigger来完成。

 1 CREATE DEFINER=`root`@`%` TRIGGER `db`.`item_insert` BEFORE INSERT ON `item` FOR EACH ROW
 2 BEGIN
 3 declare d varchar(200);
 4 declare c int;
 5 set d = substring_index(NEW.url,'/',3);
 6 set c = (select count(*) from db.website where domain=d);
 7 if c=0 
 8 then
 9     insert into db.website (domain) values (d);
10 end if;
11 set c = (select id from db.website where domain=d);
12 set NEW.websiteid = c;
13 END