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;

     

  • 相关阅读:
    03_ if 练习 _ little2big
    uva 11275 3D Triangles
    uva 12296 Pieces and Discs
    uvalive 3218 Find the Border
    uvalive 2797 Monster Trap
    uvalive 4992 Jungle Outpost
    uva 2218 Triathlon
    uvalive 3890 Most Distant Point from the Sea
    uvalive 4728 Squares
    uva 10256 The Great Divide
  • 原文地址:https://www.cnblogs.com/wjglm/p/9497674.html
Copyright © 2011-2022 走看看