• mysql视图,索引和存储过程


    一:视图

    视图又叫虚表。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

    具体视图的作用自行度娘,直接上语句,用语句说明一切

    -- 创建commodity的伪表
    create view va as select * from commodity
    -- 查询伪表
    select * from va
    -- 删除伪表
    drop view va

    切记当把一张表查询出来当视图的时候,删除一条数据会将原表的数据删除
    多张表的情况下不会出现这种情况

    二:索引

    索引是指把你设置为索引的字段的内容储存在一个独立区间里,里面只有这个字段的内容。在找查这个字段的内容时会直接从这个独立区间里查找,而不是去到数据表里查找,大大提高了效率

    讲到索引,首先要了解到他的优缺点,这是必不可少的;
    优点:有了索引.对于记录数量很多的表,可以提高查询速度.
    缺点:索引是占用空间的。索引会影响insert delete update 的速度
    但是在操作数据库的时候,往往查询的次数要比增删改加起来还要多很多,相对来说,牺牲一些增删改的效率而提高查询的效率,这是值得的
    话不多说,上语句

    -- 创建一个普通索引,这是最基本的索引,它没有任何限制。创建方式:
    create index ia on x3(name)
    -- 为x3表中的name字段添加普通索引,如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length
    -- 删除一个普通索引
    drop index ia on x3
    -- 创建一个唯一索引,它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。创建方式:
    create unique index ia on x3(name)
    -- 删除一个唯一索引
    drop index ia on x3
    
    -- 主键索引:它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:
    
    

    三:存储过程

    存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批件,虽然它们的作用不仅限于批处理。
    在我看来,存储过程其实就是处理有一定逻辑的sql语句,可以在存储过程中创建,删除,更新表
    为什么要使用存储过程:用sql能实现的逻辑,在代码中也能实现,但是效率却比sql差的太远了,如果一个大的项目任何逻辑全是用代码实现,那么效率会大大降低,相反的,如果用sql实现一些简单的逻辑,那么就会让我们的程序跑的更加欢快了

    存储过程实现的是逻辑,其实语法跟我们代码中的方法很是相似,
    下面直接上语句,一目了然
    
            -- 创建一个名叫p1()的存储过程
            create procedure p1()
            -- 存储开始
            BEGIN
                -- 创建一个int类型x
                declare x int;
                -- 为x赋值
                set x=1;
                -- 开启事务
                start TRANSACTION;
                -- 这里才是实现逻辑
                while x<10 do
                    insert into x3 values (x,concat('aa',x));
                    set x=x+1;
                    -- 结束循环
                end while;
                --关闭事务
            COMMIT;
            -- 存储结束
            END

    上面只是建立了存储过程
    接下来只有调用了存储过程才能实现

    -- 调用存储过程
    call p1()

    接下来演示一下有参的存储过程

    -- 创建带参数的存储过程
    CREATE PROCEDURE p3(in x INT)
    BEGIN
        DECLARE y INT;
        SET y=x+1;
        SELECT y;
    END
    -- 调用带参数的存储过程
    CALL p3(8)
    -- 输出和输出参数
    -- 切记输出参数要加@
    CREATE PROCEDURE p5(IN x int,OUT y VARCHAR(255))
    begin
        SELECT NAME INTO y FROM x3 WHERE id=x;
        SELECT y;
    END
    -- 调用存储过程
    CALL p5(8,@x);
    -- 输入输出参数
    CREATE PROCEDURE p6(INOUT x int)
    BEGIN
         DECLARE y INT;
        -- set y=x;
        SELECT COUNT(*) INTO y FROM x3 WHERE id=x;
        SET x=y;
        SELECT x;
    END
    -- 调用存储过程
    set @x=5;
    CALL p6(@x);

    输出参数切记加@

  • 相关阅读:
    EF 配置(SqlServer,Mysql)
    mysql sql优化
    非root用户安装、配置mysql
    使用spring jdbc遇到的一个性能问题
    mac 修改 vim 配色
    logstash 监控日志文件时应对日志文件名改变的原理
    java Atomic compareAndSet部分原理分析
    实现进程单例的一些想法
    java String、String.concat和StringBuilder性能对比
    Elasticsearch 动态修改replica配置、增删replica
  • 原文地址:https://www.cnblogs.com/SunArmy/p/9509050.html
Copyright © 2020-2023  润新知