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)     

      

        

        

 

原文地址:https://www.cnblogs.com/pzp-fire/p/5891168.html