zoukankan      html  css  js  c++  java
  • php学习 13 数据库的操作--mysql编程

    一、数据控制语言

        数据控制语言,就是对mysql的用户及其权限进行管理的语句;

      1.用户管理

        用户数据所在位置

          在mysql中的所有用户,都存储在系统数据库mysql中的user表中;

          

        创建用户

          形式: create user  ‘用户名’@‘允许登录的地址/服务器’  identified  by ‘密码’;

          说明:

            1.允许登录的地址服务器就是允许该设定的位置,来使用该设定的为用户名和密码登录,其他位置不行

            2.可见,mysql的安全什么验证需要三个信息。

          

          

        删除用户

          drop  user  ‘用户名’@‘允许登录的地址或服务器名’;

          

        修改用户密码

          修改自己的密码:

            set password = password(‘密码’);

          

          修改他人的密码(要有权限):

            set password  for ‘用户名’@‘允许登录的地址’ = password(‘密码’);

             

      2.权限管理

        权限是什么呢?

          mysql数据库,将其中所能做的所有事情,都分门别类分配到大约30个权限中去了,其中每个权限都是一个“单词”而已!比如:

            select  代表可以查询数据;

            update  代表可以修改的数据;

            delete  代表可以删除数据;

            ......

          其中有一个权限叫做all,其代表所有权限

          

          另一个表现形式:

          

        授予权限

          形式:

            grant  权限列表  on 某库.某对象  to  ‘用户名’@‘登录位置’ [identified by '密码'];

          说明:

            1.权限列表就是多个权限的名词,相互之间逗号分开;

            2.某库.某对象,表示给指定的某个数据库的某个下级单位附权;

            3.identified by 可以省略,如果不省略,就可以表示赋权限的同时也去修改它的密码;但是该用户不存在,此时就是在创建一个新用户,密码就必须要设置了。

          

          

        剥夺权限

          形式:

            revoke  权限列表  on  某库.某对象  from ‘用户名’@‘允许登录的位置’;

             

    二、事务控制语言

      1.什么叫做“事务”

        事物就是来保证多条增删改语句的执行的一致性:要么执行,要么不执行,只有这两种情况;    

      2.事务的特点

        原子性:一个事物中的所有语句,应该做到:要么全做,要么一个都不做;

        一致性:让数据保持逻辑上的‘合理性’,比如:在一个商品出库的时候,既让商品库中的该商品数量-1,又要让对应用户的购物车中的该商品+1;

        隔离性:如果多个事物同时并发执行,但每个事物就像各自独立执行一样;

        持久性:一个事物执行成功,则对数据来说应该是一个明确的硬盘数据更改(而不仅仅是内存中的变化)。

      3.事务模式

        事务模式是指:

          在我们的cmd命令行模式中,是否开启了“一条语句就是一个事务”的这个开关;

          默认情况下,这个模式是开启的,称为“自动提交模式”;

            set autocommit = 1;

            这样之后,每条增删改语句,就会立即生效;

          我们可以把它关闭,那就是‘人为提交模式’------即需要人为提交;

            set autocommit = 0;

          在这样更改之后,所有增删改语句,都必须使用commit时候才能生效;

          

          

          

      4.事务执行的基本流程

        1.开启一个事物

          start transaction;//这里也可以写成begin

        2.执行多条增删改语句;

        3.判断这些语句执行的结果情况,并进行提交或回滚;

            if(没有出错){

              commit;//这里是提交事务;此时就是一次性完成;

            }else{

              rollback;//回滚事务;此时就是全部撤销;

            }

          

    三、mysql编程

      1.mysql编程语句中语句块包含符

        mysql语句中的语句包含符其实就相当于js或者php中的大括号;

            [标示符] begin

              要执行的语句.......

            end [标示符]

          举例: if(条件判断)

                begin

                  //......

                end;

              end if;

                  

      2.流程控制语句

        if语句

          

        case语句

          它相当于php中的switch;

          

        loop循环语句

          

        while循环

          

        repeat 循环

          

        leave语句

          leave 标示符;

          其作用是用来退出begin...end结构或其他局有标示符的结构。   

      3.mysql中的变量

        mysql中,有两种变量形式;

        普通变量:不带“@”符号;

          定义形式:

            delare  变量  类型名 [default 默认值];//普通变量必须先这样定义;

          赋值形式:

            set  变量名 = 值;

          取值就直接使用变量名;

          使用“场所”:只能在“编程环境”中使用;

            什么是编程环境?只有3个:

              1.定义函数的内部;

              2.定义存储过程的内部;

              3.定义触发器;

         会话变量:带“@”符号:

           定义形式:

             set  @变量名 = 值; //跟php类似,无需定义,直接赋值;

           基本上在任何地方都可以使用

         变量赋值有如下形式:

           语法1(针对普通变量)

              set  变量名 = 表达式; 此语法中的变量必须先使用declare声明

           语法2(针对会话变量)

              set  变量名 = 表达式; 此方式无需要declare语法声明,而是直接赋值,类似php定义变量并赋值。

           语法3(针对会话变量)

              select @ 变量名 = 表达式;#此一举会给变量赋值,同时会作为一个select语句输出结果集;

           语法4(针对会话变量)

              select 表达式 into @变量名;此句虽然看起来是select语句,但其实并不输出结果集,而只是给变量赋值。

          

      4.存储(函数)过程procedure

        函数,也被说成“储存函数”,其实就是js或者php中所述的函数,但是其唯一的区别就是:这里的函数必须有一个返回值;

        定义形式:

          

        注意:

          在函数内部,可以使用各种变量和流程控制的使用;

          在函数内部,也可以有各种增删改语句;

          在函数内部,不可以有select或其他“返回结果集”的查询类语句;

          

        调用形式

          跟调用内部函数一样,比如:

          select now();

          或如果在编程语句中:

          

        删除函数

          drop  function 函数名;

        存储过程 procedure

          存储过程,其本质还是函数-----但是:不能有返回值

          定义形式:

            

          说明:

            in:用于设定该变量是用来接受实参数据的,即传入数据;默认不写就是in

            out:用于设定该变量是用来“存储存储过程中的数据”的,即传出,即函数中必须对他赋值;

            inout:是in 和out 的结合,具有双向作用;

            对于,out和in设定,对应的实参,就是“必须”是一个变量,因为该变量是用于“传出传入数据”;

        调用存储过程

          call 存储过程名(实参1,实参2......)

          它应该是在“非编程环境中”调用,即增删改查的场景下:

          举例:

            创建一个存储过程

            该存储过程的目标就是将三个数据存入数据表中;并返回该表的值

          

          举例(使用in ,out, inout)

          

            

        删除存储过程

          drop procedure  存储过程名;

      5.在php中使用存储函数或者存储过程的示意

          

      6.触发器

        含义

        触发器,也就是预先定义好的编程代码(跟存储过程和存储函数一样),并右一个名字。它不能调用,而是在某个表发生某个事件(增删改)的时候会自动调用起来。

        定义形式 

            create trigger 触发器名  触发时机 触发事件  on  表名  for  each  row as   

            begin

            //触发的语句

            end;

        说明:触发时机只有两个:before   ,after

            触发事件,只有三个:insert,update,delete

           在某个表进行insert 之前或之后,回去执行其中写好 的代码;即每个表只有6个情形会可能调用该触发器;

          通常,触发器用于对某个表进行增删改操作的时候,需要同时去做另外一件事的情形;

          在触发器的内部,有两个关键字代表某种特殊的含义,可以用于获取有关数据:

          new  它代表当前正要执行的insert或update的时候的“新行”数据;通过他,可以获取这一新行数据的任意一个字段的值,形式为:

          set @vq = new.id//获得该新插入获update行的id字段值

          old:它代表当前正要执行的delete的时候的“旧行”数据,通过它,可以获取这一旧行数据的任意一个字段的值,形式为:

           set @va = old.id //获得该新插入获update行的id字段的值(前提是有id)     

          

            

            

     

  • 相关阅读:
    REST
    Bootstrap
    深入浅出聊聊企业级API网关
    Message Queue
    pyspark
    贝叶斯解读
    Leetcode#95 Unique Binary Search Trees II
    Leetcode#24 Swap Nodes in Pairs
    Leetcode#147 Insertion Sort List
    Leetcode#98 Validate Binary Search Tree
  • 原文地址:https://www.cnblogs.com/pzp-fire/p/5891168.html
Copyright © 2011-2022 走看看