111 Gatillo

使用触发器可以定制用户对表进行【增、删、改】操作时前后的行为,注意:没有查询
# 增=》insert
create trigger tri_before_insert_t1 before insert on t1 for each row
begin
    sql语句;
end

create trigger tri_after_insert_t1 after insert on t1 for each row
begin
    sql语句;
end

# 删除=》delete
create trigger tri_before_delete_t1 before delete on t1 for each row
begin
    sql语句;
end

create trigger tri_after_delete_t1 after delete on t1 for each row
begin
    sql语句;
end


# 修改=》update





# 例如
insert into tt1 values(1,"egon",'male');


delimiter //
create trigger tri_before_insert_tt1 before insert on tt1 for each row
begin
    insert into tt2 values(NEW.name);
end //

delimiter ;



insert into tt1 values(2,"tom",'female');





# 练习
CREATE TABLE cmd (
    id INT PRIMARY KEY auto_increment,
    USER CHAR (32),
    priv CHAR (10),
    cmd CHAR (64),
    sub_time datetime, #提交时间
    success enum ('yes', 'no') #0代表执行失败
);

CREATE TABLE errlog (
    id INT PRIMARY KEY auto_increment,
    err_cmd CHAR (64),
    err_time datetime
);

delimiter $$
create trigger tri_after_insert_cmd after insert on cmd for each row
begin
    if NEW.success = 'no' then
        insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time);
    end if;
end $$
delimiter ;

insert into cmd(user,priv,cmd,sub_time,success) values
    ('egon','0755','ls -l /etc',NOW(),'yes'),
    ('egon','0755','cat /etc/passwd',NOW(),'no'),
    ('egon','0755','useradd xxx',NOW(),'no'),
    ('egon','0755','ps aux',NOW(),'yes');

drop trigger tri_after_insert_cmd ;



Supongo que te gusta

Origin blog.csdn.net/qq_40808228/article/details/108502107
111
Recomendado
Clasificación