MYSQL

作者: DragonRat | 来源:发表于2018-05-28 16:14 被阅读10次

    作者:烨竹

    数据库的基本操作

    登陆MySQL数据库服务:mysql -h服务器地址 -P端口号 -u用户名 -p密码
    mysql -hlocalhost -P3306 -uroot -p
    查看数据库:show databases;
    创建数据库 :create database 数据库名 【库选项】
    【库选项】:charset 用于设置字符集;collate 用于设置校验集
    create database php charset utf8;
    查看数据库的创建语句:show create database 数据库名;
    删除数据库:drop database 数据库名
    选择数据库:use 数据库名;

    数据表的基本操作

    设置客户端的通讯编码:set names 客户端编码
    查看数据表:show tables;
    创建数据表
    语法:
    create table 表名(
    字段1 列类型 【列属性】,
    字段2 列类型 【列属性】,
    ……
    )【表选项】
    说明:
    列类型 列所要存储的数据的类型
    【表选项】 包含以下几项:
    charset 存储字符集
    collate 校验集
    engine 设置存储引擎(MyIsam、innodb) 在高版本的MySQL中默认是InnoDB
    当创建一个表时,那么就是在创建一个表的结构,也就是表的表头信息。



    查看表结构:desc 表名
    查看表的创建语句:show create table 表名\G;
    删除表:drop table 数据表名;

    数据的操作

    数据库是用于数据的操作,操作包含CURD(增Create、改Update、查Review、删Delete)

    增加数据:insert into 表名【(字段列表)】 values(值列表);

    查看数据:select 【all|distinct】 |字段列表|字段名 【as】 字段别名 from 数据源【where子句】【group by子句】【having子句】【order by子句】【limit子句】


    【all|distinct】:all (缺省)显示查询到的所的记录;distinct去重(去掉重复)


    【where子句】作用:根据where子句中的表达式,在将数据从硬盘读取到内存时进行第1次筛选。


    【group by子句】
    group by 字段1,字段2….
    作用:根据where子句得到结果,对记录按指定的字段进行分组统计


    统计函数
    count(
    |字段名):
    字段名 按字段的的值统计每一组的记录个数(不会对字段名中包含null的记录进行统计)
    max(字段名):统计指定字段的最大值
    min(字段名):统计指定字段的最小值
    sum(字段名):取指定字段值的和
    avg(字段名):统计每个字段的平均值
    多字段分组
    group by 字段1,字段2…
    提示:
    先按第个字段划分大组,再在每个大组中,按第2个字段划分小组,而统计函数得到的结果是对最小组进行的统计
    回溯统计:with rollup


    【having 子句】
    对group by得到的统计结果再进行第2次筛选。
    提示:where表达式中,不能出现统计函数

    【order by子句】
    对最终的结果进行显示顺序上的控制。
    语法:order by 字段1 【asc|desc】, 字段2 【asc|desc】,
    说明:asc 缺省,升序
    desc 降序

    【limit 子句】:limit 【offfset,】rows
    说明:offset 表示的是偏移量,第1条记录偏移量就0,第2条记录偏移量就是1,依此类推,如果省略表示offset为0
    rows 表示的记录的条数。
    对最终的结果进行显示行数上的控制。
    数据的分页:
    与分页相关的因素:
    每一页的记录数 rowsPerPage 人为规定的
    当前页 curPage 用户点击的页码是几,当前页就是几
    业务场景:商品表goods 每一页的记录数是3条(rowsPerPage=3) 用户可以点击1,2,3,4,5….
    数据分页的通用的公式:
    limit (curPage-1)*rowsperPage,rowsPerPage

    联合查询
    语法:
    (select 语句A)
    union 【all|distinct】
    (select 语句B)
    说明:将A语句得到的结果与B语句得到的结果放在一个表中显示;两条select语句得到字段数要一致
    联合查询的作用主要有两方面:
    1、对同一个表的不同部分进行不同的查询方式
    2、分表存储数据联合查询数据

    子查询
    1、定义
    一个select语句中包含另一个select语句,那么被包含的select语句就是子查询。
    2、子查询的分类
    ①、根据子查询的位置:
    where子查询 子查询出现在的where的表达式中
    from子查询 子查询出现在的from后面的
    ②、根据查询出来的结果
    标量子查询 1 行1列
    列子查询 1列多行
    行子查询 1行多列
    提示:以上标量、列子查询、行子查询就是where子查询
    表子查询 多行多表
    提示:以表子查询就是from子查询
    3、子查询详解
    理解一下where表达式,就是根据字段与值的匹配情况进行记录的筛选


    ①、标量子查询

    ②、列子查询

    ③、行子查询
    找老乡

    ④、表子查询
    就from子查询

    小节:
    对于where子查询,where子查询得到的就是数据,要求大家一定要清楚子查询得到数据是一列一行,还是一列多行,还是一行多列。
    所有的子查询都必须使用括号括起来,
    只要from子查询需要起个别名。
    ⑤、exists子查询
    exists(查询语句)

    4、all、any、some
    all、any、some都是用于针对一个集合(多个值)
    all 所有
    any 每一个,任何一个 some是any的同义词,作用相同
    all 表示 >最大的
    <all 表示 <最小的
    <>all 表示 not in

    三、连接查询
    子查询 VS 连接查询
    子查询虽然涉及查询多个表,但是最终结果的数据只来源一个表。
    连接查询就是将多个表的数据连接在一起显示。
    1、内连接
    ①、隐式内连接
    语法:select 字段列表 from 表A,表B where 条件
    提示:如果多表数据源没有指定筛选条件,那么产生的迪卡尔积。
    示例:使用筛选条件

    ②、显式内连接
    语法:select 字段列表 from 表A 【inner】 join 表B where 条件

    提示:同连接也称之为等值连接(只有连接条件匹配的才会被保留)
    2、外连接
    ①、左外连接
    语法:
    select 字段列表 from 表L left join 表R on 连接条件
    ②、右外连接
    语法:select 字段列表 from 表L right join 表R on 连接条件
    说明:无论左外连接,还是右外连接,最终结果中的匹配成功的记录全都被保留。
    对于匹配不成立:左外连接保存左表的部分,右外连接保存右表的部分
    ④、using关键字
    using是用于指定连接的字段

    3、扩展(了解)
    ①、自然内连接
    自然内连接就是为了简化内连接,自然内连接不需要指定连接条件,会自动找两个表中同名的字段进行连接。
    语法:select 字段列表 from 表A natural join 表B;
    ②、自然左外连接
    就用于简化左外连接
    语法:select 字段列表 from 表L natural left join 表R;
    ③、自然右外连接
    就用于简化左外连接
    语法:select 字段列表 from 表L natural right join 表R;
    ④、交差连接
    语法:select 字段列表 from 表A cross join 表B where 条件

    修改数据:update 表名 set 字段名=值, 字段名=值, 字段名=值…【where子句】【limit子句】
    删除数据:delete from 表名 【where子句】【limit子句】

    存储引擎(了解),校验集
    存储引擎:驱动数据库软件对数据进行向硬盘中进行读写操作的。
    查看存储引擎:show engines;
    MyIsam特性:不支持事务安全,不支持外键
    InnoDB特性:支持事务安全,支持外键


    查看字符集:show charset;
    校验集就是某一种字符集的比较规则。
    查看校验集:
    show collation;
    _cs casesensitive 大小写敏感(区分大小写)
    _ci caseinsensitive 大小写不敏感(不区分大小写)
    _bin 二进制 区分大小写

    MySQL中的运算符:
    = 此符号在MySQL中即是赋值又是比较
    、<、<>、>=、<=、or、and、in\not in、between m and n \ not between m and n
    is null 专用于判断null值的
    is not null
    <=> 安全相等运算符,可以判断null值与非Null值
    like 主要用于模糊查询,需要与两个占位符配合使用 %、_
    % 表示模糊部分,当前位置及其后的0个或多个字符
    _ 表示模糊部分,当前位置的1个字符
    not like

    列类型——详解
    语法:
    create table 表名(
    字段1 列类型 【列属性】,
    字段2 列类型 【列属性】,
    ……
    )【表选项】


    数值型
    ①、整数型
    (unsigned)正整数

    ②、小数型

    语法:
    float(m,d);
    double(m,d)
    说明:
    m表示所有的位数(包含整数与小数部分)
    d表示小数位数
    整数位数m-d
    对浮点数会有丢失精度,一般很少使用
    decimal(m,d)
    说明:
    m表示所有的倍数(包含整数位与小数位)
    d表示小数位
    整数位是m-d


    字符型

    ①、定长字符串:char(n);n最大是255
     n表示最多存储的字符的个数,
     当创建表时,设置了字段为char(10),实际存储5个字符,在硬盘中这5个字符实际所占的空间是10个。
    ②、变长字符串:varchar(n);n最大是65535
    集合类型set:set(值列表);
    集合类型用于规定当前字段所能取的值的列表,只能在值列表中取1个或多个值。

    日期时间型
    year表示年 格式:’yyyy’ 例如:’2017’
    date表示日期 格式:’yyyy-mm-dd’ 例如:’2017-10-09’
    time表示时间 格式:’hh:ii:ss’ 例如:’ 17:02:40’
    datetime日期时间 格式:’yyyy-mm-dd hh:ii:ss’ 例如:’2017-10-09 17:02:40’
    timestamp时间戳 格式:’yyyy-mm-dd hh:ii:ss’ 例如:’2017-10-09 17:02:40’
    timestamp可以记录当前记录被修改的时间

    列属性
    create table 表名(
    字段名 列类型 列属性,
    字段名 列类型 列属性
    )【表选项】
    1、列类型 VS 列属性
    列类型限制的一条记录中的某一个字段的取值类型。
    列属性是对某个字段在一整列上的约束。
    2、null
    说明:
    当向表中插入数据时,如果没有为某些字段提供值,那么这些字段会使用系统的默认值Null
    null很特殊,一般我们不允许表中出现null值
    3、not null
    用于约束字段的值不允许为Null(不允许MySQL使用自己的默认值null来填充记录)
    4、default
    default用于自定义默认值,一般与not null联合使用,



    5、unique
    unique唯一的意思,用于约束当前字段中不能有重复的值出现。
    unique的特点:
    字段的值不允许重复,但允许为Null值,原因是null值不等于null
    6、primary key
    Primary key是一种索引
    说明:
    primary key约束特点是唯一且不允许为null
    7、auto_increment
    auto_increment是自增长的意思,主要有于解决主键的值的问题,与primary key一同使用,实现主键的值的递增。
    auto_increment只能应用给整数类型,而且只能是primary key或unique
    8、复合主键(了解)
    多个字段共同作用为一个主键。
    语法:
    primary key(字段1,字段2…);
    说明:
    只要组成复合主键的两个字段的值同时相同才算重复。
    10、备注 comment

    修改表结构
    alter table 表名 add|drop |modify|change |rename 字段名 列类型 列属性 first|after字段名
    修改列类型:change即可以修改字段名也能修改字段类型
    修改列类型:modify只能修改字段类型
    修改表名:alter table 表名 rename to 新表名;
    修改列属性
    ①、增加列属性
    增加非主键列属性:alter table 表名 modify 字段名 列类型 列属性 first|after字段名
    增加主键列属性:alter table 表名 add primary key(主键字段)
    ②、删除属性
    删除非主键列属性:alter table 表名 modify 字段名 列类型
    删除unique:alter table test_modify drop key 唯一键的索引名;
    说明:
    默认唯一键的索引名就是字段名
    删除主键:alter table 表名 drop primary key;
    说明:
    如果primary key与auto_increment联合使用,那么在删除primary key之前,要先删除auto_increment属性

    高级操作

    1、复制表结构
    语法:
    create table 表B like 表A
    说明:
    创建一个表B,表的结构与表A完全相同,但不包含其中的数据
    2、备份SQL执行结果
    语法:
    create table 表名 select 语句;
    说明:
    使用select语句查询到的数据,创建一个表
    3、限制更新
    语法:
    update 表名 set 字段名=值, 字段名=值 【where子句】【limit子句】
    说明:
    只更改where子句中匹配到的记录中的limit子句所限制的行数。
    4、限制删除
    语法:
    delete from 表名 【where子句】【limit子句】
    说明:
    只删除where子句中匹配到的记录中的limit子句所限制的行数。
    5、批量插入
    语法:
    insert into 表A【(字段列表)】 select 语句;
    说明:
    将select语句得到的数据,一次性插入到表A中。
    6、蠕虫复制
    说明:
    在批量插入的基础上,将数据来源表与数据插入的表设置为同一个表。那么这种情况就形象的称之为蠕虫复制。
    7、主键冲突
    ①、冲突更新
    语法:
    insert into 表名【(字段列表)】 values(值列表) on duplicate key update 字段=值, 字段=值,…
    说明:
    在向数据表中插入数据时,如果遇到主键或唯一键冲突,那么就执行更新操作。
    ②、冲突替换
    语法:
    replace into 表名【(字段列表)】 values(值列表) ;
    说明:
    在向数据表中插入数据时,如果遇到主键或唯一键冲突,那么就将原记录完全替换掉。
    8、清空表
    ①、delete
    delete from 表名;
    说明:
    如果不加where与limit则会将数据表中所有的数据删除
    使用delete删除表中所有的数据时,并不会重建索引(主键并不会重置)
    ②、truncate
    truncate 表名;
    说明:
    将数据表中所有的记录都删除
    使用truncate删除表中所有的数据时,会重建索引(主键会重置)

    外键


    表B的某个字段的取值,必须是表A主键字段中的1个;而且这种关系不需要人为的控制,是由MySQL自己来约束
    表B中被约束的字段就叫外键
    表B称之为从表
    表A称之为主表
    使用A表中的一个列的值来约束B表中的某个字段的取值范围

    创建外键,必须先创建主表,再创建从表。
    语法:foreign key(外键字段) references 主表(主键字段)
    说明:foreign 外的意思
    references 参考,参照

    外键的约束
    ①、从表被主表约束
    当主表与从表建立外键关系后,从表的外键字段的值必须是主表的主键字段值中的一个。
    对从表的外键字段的更新,同样要满足约束。
    ②、主表被从表约束
    不能随意删除主表
    主表的记录不能随意更新
    ③、置空(null)约束与级联约束
    默认主表中的记录是不能随意删除或修改,但是实现工作中,此需求是很正常,所以外键又提供了置空(null)约束与级联约束。
    on delete set null
    置空约束 当主表的记录被删除后,从表中被约束的外键的值设置null
    on update cascade
    级联约束 当主表的主键字段被修改后,从表中被约束的外键的同时更改为相应的值

    删除外键:alert table 表名 drop foreign key 约束名
    说明:删除外键需要知道外键的约束名,可以使用show create table 表名来查看

    添加外键
    注意:如果是一个已经存在的表,而且表中有数据,那么在添加外键之前,两个表中的外键约束的数据一定要满足条件
    语法:alter table 表名 add forien key(外键字段) references 主表(主键字段) 【on update cascade】【on delete set null】

    数据备份

    1、sql备份与还原
    ①、sql的备份
    只备份sql语句。
    备份的工具:



    运行环境是cmd窗口。
    语法:
    mysqldump –uroot –p 数据库名【表名】 > 备份文件
    ②、还原
    语法:mysql –uroot –p 数据库名 < 备份文件
    2、数据备份
    数据备份需要先登陆到mysql
    ①、数据的备份
    语法:select 字段名 from 表名 where 条件 into outfile ‘备份文件’ 【fields选项】【lines选项】
    说明:
    fields用于设置字段的相关信息
    以fields开头
    terminated by 设置字段与字段之间的分隔符 默认为tab
    enclosed by 设置字段的包裹 默认是空字符’’
    esacped by 设置null值使用什么代替 默认\N
    lines用于设置记录的相关信息
    以lines开头
    starting by 设置一行的开始符号
    terminated by 设置一行的结束符号 默认\r\n
    ②、数据的还原
    注意:数据还原时表结构一定要有
    语法:
    load date local infile ‘备份文件’ into table 表名 【fields选项】【lines选项】

    用户管理

    1、查看用户
    msyql的用户信息都保存在mysql数据库的user表中



    2、创建用户
    语法:
    create user ‘登陆名’@’用户的标识’ identified by ‘密码’;
    说明:
    用户标识分以下几种:
    localhost 本机
    IP 127.0.0.1 本机
    % 不限制
    3、授予权限
    新创建的用户是没有任何权限的,必须为用户授权。
    语法:grant all privileges|权限列表 on 数据库名.表名 to ‘登陆名’@’用户标识’;
    4、收回权限
    语法:revoke all privileges|权限列表 on 数据库名.表名 from ‘登陆名’@’用户标识’;
    5、删除用户
    语法:drop user ‘登陆名’@’标识’;
    6、重置root密码
    ①、关闭mysql服务
    ②、开启服务
    使用mysqld.exe工具跳过授权表启动msyql




    ③、重新开启一个cmd窗口,不需使用用户名就可以登陆mysql

    ④、修改root用户的密码



    ⑤、关闭第2步中处于挂起的窗口,并在任务管理器中结束msyqld服务

    ⑥、正常启动mysql服务程序,使用新密码进行登陆

    mysql高级

    视图view
    1、视图简介
    view的意思视窗,窗口的意思,在MySQL中翻译为视图;视图是mysql中的一种特殊的表,视图就是一条SELECT语句执行后返回的结果集
    创建语句:
    视图是MySQL中的一种特殊的表,但是这种表并不是由创建表的语句所创建,而是由select语句所创建。
    表结构:
    视图是MySQL中的一种虚拟表,视图的结构是由创建视图的select语句查询出的字段所创建。
    表的数据:
    MySQL中的视图并没有专属于自己的数据,视图的数据来源于创建视图的select语句所查询的数据表。
    2、创建视图
    语句:create 【or replace】 【algorithm=算法】 view 视图名 as select语句
    说明:
    【or replace】 用于替换视图
    【algorithm=算法】 用于设置视图的算法


    创建视图的那个表就是基表

    3、查看视图
    语法:show tables;
    4、视图操作
    视图也是一种表,但是如果是实际的表,那么我就可以进行增、删、改、查。但视图更主要的作用是进行查询。
    如果是查询操作,视图与实际的表没有任何的区别。
    视图也可以进行增、删、修改操作,但是限制会非常多。
    视图的特点:
    对基表的数据的任何更改都会即时的反映在视图中。
    视图可以分为单表视图与多表视图:
    单表视图就是创建视图的select语句只访问了1个表
    多表视图就是创建视图的select语句访问了多个表。
    个人理解:
    视图就是将一个sql语句保存起来,并命名,之后对这个视图的访问,会触发,创建视图的那个select语句的执行。
    5、修改视图
    语句:create 【or replace】 【algorithm=算法】 view 视图名 as select语句
    说明:如果是修改一个已经存在的视图,需要使用or replace即可。
    6、删除视图
    语法:drop view 视图名;
    7、视图算法
    ①、查看视图算法
    show create table 视图名;

    ②、视图算法分类:
    首先必须明确:
    与一个视图相关的有两条select语句,其一是创建视图的那个select,其二是查询视图的select;
    视图的算法说的就是这两条select语句的执行顺序
    temptable 临时算法,当查询一个视图时,先执行创建视图的select语句,将产生的结果保存内存中的一个临时表,之后在这个临时表的基础上再执行查询视图的select语句

    merge 合并算法,当查询一个视图时,会将创建视图的select语句与,查询视图的select语句进行合并为一条sql再执行。
    undefined 未定义,MySQL会自己决定使用temptable还是merge,绝大多数会选择merge算法

    小节:
    对视图的理解:就是使用一个类似于表名的来保存一条复杂的select语句。
    视图算法:就是两条select语句的执行顺序。

    触发器
    1、触发器的概念
    一类特殊的数据库程序,可以监视某种数据的操作(insert/update/delete),并触发相关的操作(insert/update/delete),保护数据的完整性(就是对当某一个表进行update、delete、insert操作时,会触发一段代码的执行。)
    2、触发器的要素
    触发事件: insert、update、delete
    触发时机: before、after 例如:before update、after update
    触发对象: 数据表
    范围: 每一行记录
    3、创建语法
    语法:
    create trigger 时机 事件 on 数据表 for each row
    begin
    所触发执行的代码
    end;



    4、触发器记录对象
    old、new
    old与new代表的是orderlist表,所改变的记录的之前与之后的状态。
    old new
    update 没有修改之前的记录 修改之后的记录
    insert null 新增的记录
    delete 删除之前的记录 null


    5、查看触发器
    语法:
    show create trigger 触 发器名
    语法:
    show triggers;
    6、删除触发器
    语法:
    drop trigger 触发器名

    事务
    1、事务
    事务是MySQL的一种机制,主要用于保证使用多条SQL语句,来完成现实中的一件事时,保证结果的一致。
    事务操作
    ①、开启事务
    start transaction;
    说明:
    执行此语句后,任何的sql对数据库的更改,都不会立即反应到数据库中。
    ②、执行事务中的sql
    //完成现实中的事情的多条sql。
    ③、根据事务中的sql的执行结果进行提交或回滚
    提交:commit;
    说明:
    将事务中的sql对数据库的更改,写到数据库中
    回滚:rollback
    说明:
    将事务中的sql对数据库的更改,全部删除。
    提示:
    当执行start transaction语句后,再执行commit或rollback那么这个事务就结束了。



    脏读(dirty read)



    4、回滚点
    语法:
    savepoint 回滚点名;
    说明:
    回滚点就是事务执行过程上的一个保存点
    语法:
    rollbak to 回滚点名;
    说明:
    只回滚到指定的回滚点

    5、事务的特性ACID(了解)
    Atomicity 原子性
    事务不可再分,可以保证多条sql要么全部成功,要么全部失败。
    Consitency 一致性
    当事务开始执行时,对硬盘中的数据没有影响。
    Isolation 隔离性
    多个事务的执行互不影响
    Durability 持久性
    当事务提交后,影响是永久的。

    变量
    MySQL主要是用于存储数据,并对数据进行增、删、改、查。但是MySQL也是一种程序语言,也可以定义变量、流程控制、定义函数、定义存储过程。
    1、MySQL的系统变量
    ①、查看预定义的变量
    语法:
    show variables【 like pattern】
    说明:
    【like pattern】 用于模糊查询


    ②、修改系统变量的值
    语法:
    set 系统变量=值;
    说明:
    以上系统变量的更改只影响当前客户端
    ③、全局系统变量的设置
    语法:
    set global 系统变量=值;
    说明:
    以上系统变量的更改只影响所有新连接进来的客户端。
    2、自定义变量
    ①、定义
    语法:
    set @变量名=值;
    说明:
    为了区分自定义变量与系统变量。自定义变量前需要使用@

    ②、访问
    语法:
    select 变量名:
    系统变量的访问使用show,但是自定义变量的访问使用select

    自定义变量的赋值

    ③、将字段的值赋值变量

    ④、局部变量
    语法:
    declare 变量名 类型 【default 默认值】
    说明:
    只能用在函数内

    函数
    1、系统函数
    字符串处理函数
    LTrim(): 去除左边的空格
    RTrim(): 去除右边的空格
    Upper(): 返回大写字符。Strtolower.
    Lower(): 返回小写字符。strtoupper
    Char_length(): 返回字符的个数。
    Left(str,len) : 返回串左边指定数目的字符.
    Right(str,len): 返回串右边指定数目的字符
    concat(str1,str2): 连接子字符串
    SubString(str,start[,len]):返回子串的字符,mid()同名函数。(substr)
    位置从1开始。
    Instr(父串,子串):第一个出现的位置。位置从1开始。没有找到,返回0.类似于
    日期时间函数
    • now():获取当前时间日期
    • Date() :返回日期时间的日期部分.当前日期curdate().
    • Time() :返回一个日期的时间部分.当前时间curtime().
    • DateDiff() :求两个日期的差
    • Year():返回一个日期的年份部分
    • Date_add(日期,interval 数字 单位),向日期添加时间间隔
    quarter()
    month()
    day()
    数学函数
    ABS(x) 返回x的绝对值
    CEILING(x) 返回大于x的最小整数值
    FLOOR(x) 返回小于x的最大整数值
    GREATEST(x1,x2,...,xn)返回集合中最大的值
    LEAST(x1,x2,...,xn) 返回集合中最小的值
    MOD(x,y) 返回x/y的模(余数)
    RAND()返回0到1内的随机值
    ROUND(x,y)返回参数x的四舍五入的有y位小数的值
    其他函数
    Md5():32位加密函数。主要用于对密码字段进行加密
    Version():查询版本号。
    Datebase():当前选择数据库
    2、自定义函数
    ①、定义
    语法:
    create function 函数名(变量 类型,变量 类型…) returns 类型
    begin
    //函数体
    return 值;
    end;
    说明:
    函数的定义必须指定返回值的类型
    函数体内部必须有返回值,
    函数内部不能使用select语句


    ②、函数的调用
    语法:
    select 函数名(实参)

    ③、作用域
    分全局作用域与局部作用域
    全局作用域:使用set @变量=值,定义的变量其他作用域就是全局作用域
    局部作用域:在函数内部使用declear声明的变量就是局部变量,其作用域就是局部作用域
    局部变量
    语法:
    declare 变量名 类型 【default 默认值】
    说明:
    只能用在函数内
    image.png

    ④、查看函数
    语法:
    show function status\G
    3、流程控制
    ①、if
    语法:
    if 表达式 then
    //语句体
    else
    //缺省语句体
    end if;
    说明:
    只有双分支没有多分支
    ②、while循环
    语法:
    while 表达式 do
    循环体
    end while;

    存储过程procedure

    1、简介:存储过程就是一个特殊的函数。
    2、创建存储过程
    语法:
    create procedure 过程名(方向 变量1 类型,方向 变量2 类型)
    begin
    //过程代码
    end;
    说明:
    方向 in out inout
    从外向里: in可以接收外部传递进来的数据
    out不能接收外部传递进来的数据
    inout可以接收外部传递的数据
    从里向外: in不能将值传递出来
    out可以将值传递出来
    inout可以将值传送出来



    存储过程的调用:
    call 过程名(实参);




    3、查看存储过程
    语法:
    show procedure status;

    4、删除存储过程
    语法:
    drop procedure 过程名;

    函数
    定义语法中必须有returns,函数体也必须有return
    函数中不能有select语句
    函数的调用使用select
    存储过程
    定义的语法中形参需要有方向(方向解决的是传递方式)
    过程中可以有select语句

    过程的调用使用call
    存储过程procedure
    1、简介
    存储过程就是一个特殊的函数。
    2、创建存储过程
    语法:
    create procedure 过程名(方向 变量1 类型,方向 变量2 类型)
    begin
    //过程代码
    end;
    说明:
    方向 in out inout
    从外向里: in可以接收外部传递进来的数据
    out不能接收外部传递进来的数据
    inout可以接收外部传递的数据
    从里向外: in不能将值传递出来
    out可以将值传递出来
    inout可以将值传送出来
    存储过程的调用:
    call 过程名(实参);
    3、查看存储过程
    语法:
    show procedure status;
    4、删除存储过程
    语法:
    drop procedure 过程名;
    函数
    定义语法中必须有returns,函数体也必须有return
    函数中不能有select语句
    函数的调用使用select
    存储过程
    定义的语法中形参需要有方向(方向解决的是传递方式)
    过程中可以有select语句
    过程的调用使用call

    相关文章

      网友评论

        本文标题:MYSQL

        本文链接:https://www.haomeiwen.com/subject/ijqgjftx.html