zoukankan      html  css  js  c++  java
  • MySQL-数据与事务控制语言

    一、数据控制语言(DCL)

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

    2、则主要就是2个问题:

      用户管理:

      权限分配:有哪些权限。

    1、mysql中的权限

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

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

    (3)主要权限如下:

       

     

    2、mysql中的用户

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

       

    (1)创建用户

    语法形式:

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

    说明:

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

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

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

     

    (2)删除用户

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

     

    (3)修改用户密码 登录进去

    ①修改自己密码: set  password = password(‘新密码’);

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

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

     

    3、权限分配

    (1)增加权限:

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

    说明:

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

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

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

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

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

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

     

    (2)删除权限

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

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

    二、事务控制语言(DTL)

    1、什么是事务

    通常,在此之前,我们说,一条语句使用一个分号(;)来结束,并得到执行。那么我们说,这个“一次性执行”的过程,可以称为“一个事务”。

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

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

    2、为什么需要事务?

    看一个实际应用需求(银行存款):表名cunkuan

    id

    账户名

    存款

    1

    test1

    1000

    2

    test2

    5000

    3

    test3

    3000

    现在,test1突然需要一笔钱,买iPhone8,向test2借钱4000。

    银行转账:

    第一步: update  cunkuan  set 存款=存款-4000  where id=2;

    第一步做完,突然断电了!

    第二步: update  cunkuan  set 存款=存款+4000  where id=1;

    则如果没有事务,就可能发生这种事情(惨案)。

    如果有了事务,则就可以避免该事情。

    事务可以看作是一个“容器”,将多条语句,放入该容器,最后,只要一个命令行,来决定其中的所有语句是否“执行”。

    3、事务的特点

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

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

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

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

    4、事务的基本实现流程:

    (1)声明事务开始:start transaction;

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

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

    if( 判断是否有错误){

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

    commit;

    }

    eslse{

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

    rollback;

    }

      

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

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

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

     

    下来来使用事务完整转账这件事情(假设为cmd模式):

    start  transaction;

    #第一步:

    update  cunkuan  set 存款=存款-4000  where id=2;

    #第一步做完,突然断电了?

    #第二步:

    update  cunkuan  set 存款=存款+4000  where id=1;

    则如果这两条语句都没有错误,就可以:

    commit;

    但,如果其中发生了错误,则可以:

    rollback;

     

  • 相关阅读:
    VMware Workstation Pro 12 创建虚拟机(安装Ubuntu)
    老师的题目(开心一刻)
    政务私有云盘系统建设的工具 – Mobox私有云盘
    学校信息化分享-中小学怎样快速完成教学资源库的建设
    SpringBoot 2.x 文件上传出现 The field file exceeds its maximum permitted size of 1048576 bytes
    nginx错误集
    nginx做http强制跳转https,接口的POST请求变成GET
    swagger Base URL地址和下边的不一致
    CentOS7关闭防火墙
    nginx配置:静态访问txt文件
  • 原文地址:https://www.cnblogs.com/wjglm/p/9497674.html
Copyright © 2011-2022 走看看