• mysql入门(四)


    mysql的视图操作

    1.视图是一张虚拟表,它表示一张表的数据或多张表的数据;
    2.视图是建立在实体表结构的基础上的;
    3.视图中没有数据的,只有表结构,数据的来源基于实体表(获取);
    4.一张表可以创建多个视图,一个视图可以引用多张表。

    (1).创建视图

    create view `视图的名`
    as
    查询sql语句;

    create view stuinfo_
    as
    select * from stuinfo;

    (2).查询视图中的数据

    select * from stuinfo_;

    (3).修改视图

    视图就是为了让查询边的更加简单,常用;视图只能查询。

    alter view stuinfo_
    as
    select * from stuinfo natural left join stumarks;

    (4).查看所有视图

    show tables;

    (5).查看视图信息

    show create view stuinfo_G

    (6).查看视图的结构

    desc stuinfo_;

    (7).删除视图

    drop view stuinfo_;

     

    mysql的事务操作

    1.事务是一个不可拆分工作单元;
    2.事务作为一个整体向mysql系统提交(针对多条sql语气,要么一起执行成功,要么一起失败);
    3.事务不可以嵌套。

    (1).事务的特性

    1.原子性:不可被拆分
    2.一致性:要么一起执行成功,要么一起失败
    3.隔离性:相互独立
    4.永久性:一旦执行成功,不能被修改(事务执行成功,本次事务执行完毕)

    -- 事务需要开启
    start transaction;
    
    -- 在事务当中写行为sql语句,增删改
    insert into stuinfo values(null,'tom',2,18,'伦敦');
    insert into stumarks set sid=14,ch=100,ma=90;
    
    -- 事务需要提交 成功->提交
    commit;
    
    -- 如果失败 失败->回滚
    rollback;

    注意:事务只能在innodb引擎的表中取使用,myisam不支持事务

    (2).自动提交事务

    -- 查看自动提交事务是否开启(其它语言调用)(默认开启)
    show variables like 'autocommit';
    
    -- 开启或关闭
    set autocommit = 1|0;

    mysql的索引操作

    优点:mysql的索引增加了查找的速度。

    缺点:1.需要更多的空间来存储索引;2.myisam的索引比innodb的要多(myisam管查询,innodb管理动作)。

     

    (1).创建索引的原则

    适合:
    1.用于频繁查找的列;
    2.用于条件判断的列;
    3.用于排序的列。

    不适合:
    1.列中的数据不多(少见,null);
    2.表中的数据很小。

    (2).索引的类型

    create index `索引名` on `表名`('字段');
    ​
    alter table `表名` add index `索引名`('字段');

    1.主键索引(primary key)

    唯一性,不能为空。
    2.唯一索引(unique)
    唯一性。
    3.全文索引(fulltext key)
    myisam 支持全文索引,但是innodb可以创建全文索引(不能使用)。
    全文索引是配合like使用的,在模糊查询的时候增加查询的速度。
    4.普通索引(index)
    除了提升查找速度,几乎无作用

    【补充】:联合索引

    -- 将多个字段联合成一个索引,联合索引在同时使用所有的定义字段时才会触发
    create index `index` on `stuinfo`('age,sname,city');
    ​
    -- 联合索引的触发方式之一,一起查询
    select age,sname,city from stuinfo ;

    (3).删除索引

    drop index `索引名` on `表名`;

    存储过程(procedure)

    -- 语法:
    create procedure 存储过程名(参数,....)
    begin
        sql语句;
    end//

    注意:存储过程是保存sql语句的,sql语句需要分号来被保证完整性,索引结束符必须要更换

    /* 更改结束符 ,以前的sql结束符都是封号,现在可以改成除封号以外的符号
       临时命令,一次性命令,(只要cmd关闭再重新打开就失效了) */
    -- 将封号结束符改成了//
    delimiter //

    (1).创建简单的存储过程

    -- procedure 中只有一句sql,begin和end可以省略
    create procedure pro_1()
        select * from stuinfo;
    //
    
    -- 调用:procedure是一个特殊的函数,使用call关键字来调用
    call pro_1()//

    创建包含多条sql语句的procedure

    create procedure pro_2()
    begin
        select * from stuinfo;
        select * from stumarks;
    end//
    
    call pro_2()

    (2).procedure的输入输出参数

    特殊的存储过程,没有return,通过'输入输出参数'来实现。
    1.输入参数in(默认in)
    2.输出参数out
    3.输入输出参数inout

    (3).创建带有参数的存储过程

    procedure中参数是需要定义数据类型的。

    create procedure pro_3(in id int)
    begin
    select * from stuinfo where sid=id;
    end//
    ​
    call pro_3(10)//

    (4).删除存储过程

    drop procedure [if exists] `存储过程名`//

    (5).局部变量

    语法:declare 变量 数据类型 [初始值]
    通过select....into... 或者 通过 set 来重新赋值

    -- 创建一个procedure查询学生的姓名(sname)和年龄(age),id外部传入
    create procedure pro_4(id int)
    begin
        declare name varchar(10);
        declare agee tinyint unsigned;
        -- 这一句sql只是赋值
        select sname,age into name,agee  from stuinfo where sid=id;
        -- 因为上面的语句只是赋值,不会输出,所以使用下面语句让它来输出
        select name,agee from dual;
    end//
    
    call pro_4(10)//

    通过set来设置

    -- 计算自己的周岁
    create procedure pro_6(in num1 year,in num2 year,in name char(32))
    begin
        -- 先设定一个num局部变量
        declare num int default 0;
        set num = num2-num1;
        select name,num from dual;
    end//
    
    call pro_6(1999,2019,'小宋')//

    (6)全局变量

    变量的前面加上一个@ ,可以在函数外设置。

    -- 设置全局变量
    set @name = '小马'//
    
    -- 打印全局变量
    select * from stuinfo where sname=@name//

    (7).系统常量

    系统常量是两个@@,一种是下划线连接的两个或多个单词

    -- 打印系统版本号
    select @@version from dual//-- 打印当前的时间日期
    select current_timestamp from dual//
    系统命令作用
    @@version 版本号
    current_date 当前的时间
    current_time 当前的时间
    current_timestamp 当前的时间日期

    (8)带有输出的参数

    关键字:out

    create procedure pro_7(in num int,out result int)  -- result不参与计算,只是用来做返回的 
    begin
    set result=num*num;
    end//
    ​
    call pro_7(6,@result)//        -- @result用来接收输出

    (9)带有输入和输出功能的参数

    关键字:inout

    create procedure pro_8(inout num int)
    begin
        set num=num*num;
    end//
    
    -- 先定义全局变量,用来给函数接收参数
    set @num = 8//
    
    call pro_8(@num)//
  • 相关阅读:
    CF1480
    网络编程中常见地址结构与转换(IPv4/IPv6)
    inet_pton, inet_ntop
    mktime 夏令时
    C/C++中volatile关键字详解
    STL之vector容器详解
    Linux学习--gdb调试
    Linux编程基础——GDB(设置断点)
    FTP模式简式:PORT/PASV/EPRT/EPSV
    strchr和strstr 函数
  • 原文地址:https://www.cnblogs.com/bonheur/p/12588509.html
Copyright © 2020-2023  润新知