2018-2-1 数据控制语言

 数据控制语言(DCL)

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

则主要就是2个问题:用户管理

           权限分配:有哪些权限。

mysql中的权限:

mysql中,权限是系统内定的一些“名词”(单词),大约30个,每个权限表示“可以做什么工作”。 则分配权限就是相当于让某个用户可以做哪些工作。主要权限如下:

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

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

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

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

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

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

修改用户密码:

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

修改他人密码(必须有修改权限):set  password  for  用户名@允许其登录的地址  = password(新密码);

权限分配:

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

说明:

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

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

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

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

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

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

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

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

事务控制语言(DTL)

事务:

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

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

简单来说,“一条sql语句,就是一个事务”。

则:

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

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

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

事务的特点:

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

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

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

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

事务模式:就是让每条执行语句是否当作“一个事务”来看到的设定项

mysql默认安装好之后,其事务模式是:一条语句当作一个事务

我们可以将其修改为:事务需要“认可”模式:

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

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

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

 

不管autocommit的值是什么(1,0),我们也仍然可以使用事务的完整流程模式来实现事务

事务的实现:

 

1、声明事务开始:start  translation

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

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

if( 判断是否有错误){
    //执行——才针对执行了物理性改变——即生效。
    commit;
}
eslse{
    //回滚——不执行任何语句。
    rollback;
}

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

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

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

一个事务有多条语句,如果全部正确,则commit,如果有其中任意一条或一条以上发生错误,则rollback;

mysql编程:

基本语法形式:begin...end;代替原来编程语句中的{...}语法。

 

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

 

语法:if语句:

case语句(相当于php中的switch):

 

 

while循环语句:

 

mysql中的变量:

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

其实,这些语句只能在编程环境中用

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

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

普通变量的声明语法:

declare 变量名 变量类型 [default 初始值];

变量的赋值语法:

set 变量名 = 变量值;

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

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

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

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

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

综上所述:①set 变量名 = 表达式;#此语法中的变量必须先使用declare声明

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

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

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

存储函数:

调用形式:

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

比如:

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

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

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

存储过程:

存储过程就是一个没有返回值数据值的“函数”。

虽然存储过程不返回单个数据值,但可以“返回”结果集——这里的返回起始就是select语句的正常结果表现。

定义形式:

in,out,inout用于修饰一个形参的“数据流向”:

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

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

inout:具有双重。

存储过程调用形式:

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

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

触发器:mysql中的一种“一触即发”的机器(机制)。其实只是预先定义好的一段代码。该段代码无需人工调用,而是会在‘预计’好的某个情形下自动执行。

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

 

 

触发器内部属于“编程环境”。

定义形式:

create  trigger  触发器名字  before(或after)  insert(或update或delete)  on  表名 for  each  row 
begin
    要执行的代码,语句块,编程环境,但这里也不能使用select语句。
end;

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

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

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

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

 

 

转载于:https://www.cnblogs.com/dns6/p/8400151.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用汇编语言在LCD1602上显示1-9数字的示例代码: ``` ORG 0X0000 ; 定义数据段 LCD_DATA EQU P0 ; LCD 显示数据口 LCD_CMD EQU P2 ; LCD 命令口 DELAY_CNT EQU 0FH ; 延时计数器 ; 定义常量 CMD_CLR EQU 01H ; 清屏 CMD_ENTRY_MODE EQU 06H ; 光标右移 CMD_DISPLAY_CTRL EQU 0CH ; 显示开关控制 ; 定义变量 NUM DB 0 ; 存储数字 ; 定义子程序 DELAY: ; 延时子程序 MOV R7, #DELAY_CNT DELAY_LOOP: DJNZ R7, DELAY_LOOP RET LCD_WR_CMD: ; 向LCD写入命令子程序 CLR RS ; RS=0,写入命令 MOV LCD_DATA, A ; 将命令写入数据口 SET EN ; EN=1 ACALL DELAY ; 延时 CLR EN ; EN=0 RET LCD_WR_DATA: ; 向LCD写入数据子程序 SET RS ; RS=1,写入数据 MOV LCD_DATA, A ; 将数据写入数据口 SET EN ; EN=1 ACALL DELAY ; 延时 CLR EN ; EN=0 RET MAIN: MOV NUM, #1 ; 将数字存储到变量 NUM 中 ; 初始化 LCD MOV A, CMD_CLR ; 清屏 ACALL LCD_WR_CMD MOV A, CMD_ENTRY_MODE ; 光标右移 ACALL LCD_WR_CMD MOV A, CMD_DISPLAY_CTRL ; 显示开关控制 ACALL LCD_WR_CMD ; 显示数字 MOV A, NUM ; 将数字加载到累加器 A 中 ADD A, #48 ; 将数字转换成 ASCII 码 ACALL LCD_WR_DATA SJMP $ END ``` 这段代码主要是通过定义数据段、常量和变量,以及定义延时子程序、向LCD写入命令和数据的子程序等,来实现在LCD1602上显示数字的功能。在主程序中,首先将数字存储到变量 NUM 中,然后进行LCD初始化操作,最后将数字转换成ASCII码,并通过调用向LCD写入数据的子程序来在LCD上显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值