首页 > 数据库 >MySQL尚硅谷-宋红康 基础补缺 days01

MySQL尚硅谷-宋红康 基础补缺 days01

时间:2022-09-27 09:34:56浏览次数:58  
标签:语句 存储 函数 游标 days01 MySQL 过程 宋红康 变量

基础部分查漏补缺:

1. SQL99语法新特性

  1.1 自然连接(NATURAL  JOIN)

    相当于SQL92中的等值连接,会自动查询两张表中所有字段名相同的字段,然后做等值连接

    缺点:无法选择某些字段的等值连接,不够灵活;

  1.2 USING:和NATURAL  JOIN不同的地方在于,USING指定具体相同字段的名称,需要在USING的括号中填入指定的同名字段,可以简化;

  1.3 计算列:

    简单来说就是某一列值是通过别的列计算而来,CREATE和ALTER操作都支持;

    格式:num  INT  GENERATED  ALWAYS  AS  (计算公式)  VIRTUAL   # num字段则为计算列

2. 自动提交:可以设置 SET AUTOCOMMIT = FALSE,阻断DML或DDL操作时,默认情况下的自动提交(比如DELETE操作可以回滚);

3. 修改表结构

  增加一列:alter table 表名称  add 【column】 字段名  数据类型 【not null】【default 默认值】;

  删除一列:alter table 表名称 drop 【column】 字段名;

  修改数据类型:alter table 表名称 modify 【column】 字段名  新的数据类型 【not null】【default 默认值】;

  修改列名称:alter table 表名称 change 【column】 旧字段名 新的列名称  新的数据类型 【not null】【default 默认值】;

  表的重命名:alter table 表名称 rename 新名称; 或者 rename  table  表名称 to 新名称;

  增加主键:alter table 表名称 add 【约束名】 primary key(字段列表);

  删除主键:alter table 表名称 drop primary key;

  增加唯一性约束:alter table 表名称 add 【约束名】 unique (字段列表);
  删除唯一性约束:alter table 表名称 drop index   约束名;

4. 触发器(新增、查看、删除):对数据做一些操作的时候,为了保证逻辑性,需要对其他表进行操作,就可以设置触发器,完善流程;(感觉可以对一些的业务操作,比如软删除进行标记)

  触发器可以确保数据的完整性。

  触发器可以帮助我们记录操作日志。

  触发器还可以用在操作数据前,对数据进行合法性检查。

  触发器在某些删除表的情况下不被激活;


 

5. 存储过程(一组经过预先编译的SQL语句的封装)

  5.1 优点

    简化操作,提高sql语句重用性,类似视图;

    减少网络传输,客户端不需要传输所有sql语句给服务器,同时也减少sql语句暴露在网上的风险,提高数据查询的安全性;

  5.2 与视图的区别

    视图是虚拟表,通常不对底层数据表直接操作;

    存储过程是程序化的sql,可以直接操作底层数据表,相比面向集合的操作方式,能够实现复杂的数据处理;

  5.3 语法分析

    创建存储过程:过程比较复杂,可以查看尚硅谷-课件-第15章-P2;(阿里一般不使用拓展性差,无移植性)

    存储过程的调用:CALL  存储过程名;

6. 存储函数(一定有返回类型):具体的看尚硅谷-课件-第15章-P7;

7. 存储过程和存储函数对比

  •     
      关键字 调用语法 返回值 应用场景
    存储过程 PROCEDURE CALL  存储过程() 理解为有0个或多个 一般用于更新
    存储函数 FUNCTION SELECT  函数() 只能是一个 一般用于查询结果为一个值并返回时

  

 

  存储函数可以放在查询语句中使用,存储过程不行;

  存储过程的功能更加强大,包括能够执行对表的操作(创建、删除等)和事务,而存储函数不行;

8. 存储过程和函数的查看修改和删除

  8.1 使用 SHOW  CREATE 语句查看存储过程和函数的创建信息  SHOW  CREATE  { PROCEDURE  |  FUNCTION } 存储过程名或函数名

  8.2 使用 SHOW  STATUS 语句查看存储过程和函数的状态信息  SHOW  { PROCEDURE  |  FUNCTION }  STATUS  {  LIKE  'pattern'  } #红色匹配存储过程或函数的名称,省略时列出所有存储过程和函数的信息;

  8.3 从 information_schema.Routines 表中查看存储过程和函数的信息,信息存在该表中,可以通过查询该表记录来看到 

SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='存储过程或函数的名' [AND ROUTINE_TYPE = {'PROCEDURE|FUNCTION'}];

  8.4 修改:修改存储过程或函数,不影响功能,只修改相关特性;  ALTER { PROCEDURE | FUNCTION } 存储过程或函数的名 [characteristic ...]  #characteristic指定存储过程或函数的特性,具体查看文档

  8.5 删除:DROP {PROCEDURE | FUNCTION} [IF EXISTS] 存储过程或函数的名  #IF EXISTS:如果程序或函数不存储,它可以防止发生错误,产生一个用SHOW WARNINGS查看的警告。

9. 变量:数据库的存储过程和函数里,可以使用变量来存储查询或计算中间结果数据;变量分为系统变量用户自定义变量

  9.1 系统变量

    a. 由系统定义,属于服务器层面,启动Mysql服务、生成Mysql服务十七期间,为内存中的系统变量赋值;

    b. 要么是编译Mysql时参数的饿默认值,要么是配置文件中的参数值;

    c. 系统变量分为全局系统变量(global)和会话系统变量(session),默认会话级别;静态变量在实例运行期间不可以使用set动态修改;

    d. 系统变量的查询、修改、删除;  #尚硅谷-课件-第16章-P2;  

  9.2 用户变量:用户变量是用户自己定义的,作为 MySQL 编码规范,MySQL 中的用户变量以 一个“@” 开头。根据作用范围不同,又分为 会话用户变量 和 局部变量 。#尚硅谷-课件-第16章-P3

    a. 会话用户变量:作用域和会话变量一样,只对 当前连接 会话有效;
    b. 局部变量:只在 BEGIN 和 END 语句块中有效。局部变量只能在 存储过程和函数 中使用;必须用 declare 声明,且在BEGIN中的首行;

10. 定义条件与处理程序

  定义条件:时事先定义程序执行过程中可能遇到的问题;

    格式:DECLARE 错误名称 CONDITION FOR 错误码(或错误条件);  #MySQL_error_code 和 sqlstate_value 都可以表示MySQL的错误。

        MySQL_error_code是数值类型错误代码。  DECLARE Field_Not_Be_NULL CONDITION FOR 1048;

        sqlstate_value是长度为5的字符串类型错误代码。  DECLARE Field_Not_Be_NULL CONDITION FOR SQLSTATE '23000';

  处理程序:定义在遇到程序问题时应当采取的处理方式,并且保证存储过程或函数在遇到警告或错误时可以继续运行;

     格式:DECLARE 处理方式 HANDLER FOR 错误类型 处理语句;

11. 循坏结构(LOOP/WHILE/REPEAT)看#尚硅谷-课件-第16章-P13实例;

  LOOP内的语句一直重复执行直到循环被退出(使用LEAVE子句),跳出循环过程。

  WHILE在执行语句执行时,先对指定的表达式进行判断,如果为真,就执行循环内的语句,否则退出循环。  

  REPEAT 循环首先会执行一次循环,然后在 UNTIL 中进行表达式的判断,如果满足条件就退出,即 END REPEAT;如果条件不满足,则会就继续执行循环,直到满足退出条件为止。

12. LEAVE和TREATE:类似于break和continue;使用的时候要像汇编一样后面加上跳转的名称;

13. 游标(能够对结果集中的每一条记录进行定位,并对指向的记录中的数据进行操作的数据结构。)

  使用游标的步骤:  

    第一步,声明游标:DECLARE cursor_name CURSOR FOR select_statement;  #游标必须定义在变量下面

    第二步,打开游标:OPEN cursor_name;  #打开游标的时候 SELECT 语句的查询结果集就会送到游标工作区,为后面游标的 逐条读取 结果集中的记录做准备。

    第三步,使用游标(从游标中取得数据):FETCH cursor_name INTO var_name [, var_name] ...  #游标的查询结果集中的字段数,必须跟 INTO 后面的变量数一致

    第四步,关闭游标:CLOSE cursor_name;  #游标会占用系统资源 ,如果不及时关闭,游标会一直保持到存储过程结束


 

 

 

  

标签:语句,存储,函数,游标,days01,MySQL,过程,宋红康,变量
From: https://www.cnblogs.com/LinxhzZ/p/16732137.html

相关文章