MySQL-(二)

视图

视图是一个虚拟表(非真是存在的),其本质是【根据SQL语句获取动态的数据集】用户使用是只有使用’名称’ 即可获取结果集,并可以当作表来使用。

select * from
(
    select
        nid,
        name
    from
        tb1
    where
        nid > 2
) AS A where A. name > 'aaa';

1,创建视图

    格式:create viem 视图名称 AS sql 语句
    crerte vime a1 AS 
    select nid,
        name
    from
        a
    where
        nid > 4;

2,删除视图

格式:drop viem 视图名称
     drop viem v1;

3,修改视图

格式:alter viem 视图名称 as sql 语句
     alter viem v1 as 
     select a.nid,
            b.name
    from
        a
    left join b on b.id = b.nid
    left join c on a.id = c.nid
    where
    a.id > 2
    and c.nid < 5;

4,使用视图

视图使用是可其当作表进行操作即可,因为视图是虚拟表,所以无法与真是表一样对其进行创建,更新和删除操作,只能做查询用。
    select * fron v1;

触发器

对某个表进行 增/删/改 的前后希望触发某个特定的行为是,可以使用触发器,触发器对于用户制定的 增/删/改 前后的行为。

1,创建基本语法
    # 插入前
    CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON      tb1 FOR EACH ROW
    BEGIN
        ...
    END

    # 插入后
    CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
    BEGIN
        ...
    END

    # 删除前
    CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW
    BEGIN
        ...
    END

    # 删除后
    CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW
    BEGIN
        ...
    END

    # 更新前
    CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW
    BEGIN
        ...
    END

    # 更新后
    CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW
    BEGIN
        ...
    END

2,删除触发器
    drop trigger tri_after_insert_tb1;

3,使用触发器
    触发器用户无法直接调用,而导致触发器的 增/删/改  操作被动引发的。
        insert into tb1(num)values(888);

函数

1,自定义函数
    delimiter \\
    create function f1(
        i1 int,
        i2 int)
    returns int
    BEGIN
        declare num int;
        set num = i1 + i2;
        return(num);
    END \\
    delimiter ;

2,删除函数
    drop function func_name;

3,执行函数
    # 获取返回值
    declare @i VARCHAR(32);
    select UPPER('alex') into @i;
    SELECT @i;

    # 在查询中使用
    select f1(11,nid) ,name from tb2;

关于MySQL内置函数,请关注下次更新《MySQL内置部分函数》。

事务

事务用于将某些操作的多个SQL作为原子性操作,一旦某一个出现错误,就会返回到原来的状态,从而保证数据库数据的完整性。

    delimiter \\
    create PROCEDURE p1(
        OUT p_return_code tinyint
    )
    BEGIN 
      DECLARE exit handler for sqlexception 
      BEGIN 
        -- ERROR 
        set p_return_code = 1; 
        rollback; 
      END; 

      DECLARE exit handler for sqlwarning 
      BEGIN 
        -- WARNING 
        set p_return_code = 2; 
        rollback; 
      END; 

      START TRANSACTION; 
        DELETE from tb1;
        insert into tb2(name)values('seven');
      COMMIT; 

      -- SUCCESS 
      set p_return_code = 0; 

      END\\
    delimiter ;

    支持事务的存储过程

索引

索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构。类似于字典中的目录,查找内容时可以根据目录找到数据存放的位置,即可获取。

MySQL中常见的索引有:

 - 普通索引
 - 唯一索引
 - 主键索引
 - 组合索引

1,普通索引

普通索引只有一个功能:加速查询

create table in1(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    index ix_name (name)
);
创建表 + 索引

创建索引
    create index index_name on table_name(column_name);

删除索引
    drop index_name on table_name;

查看索引
    show index from table_name;

注意事项:创建索引是如遇到blob 与 text 类型,必须指定length

2,唯一索引

唯一索引有两个功能:加速查询和唯一约束(包含null)

create table in1(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    unique ix_name (name)
);
创建表 + 唯一索引

创建唯一索引
    create unique index 索引名 on 表名(列名);

删除唯一索引
    drop unique index 索引名 on 表名;

3,主键索引

主键索引有两个功能:加速查询和唯一约束(不包含null)

create table in1(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    index ix_name (name)
)

OR

create table in1(
    nid int not null auto_increment,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    primary key(ni1),
    index ix_name (name)
)
创建表 + 创建主键

创建主键
    alter table 表名 add primary key(列名);

删除主键
    alter table 表名 drop primary key;
    alter table 表名  modify  列名 int, drop primary key;

4,组合索引

组合索引是将 n 个列组合成一个索引
其应用场景为:频繁的同时使用n列来进行查询,如:where n1 = 'gaojiale' and n2 = 666。

    create table in3(
        nid int not null auto_increment primary key,
        name varchar(32) not null,
        email varchar(64) not null,
        extra text
    )   
    创建表

    创建组合索引
        create index ix_name_email on in3(name,email);

创建组合索引后,查询
     - name an email        --- 使用索引
     - name                 --- 使用索引
     - email                --- 不使用索引

     注意事项:对于同时搜索n个条件时,组合索引的性能好于多个单一索引合并。

猜你喜欢

转载自blog.csdn.net/buddhaisaboy/article/details/81169708