视图、函数、存储过程、触发器、权限管理

mariadb

视图

视图:VIEW,虚表(不占用磁盘空间),保存有实表的查询结果 1、视图主要用于查询,虚拟的表,不占用磁盘空间,真实的数据还是来自表,用于保存实表的查询结果 2、可以对视图插入数据,数据会自动插入到表中,只支持单表,对多表不支持,也不推荐对视图插入数据 3、视图可以这样调用,开发程序直接调用视图,当表名发生改变时,直接修改视图即可,一般建表时,表名一开始就定义好,尽量少改
创建视图
查看视图定义
删除视图:
视图中的数据事实上存储于“基表”中,因此,其修改操作也会针对基表实现;其修改操作受基表限制
为表中的字段加密

定义函数

函数:系统函数和自定义函数 系统函数:https://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.html
  • 自定义函数 (user-defined function UDF)
  • 保存在mysql.proc表中
  • 创建UDF
  • 说明: 参数可以有多个,也可以没有参数 必须有且只有一个返回值

自定义函数

创建函数UDF delimiter // 简单理解,结束符,可以自定义结束符号 delimiter ; 修改结束 符 示例:无参UDF
查看函数列表:
查看函数定义
删除UDF
示例:有参数UDF
自定义函数中定义局部变量语法
说明:局部变量的作用范围是在BEGIN…END程序中,而且定义局部变量语句必须在BEGIN…END的第一行定义
示例:
变量
为变量赋值语法
示例:
生产中网络和数据很重要 网络瘫痪是一批服务器无法访问 数据丢了,对企业和用户都不太好

存储过程

  • 存储过程优势
    • 存储过程把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要时从数据库中直接调用,省去了编译的过程
    • 提高了运行速度
    • 同时降低网络数据传输量
  • 存储过程与自定义函数的区别
    • 存储过程实现的过程要复杂一些,而函数的针对性较强
    • 存储过程可以有多个返回值,而自定义函数只有一个返回值
    • 存储过程一般可独立执行,而函数往往是作为其他SQL语句的一部分来使用
  • 存储过程:存储过程保存在mysql.proc表中
  • 创建存储过程
  • 查看存储过程列表
    • 查看存储过程定义
    • 调用存储过程
    • 存储过程修改 ALTER语句修改存储过程只能修改存储过程的注释等无关紧要的东西,不能修改 存储过程体,所以要修改存储过程,方法就是删除重建
    • 删除存储过程
    示例
    • 创建无参存储过程
    创建含参存储过程:只有一个IN参数
    示例
    创建含参存储过程:包含IN参数和OUT参数
    说明:创建存储过程deleteById,包含一个IN参数和一个OUT参数.调用时,传入删除的ID和保存被修改的行数值的用户变量@Line,select @Line;输出被影响行数

    流程控制

    • 存储过程和函数中可以使用流程控制来控制语句的执行
    • 流程控制:
      • IF:用来进行条件判断。根据是否满足条件,执行不同语句
      • CASE:用来进行条件判断,可实现比IF语句更复杂的条件判断
      • LOOP:重复执行特定的语句,实现一个简单的循环
      • LEAVE:用于跳出循环控制 #相当于 break
      • ITERATE:跳出本次循环,然后直接进入下一次循环 #相当于 continue
      • REPEAT:有条件控制的循环语句。当满足特定条件时,就会跳出循环语句
      • WHILE:有条件控制的循环语句

    触发器

    • 触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发、激活从而实现执行 与shell trap相似
    • 创建触发器
    示例:先准备表
    示例:创建触发器,在向学生表INSERT数据时,学生数增加,DELETE学生时,学生数减少
    查看触发器
    删除触发器
    触发器、存储、函数,这些简单了解下,现在开发不推荐使用这些,他们性能会影响服务器工作,灵活性也较差

    mysql 用户和权限管理

    • 元数据数据库:mysql 系统授权表: db, host, user columns\_priv, tables\_priv, procs\_priv, proxies\_priv
    • 用户账号: ‘USERNAME‘@’HOST’ @’HOST’: 主机名 IP地址或Network 通配符: % \_ 示例:172.16.%.%
    用户管理 创建用户:CREATE USER
    默认权限:USAGE 用户重命名:RENAME USER
    删除用户:
    修改密码:
    • 忘记管理员密码的解决办法: 启动mysqld进程时,为其使用如下选项: 关闭mysqld进程,移除上述两个选项,重启mysqld

    MySQL权限管理

    • 权限类别: 管理类 程序类 数据库级别 表级别 字段级别
    MySQL用户和权限管理
    • 管理类: CREATE TEMPORARY TABLES CREATE USER FILE SUPER SHOW DATABASES RELOAD SHUTDOWN REPLICATION SLAVE REPLICATION CLIENT LOCK TABLES PROCESS
    • 程序类: FUNCTION、PROCEDURE、TRIGGER CREATE ALTER DROP EXCUTE
    • 库和表级别:DATABASE、TABLE ALTER CREATE CREATE VIEW DROP INDEX SHOW VIEW GRANT OPTION:能将自己获得的权限转赠给其他用户
    • 数据操作 SELECT INSERT DELETE UPDATE
    字段级别 SELECT(col1,col2,…) UPDATE(col1,col2,…) INSERT(col1,col2,…)
    所有权限 ALL PRIVILEGES 或 ALL

    授权

    回收授权
    注意:MariaDB服务进程启动时会读取mysql库中所有授权表至内存 1、GRANT或REVOKE等执行权限操作会保存于系统表中,MariaDB的服务进程通常会自动重读授权表,使之生效 2、对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表:mysql> FLUSH PRIVILEGES;
    Loading...