数据库之MySQL其六

一、视图

  1、简介:视图就是通过查询得到虚拟表的实体化,保存于硬盘,下次或其他窗口也可以使用。

  2、用途:若一份虚拟表需要重复使用,可以考虑使用视图来简化后续操作。

  3、注意:

    ①视图虽然也是存于硬盘的表,但是该表只有表结构,没有表数据,上面显示的数据还是来自于查询目标的表。

    ②视图一般只用来再查询,最好不要修改里面的数据,以防影响原表。

    ③视图最好不要过多创建,以免增加维护难度。

  4、基本语法:create view 视图名 as 查询语句

二、触发器

  1、简介:触发器就是绑定某表的某项操作(增/删/改)之前或结束能自动触发定义好功能的机制,一般用于监控或记录日志等。

  2、基本语法:create trigger 触发器名 before/after insert/update/delete on 表名 for each row begin 触发语句 end

  3、delimiter:用于修改sql语句的默认结束符,如,delimiter $$---将默认结束符“;”改为了“$$”。

  4、实例:

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;

三、事务

  1、简介:事务就是把多条需要同时执行的sql语句绑定成组合的机制,组合中的sql语句要么同时成功,要么同时失败,以此确保数据操作的完整性。

  2、特性:

    ①原子性:一个事务中的多条sql语句相互是无可分割的。

    ②一致性:一个事务中的多条sql语句必定是同时执行,同时成功或同时失败。

    ③隔离性:一个事务执行的过程中不会被其他事务干扰,类似于并发程序的互斥锁,并发事务对数据的操作也是互不干扰的。

    ④持久性:一个事务一旦执行成功,其执行结果会立即生效,硬盘上的数据则立刻被执行了相应的修改,这个操作是永久的,而非临时性的,且不可回撤。

  3、rollback:回滚,事务开启后,无论已经执行了多少条sql语句,一旦遇到回滚,则立即回到事务开启前的状态。

  4、commit:确认,确认之后则无法再使用回滚,相当于事务真正执行结束了。

  3、基本语法:start transaction;sql语句1; sql语句2; rollback; sql语句3;sql语句4; commit

四、

 

数据库之MySQL其六

上一篇:mongodb 安装


下一篇:SQL的子查询