Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新后的Mysql触发器问题_Mysql_Sql_Triggers - Fatal编程技术网

更新后的Mysql触发器问题

更新后的Mysql触发器问题,mysql,sql,triggers,Mysql,Sql,Triggers,我正在尝试为更新查询创建一个mysql触发器。在这里,我对用户更改使用单独的更新查询 1. personal details 2. address details 3. contact details 因此,我不需要创建一个触发器来用于所有上述更改 1. personal details 2. address details 3. contact details 我就是这样尝试的: CREATE TRIGGER log_change AFTER UPDATE ON users

我正在尝试为更新查询创建一个mysql触发器。在这里,我对用户更改使用单独的更新查询

1. personal details
2. address details
3. contact details
因此,我不需要创建一个触发器来用于所有上述更改

1. personal details
2. address details
3. contact details
我就是这样尝试的:

CREATE TRIGGER log_change
    AFTER UPDATE ON users 
    FOR EACH ROW
    INSERT INTO access_log (id,action,previous_data,current_data)
    VALUES (
    NEW.user_id,
    CASE
        WHEN (NEW.address <> OLD.address) OR
                 (NEW.city_id <> OLD.city_id)
            THEN 'Beneficiary address details'
        WHEN (NEW.email <> OLD.email) OR 
                 (NEW.telephone <> OLD.telephone) OR 
                 (NEW.mobile <> OLD.mobile) 
            THEN 'Beneficiary contact details'
            ELSE 'Beneficiary personal details'
            END,    
        CONCAT_WS("<br>\n"
            , IF(OLD.title<>NEW.title, CONCAT('Title: ',OLD.title), NULL)
            , IF(OLD.beneficiary_name<>NEW.name, CONCAT('Beneficiary Name: ', OLD.name), NULL)
            , IF(OLD.gender<>NEW.gender, CONCAT('Gender: ',OLD.gender), NULL)
        ),
        CONCAT_WS("<br>\n" 
            , IF(OLD.title<>NEW.title, CONCAT('Title: ',NEW.title), NULL)
            , IF(OLD.beneficiary_name<>NEW.name, CONCAT('Beneficiary Name: ', NEW.name), NULL)
            , IF(OLD.gender<>NEW.gender, CONCAT('Gender: ', NEW.gender), NULL)
        ),
        CONCAT_WS(', ', OLD.address, OLD.city_id),
        CONCAT_WS(', ', NEW.address, NEW.city_id)
); 
创建触发器日志\u更改
用户更新后
每行
插入访问日志(id、操作、以前的\u数据、当前的\u数据)
价值观(
NEW.user\u id,
案例
何时(新地址旧地址)或
(NEW.city\u id OLD.city\u id)
然后是“受益人地址详情”
何时(NEW.email OLD.email)或
(新电话旧电话)或
(NEW.mobile.OLD.mobile)
然后是“受益人联系方式”
其他“受益人个人详细信息”
完,,
CONCAT_WS(“
\n” ,IF(OLD.titleNEW.title,CONCAT('title:',OLD.title),NULL) ,IF(OLD.受益人名称new.name,CONCAT('受益人名称:',OLD.name),NULL) ,IF(OLD.genderNEW.gender,CONCAT('gender:',OLD.gender),NULL) ), CONCAT_WS(“
\n” ,IF(OLD.titleNEW.title,CONCAT('title:',NEW.title),NULL) ,IF(OLD.受益人名称NEW.name,CONCAT('受益人名称:',NEW.name),NULL) ,IF(OLD.genderNEW.gender,CONCAT('gender:',NEW.gender),NULL) ), CONCAT_WS(',',OLD.address,OLD.city_id), CONCAT_WS(',',NEW.address,NEW.city_id) );
我的问题是触发器正在创建,但inser查询不起作用。这意味着在运行更新查询后,数据不会插入到
access\u log
表中

希望有人能帮助我

INSERT INTO access_log (id,action,previous_data,current_data)
此行包含4个字段
下面你提供了6个

我想你的列数是4对6。所以在这4列中,阻塞这6列。如果是这样,我在创建(事件)时没有出现语法错误。但是触发器会悄无声息地消失,而且,毕竟没有用户界面。@Drew,我无法理解你提到的内容。你能举个例子详细说明一下吗。谢谢,我可以用你的。列列表有4列:
(id、操作、以前的\u数据、当前的\u数据)
。但是您提供的数据是6列:(1)一个id,(2)一个case/when块,然后是3 4 5 6个concat。我不确定如何提供6列。它有4列。你能告诉我我提供的6个栏目是什么吗?非常感谢。