• 数据控制语言


    数据控制语言(DCL

    数据控制,其实就是“分配权限”——就涉及到用户。

    则主要就是2个问题:

    用户管理:

    权限分配:

    有哪些权限。

    mysql中的权限

    mysql中,权限是系统内定的一些“名词”(单词),大约30个,每个权限表示“可以做什么工作”。 

    则分配权限就是相当于让某个用户可以做哪些工作。

    常见的权限有:

    mysql中的用户

    mysql中的用户信息都存储在系统数据库mysqluser表中:

    创建用户

    语法形式:

    create  user  用户名@允许其登录的地址  identified  by  密码;

    说明:

    1,创建的用户需同时指定该用户可以在哪个地址进行登录。

    其中%”代表“任何地址”

    2,用户创建之后,自动在mysqluser表中添加了一条记录,但该用户还没有权限。

    删除用户

    drop  user  用户名@允许其登录的地址

    修改用户密码

    修改自己密码: set  password = password(‘新密码’);***** mysql库里的user 里面改******

    修改他人密码(必须有修改权限):

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

    权限分配

    增加权限:

    grant 权限名1,权限名2....  on  数据库名.对象名 to  用户名@允许其登录的地址  identified by 密码

    说明:

    1权限名就是:select, update, delete,等等。其中ALL 表示“所有权限”或 all  privileges也一样

    2对象名:就是一个数据库中“装”的东西,表是最常见的,也可以是视图,存储过程,存储函数等。

    其中:**表示所有数据中的所有对象

    某数据库名.*表示该数据库中的所有对象——这个商业上常用。

    3identified by 密码用于给一个用户在此时修改密码,不写也可以,那就不修改密码。

    4,但同时该语句也可以创建用户(如果不存在),但此时identified by ‘密码’必须写。

    删除权限

    revoke  权限名1,权限名2....  on  数据库名.对象名 from  用户名@允许其登录的地址 ;

    表示从某个用户身上“取消”某些权限(也许还保留了其他权限)。

    事务控制语言(DTL

    什么是事务

    通常,在此之前,我们说,一条语句使用一个分号(;)来结束,并得到执行。

    那么我们说,这个“一次性执行”的过程,可以称为“一个事务”。

    “一条sql语句,就是一个事务”。

    数据库(自然包括mysql数据库)中的事务,是指,可以将“多条语句”的执行,当作“一条语句”来看到的一种内部机制。

    而:“事务”是一种可以保证“多条语句一次性执行完成”或“一条都不执行”的机制。

    事务的特点

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

    一致性:让数据保持逻辑上的“合理性”,比如:一个商品出库时,既要让商品库中的该商品数量减1,又要让对应用户的购物车中的该商品加1;

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

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

    事务需要“认可”模式:

    set  autocommit = 0; //false,关闭该模式,即此时不再是一条语句一个事务了。

    //结果是:必须使用commit语句才能够生效。

    没有变化,然后再执行commit

    注意:autocommit 的设置值,只是影响通常情况下每条语句的默认行为(自动提交还是等着commit提交)

    事务的基本实现流程:

    1,声明事务开始:start transaction;

    2, 设定多条要执行的具体语句,比如insertupdatedelete, select。。。其实就是执行,只是这些执行的语句,并不“生效”——其只是内存状态下的执行,而不是物理状态的执行。

    3,判断是否需要执行该些语句:

    if( 判断是否有错误){

    //执行——才针对执行了物理性改变——即生效。

    commit; 回滚

    }

    eslse{

    //回滚——不执行任何语句。

    rollback;

    }

    判断是否有错误通常分这两种环境:

    1,如果是cmd中,直接观察是否出错。

     2,如果是php程序中,那就需要使用 mysql_error()函数来判断是否有错。

    mysql编程

    基本语法形式

    语句块模式:

    mysql编程中,begin....end;基本代替了原来编程语句中的{...}语法。

    但又有所区别:

    一个bigin...end;块,可以给定一个“标识符”,并且可以使用leave语句来“退出”该语句块。

    基本流程控制语句:

    if语句:

    case语句:(类似php中的switch)

    while循环语句:

     

    mysql中的变量

    变量它有一定的使用场景限制(其实包括前面的流程控制语句也这样):

    在通常的执行各种createinsertdeleteupdateselect等语句的“环境”中,并不使用常规变量,也不能使用流程控制语句。

    其实,这些语句只能在编程环境中用——通常的增删改查,可以称为命令环境。

    编程环境:存储函数中,存储过程中,触发器中

    普通变量的声明语法:

    变量的赋值语法:declare 变量名 变量类型 [default 初始值]

    set 变量名 = 变量值

    mysql还有一种变量形式,可以称为“会话变量”

    会话变量的形式为:  @变量名;

    会话变量无需单独声明,而是直接赋值就可以,类似php

    会话变量的赋值:  set  变量名 = 值;

    会话变量可以在普通命令行环境中或编程环境中使用。

    语法1:set 变量名 = 表达式;

    语法2:set @变量名 = 表达式;

    语法3:select @变量名 := 表达式

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

    有两种环境

    1.常规mysql命令环境,可以执行:增删改查。。。

    2.编程环境:其实就是在特定的语句语法内部:存储过程内,存储函数内,触发器内。

    两种变量。

    1.普通变量:不带@符,直接写名字,必须先声明,后使用(赋值之类),只能用于编程环境

    2.会话变量:带@符,无需声明,直接使用(先赋值),可以用于2种环境。

    流程控制语句:只能用于编程环境

    存储函数:

    定义·形式:

    调用形式:

    跟系统函数的调用形式一样,直接使用名字,并带括号,以及根据需要带实参。

    比如:

    select  3, now(), f1();//f1为自定义的存储函数。

    select  3, now(), f2(3, abc,  @v1);//3个实参,其中@v1是一个前面赋值了的变量。

    删除:drop function [if exists] 存储函数名;

    inoutinout用于修饰一个形参的“数据流向”:

    in:只作为外部输入数据,调用环境传入存储过程内部,默认值。

    out:只作为输出数据,即存储过程传出到调用环境。

    inout:具有双重。

    存储过程调用形式:

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

    注:

    实际,在php中,其实是这样:

    $sql = “call   pro1(8, 'dd') ”;

    mysql_query( $sql );

    删除:drop procedure [if exists] 存储过程名

    触发器

    什么叫触发器:

    就是mysql中的一种“一触即发”的机器(机制)。

    其实只是预先定义好的一段代码。该段代码无需人工调用,而是会在‘预计’好的某个情形下自动执行。

    通常就这几个情形:

    对某个数据表的增(或删或改)之前(或之后)。 //每个表可见只有6种情形。

    触发器内部也跟存储过程或存储函数一样,属于“编程环境”。

    定义形式:

    create  trigger  触发器名字  before(或after)  insert(或updatedelete)  on  表名 for  each  row

    begin

    要执行的代码,语句块,编程环境,但这里也不能使用select语句。

    end

    在触发器内部,其中有两个关键字具有特定含义和数据获取作用:

    new:代表新插入的一条数据,在insert事件的时候有效。

    old:代表旧的一条数据,在updatedelete的时候有效。

     

    删除触发器: drop trigger 触发器名

    3个编程总结:

    共同点:

    可以使用普通变量;

    可以使用流程控制结构;

    他们其实都是“一段代码”而已,存储在数据库中。

    存储函数:

    需要返回一个数据值;

    不能有select语句;

    调用时直接当作一个“数据”来使用,即可以用于select或别的各种数据操作语句中。

    存储过程:

    不能返回数据

    可以有select语句;

    形参可以设定为数据的进出方向:inoutinout

    调用是使用call语句。

    触发器:

    不能返回数据;

    也不能有select语句;

    也没有参数,也不能调用,而是在触发的情况下自动调用(执行)。

  • 相关阅读:
    IE7 下父元素及子元素的隐藏顺序带来的 display:none bug
    PHP 类的魔术方法及类的自动加载
    元素及文本的居中
    软件工程个人作业 词频统计
    读书笔记——《最后期限》
    读书笔记——《构建之法》
    [Reading] Asking while Reading
    【Paper Reading】Learning while Reading
    Android学习一:文件操作
    Android学习九:屏幕自适应
  • 原文地址:https://www.cnblogs.com/sc1314-1218/p/8399701.html
Copyright © 2020-2023  润新知