2017-07-07 64 views
0

表1在这方面,我有2个表,我需要在一排oldvalues和newvalues一行

创建表EMP(ID INT,emp_id的INT, 名VARCHAR(30),电子邮件VARCHAR(50 ),mobile_no int,comments varchar(50));

表2

创建历史表(ID INT,OLDVALUE VARCHAR(50),NEWVALUE VARCHAR(50));

插入第一表

insert into emp(emp_id,name,email,mobile_no,comments) 
values(1, 'gobi','[email protected]',9944,'good'); 

TRIGGER

创建触发器至三

BEFORE UPDATE ON emp 

FOR EACH ROW 

BEGIN 

    INSERT INTO history 

    SET id = '1', 
    oldvalue = OLD.name, 
    newvalue = NEW.name; 
    INSERT INTO history 

    SET id = '2', 
     oldvalue = OLD.email, 
    newvalue = NEW.email; 
    INSERT INTO history 

    SET id = '3', 
    oldvalue = OLD.mobile_no, 
    newvalue = NEW.mobile_no; 
     END; 
UPDATE emp 

SET 
    name = 'ashok', 
email = '[email protected]', 
mobile_no = '929292' 
WHERE 
    emp_id = 1; 

这上面的触发器工作正常,但我需要填写2行,但此触发器的输出是多行创建。

+0

正如你已经在这三个领域作出改变,那显然会为'老value'和'三进新的价值“。 –

+0

是的,我明白了,但我需要OLD.name,OLD.email,OLD.mobile_no在newvalue列下一行下的oldvalue和NEW.name,NEW.email,NEW.mobile_no下。请帮助我... – gobi

+0

你可以简单地创建'历史' –

回答

0
create table emp(id int auto_increment,emp_id int, 
name varchar(30),email varchar(50),mobile_no int,comments varchar(50),primary key(id)); 

create table history(id int,oldvalue varchar(50),newvalue varchar(50)); 




insert into emp(emp_id,name,email,mobile_no,comments) 
values(1, 'gobi','[email protected]',9944,'good'); 



CREATE TRIGGER tri 
    AFTER UPDATE ON emp 
    FOR EACH ROW 
BEGIN 

DECLARE ooldvalue TEXT DEFAULT ''; 
    DECLARE nnewvalue TEXT DEFAULT ''; 

IF((OLD.name!=NEW.name) OR (OLD.email!=NEW.email) OR (OLD.mobile_no!=NEW.mobile_no))THEN 
SET ooldvalue = CONCAT(ooldvalue,'id=', OLD.id,','); 

    END IF; 

IF(OLD.name!=NEW.name) THEN 
     SET ooldvalue=CONCAT(ooldvalue,'name=',OLD.name,','); 
     SET nnewvalue = CONCAT(nnewvalue,'name=',NEW.name,','); 
    END IF; 

IF(OLD.email!=NEW.email) THEN 
     SET ooldvalue=CONCAT(ooldvalue,'email=',OLD.email,','); 
     SET nnewvalue = CONCAT(nnewvalue,'email=',NEW.email,','); 
    END IF; 

IF(OLD.mobile_no!=NEW.mobile_no) THEN 
     SET ooldvalue=CONCAT(ooldvalue,'mobile_no=',OLD.mobile_no,','); 
     SET nnewvalue = CONCAT(nnewvalue,'mobile_no=',NEW.mobile_no,','); 
    END IF; 

IF(ooldvalue!='' AND nnewvalue!='') THEN 

     IF(ooldvalue!=nnewvalue)THEN 
      SET ooldvalue = SUBSTRING(ooldvalue,1,CHAR_LENGTH(ooldvalue)-1); 
      SET nnewvalue = SUBSTRING(nnewvalue,1,CHAR_LENGTH(nnewvalue)-1); 
      INSERT INTO history(oldvalue,newvalue) values (ooldvalue,nnewvalue); 
     END IF; 
     END IF; 
     END; 

SELECT * FROM EMP

SELECT * FROM历史

UPDATE emp 
SET 
    name = 'ashok', email = '[email protected]',mobile_no = '929292' 
where 
    emp_id = 1; 
相关问题