一张表t1,两个字段,id和name字段,要实现一个功能,在往这张表里面插入数据的时候,如果表中有与插入的数据name字段相同的字段,则更新id字段,
之前没写过,不过大概记得以前学习mssql的时候有个东西可以早对表进行inser update delete的时候触发一些动作,搜了下果然找到了,是触发器!
兴致勃勃的看了下资料,最后发现,mysql不能在当前触发器中操作当前表中的数据。。。。。
下面是代码:
DELIMITER |
CREATE TRIGGER test1 BEFORE INSERT on `test1` FOR EACH ROW
BEGIN
DELETE FROM `test1` WHERE t1_name=new.t1_name;
END
|
delimiter ;
虽然需要的东西没有做出来,但是也算是学习了
还是把需要做的东西弄出来了,用到了一个临时表。。
开始用的是
DELIMITER |
CREATE TRIGGER insert_updata BEFORE INSERT on `key_temp` FOR EACH ROW
BEGIN
DECLARE temp INT(3);
SET temp=(SELECT COUNT(*) FROM `key_gjc` WHERE key_name=new.key_name);
IF temp>0 THEN
delete from `key_gjc` WHERE f=new.f;
INSERT INTO `key_gjc` (a,b,c,d,e,f) VALUES (new.a,new.b,new.c,new.d,new.e,new.f);
END IF;
END
|
delimiter ;
这种方法就实现了需要的效果,但是后来出现了一个问题,因为后来表又加了一个字段g,开始插入的时候,这个字段是空的,譬如该条记录如下
a b c d e f g
张三 22 男 111 30kg 3000 null
但是可能会对这条记录的g字段进行更改,譬如更改之后的记录为
a b c d e f g
张三 22 男 111 30kg 3000 小说
DELIMITER |
CREATE TRIGGER insert_updata BEFORE INSERT on `key_temp` FOR EACH ROW
BEGIN
DECLARE temp INT(3);
SET temp=(SELECT COUNT(*) FROM `key_gjc` WHERE key_name=new.key_name);
IF temp>0 THEN
UPDATE `key_gjc` SET a=new.a,b=new.b,c=new.c,d=new.d,e=new.e WHERE f=new.f;
ELSE
INSERT INTO `key_gjc` (a,b,c,d,e,f) VALUES (new.a,new.b,new.c,new.d,new.e,new.f);
END IF;
END
|
delimiter ;