mysql 其它知识

时间:2020-05-08 19:27:29   收藏:0   阅读:53

今日内容概要

今日内容基本都是了解知识点,作为一名开发人员你在工作中基本用不到

今日内容详细

视图(了解)

触发器(了解)

在满足对表数据进行增、删、改的情况下,自动触发的功能

使用触发器可以帮助我们实现监控、日志...

触发器可以在六种情况下自动触发 增前 增后 删前删后 改前改后

基本语法结构

create trigger 触发器的名字  before/after insert/update/delete on 表名
for each row
begin
	sql语句
end

# 具体使用 针对触发器的名字 我们通常需要做到见名知意
# 针对增
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
"""针对删除和修改 书写格式一致"""

ps:修改MySQL默认的语句结束符  只作用于当前窗口
	delimiter $$  将默认的结束符号由;改为$$
    delimiter ;
    
# 案例
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
);
"""
当cmd表中的记录succes字段是no那么就触发触发器的执行去errlog表中插入数据
NEW指代的就是一条条数据对象
"""
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 ;

# 朝cmd表插入数据
INSERT INTO cmd (
    USER,
    priv,
    cmd,
    sub_time,
    success
)
VALUES
    (‘jason‘,‘0755‘,‘ls -l /etc‘,NOW(),‘yes‘),
    (‘jason‘,‘0755‘,‘cat /etc/passwd‘,NOW(),‘no‘),
    (‘jason‘,‘0755‘,‘useradd xxx‘,NOW(),‘no‘),
    (‘jason‘,‘0755‘,‘ps aux‘,NOW(),‘yes‘);

# 删除触发器
drop trigger tri_after_insert_cmd;

事务

原文:https://www.cnblogs.com/pythonwl/p/12852556.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!