数据库---数据控制语言(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默认安装好之后,其事务模式是:一条语句当作一个事务。
事务的基本实现流程:
  1,声明事务开始:start transaction;
  2, 设定多条要执行的具体语句,比如:insert, update, delete, select。。。其实就是执行,只是这些执行的语句,并不“生效”——其只是内存状态下的执行,而不是物理状态的执行。

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

判断是否有错误通常分这两种环境:
  1,如果是cmd中,直接观察是否出错。
  2,如果是php程序中,那就需要使用 mysql_error()函数来判断是否有错。
一个事务有多条语句,如果全部正确,则commit,如果有其中任意一条或一条以上发生错误,则rollback;

mysql编程
基本语法形式
语句块模式:

在mysql编程中,begin....end;基本代替了原来编程语句中的{...}语法。
但又有所区别:
    一个bigin...end;块,可以给定一个“标识符”,并且可以使用leave语句来“退出”该语句块。
基本流程控制语句:
if语句:

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

while循环语句:

mysql中的变量
变量它有一定的使用场景限制(其实包括前面的流程控制语句也这样):
在通常的执行各种create,insert,delete,update,select等语句的“环境”中,并不使用常规变量,也不能使用流程控制语句。
其实,这些语句只能在编程环境中用——通常的增删改查,可以称为命令环境。
  常规mysql命令环境,可以执行:增删改查
  编程环境:存储函数中,存储过程中,触发器中。
普通变量的声明语法:
  declare 变量名 变量类型 [default 初始值]
变量的赋值语法:
  set 变量名 = 变量值
 mysql还有一种变量形式,可以称为“会话变量”
会话变量的形式为: @变量名;
会话变量无需单独声明,而是直接赋值就可以,类似php
会话变量的赋值: set 变量名 = 值;
会话变量可以在普通命令行环境中或编程环境中使用。

综上所述:   语法1:set 变量名 = 表达式;#此语法中的变量必须先使用declare声明
      语法2:set @变量名 = 表达式; #此方式可以无需declare语法声明,而是直接赋值,类似php定义变量并赋值。
      语法3:select @变量名 := 表达式;#此语句会给该变量赋值,同时还会作为一个select语句输出“结果集”。
      语法4:select 表达式 into @变量名;#此语句虽然看起来是select语句,但其实并不输出“结果集”,而只是给变量赋值。

总结---两种变量:
  普通变量:不带@符,直接写名字,必须先声明,后使用(赋值之类),只能用于编程环境
  会话变量:带@符,无需声明,直接使用(先赋值),可以用于2种环境。

存储函数
调用形式:
  跟系统函数的调用形式一样,直接使用名字,并带括号,以及根据需要带实参。
比如:
  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/1301694f/p/8452674.html

时间: 2024-10-02 21:45:41

数据库---数据控制语言(DCL)的相关文章

MySQL的数据控制语言DCL

我们使用DDL的"CREATE USER"语句创建用户,新的SQL用户不允许访问属于其他SQL用户的表,也不能立即创建自己的表,它必须被授权.可以授予的权限包括以下几组: 1.列权限:和表中的一个具体列相关 2.表权限:和一个具体数据表中所有数据相关 3.数据库权限:和一个具体数据库中所有数据表相关 4.用户权限:和MySQL所有的数据库相关 可以使用SHOW GRANTS命令查看当前用户的权限. SHOW GRANTS;/显示当前用户权限 SHOW GRANTS FOR 'pinns

MySql DCL数据控制语言(对用户权限的设置)

数据控制语言(DCL:Data Control Language)是用来设置或者更改数据库用户或角色权限的语句,这些语句包括 GRANT.DENY.REVOKE 等语句 1.限制root用户指定ip登录 查看root用户可以在哪台机器登录 select user,host from mysql.user where user='root'; 修改mysql库里边的user表 update mysql.user set host='localhost' where user='root'; 刷新权

Oracle数据控制语言(DCL)

数据控制语言 用来授予或者回收访问数据库中的各种对象,如表 .视图 .索引 等 基本的操作如下: --创建用户 CREATE USER jim IDENTIFIED BY changeit; --给用户赋登陆连接权限 GRANT CONNECT TO jim; --给用户赋资源权限 GRANT RESOURCE TO jim; --回收登陆权限 REVOKE CONNECT FROM jim; --回收资源操作权限 REVOKE RESOURCE FROM jim; --锁定用户 ALTER U

Visual Studio2017 数据库数据比较

一.前言 上一篇文章我们介绍了如何使用VS2017对SSMS数据库进行架构比较.这一篇文章我们将继续介绍如何对SSMS数据库的数据进行比较.数据的比较也是很常见的,比如我们要比较当前版本的数据库相对上一个版本在内容上有哪些改变.这个时候我们使用数据比较就可以很清楚看到异同,同样我们也可以对目标数据进行同步. 二.关于 从Visual Studio 2005版本开始,VS不仅开始支持“比较和同步数据库架构”,同时也开始支持“比较和同步数据库数据”. 三.开始演练 本次演练使用VS2017自带的SQ

C#在listview控件中显示数据库数据

一.了解listview控件的属性 view:设置为details columns:设置列 items:设置行 1.将listview的view设置为details 2.设置列属性 点击添加,添加一列 设置一列的Text属性,这就是列名 添加三列 3.编辑items属性,添加一行数据 编辑Text属性,添加一行的第一个数据 编辑subitems属性,添加一行中的其他数据 添加两个数据 填写结果 二.在listview中显示数据库数据 //在listview中显示数据库数据 private voi

Asp.net--GridView控件--(1)高亮显示当前所在行,(2)高亮显示单击行,(3)绑定数据库数据,(4)分页,(5)导出到excel表格,(6)首列插入序号

//本页代码中的DB类及方法在http://www.cnblogs.com/Deerjiadelu/p/7252769.html中能查询到 (1)Asp.net--GridView控件--高亮显示当前所在行 protected void gvquery_DataBound(object sender, GridViewRowEventArgs e) { //高亮显示光标所在行 if (e.Row.RowType == DataControlRowType.DataRow)//判断当前行是不是数据

使用pentaho工具将数据库数据导入导出为Excel

写在前面:本篇博客讲述的是如何使用pentaho工具快速的将数据库数据导出为Excel文件,以及如何将Excel文件数据导入数据库. 补充:使用此工具并不需要任何一句代码并能快速便捷解决实际问题,此工具功能不仅仅局限这一点,其他功能后续更新. 工具下载:你可以根据你电脑的系统选择不同版本在pentaho官网进行下载: http://www.pentaho.com/download 需求一:将mysql一张表数据导出到Excel 第一步:添加数据库驱动包 注意:由于本例我要将mysql数据库数据导

读取数据库数据,并将数据整合成3D饼图在jsp中显示

首先我将生成饼图的方法独立写成一个PieChar.java类,详细代码如下:(数据库需要自己建,如有需要的话) 1 import java.io.IOException; 2 import java.sql.SQLException; 3 import org.jfree.chart.ChartFactory; 4 import org.jfree.chart.JFreeChart; 5 import org.jfree.data.general.DefaultPieDataset; 6 7 p

Oracle 数据库 数据文件 表 表空间 用户的关系

这涉及到数据库的物理结构和逻辑结构. 首先,你需要明白的一点是:数据库的物理结构是由数据库的操作系统文件所决定,每一个Oracle数据库是由三种类型的文件组成:数据文件.日志文件和控制文件.数据库的文件为数据库信息提供真正的物理存储. 每一个Oracle数据库有一个或多个物理的数据文件(data file).一个数据库的数据文件包含全部数据库数据.逻辑数据库结构(如表.索引等)的数据物理地存储在数据库的数据文件中.数据文件通常为*.dbf格式,例如:userCIMS.dbf.数据文件有下列特征: