DCL(数据控制语言)和TCL(事务控制语言)

8 篇文章 0 订阅

1、DCL(数据控制语言)

DCL主要用来管理数据库用户以及用户涉及的权限
1.1 创建数据库中的新用户

语法:

-- create user '用户名'@'主机名' identified by '密码';
注意点: 如果我们希望任意主机都能访问mysq1,只需要在创建用户时将主机名设为%
-- 创建一个名为myuser的新用户
create user 'myuser'@'%' identified by 'myuser123';

注意点:新创建的用户只有登录mysq1的权限而没有操作数据库的权限

1.2 修改新用户的密码

语法:

-- alter user '用户名'@'主机名' identified with mysq1_native_password by '用户的新密码';
 alter user 'myuser'@'%' identified with mysql_native_password by 'myuser12';

1.3 删除用户

语法:
-- drop user '用户名'@'主机名'
drop user 'myuser'@'%';

1.4 权限控制

权限权限说明
all所有的权限
select查询数据权限
insert插入数据权限
update修改数据权限
delete删除数据权限
alter修改表权限
drop删除数据库和表
create创建数据库和表

注意点:

  1. 对用户进行赋权操作时可以一次赋多次权权限之间使用,进行分割
  2. 赋权时,可以使用通配符*代表所有的数据库和表名

1.4.1 查询用户的权限

语法:

-- show grants for '用户名'@'主机名';
show grants for 'root'@'localhost';
show grants for 'myuser'@'%';

查询结果为

GRANT ALL PRIVILEGES ON *.* To 'root '@ 'localhost' WITH GRANT OPTION
发现root用户对所有数据库中的所有表拥有所有权限

查询结果为

GRANT USAGE ON *.* To 'myuser'@'%'

发现新建的用户只有登录的权限
 

1.4.2 给新用户进行赋权操作

语法:
-- grant 权限列表 on 数据库名,表名  to'用户名'@'主机名';
-- 给myuser用户授予bookmanager数据库中所有表的所有权限
grant all on bookmanager.*  to 'myuser'@'%';
-- 给myuser用户授予test数据库中的student_info表的查询数据权限
grant select on test.emp to 'myuser'@'%';

1.4.3 撤销用户的权限

语法:

-- revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
-- 撤销给myuser用户授子bookmanager数据库中所有表的所有权限
revoke all on bookmanager.* from 'myuser'@'%';

2、TCL(事务控制语言)

事务的概念

事务是数据库管理系统中执行过程中的一个逻辑(执行)单元,这个逻辑单元要么全部执行完成,要么全部都不执行,逻辑单元内的语句相互依赖。

事务中存在两个关键点

  1. 事务是数据库中的最小执行单元,不可以再进行细分。
  2. 事务中包含一个或者多个DML语句,比如insert,delete,update等操作,或者是单条DDL语句和DQL语句也会存在事务。

以转账的示例描述事务

比如A给B进行转账,金额为X,在数据库中可以如下体现:

在账户表中
A的记录变化为
步骤一: A转账后的余额=A转账前的余额-转账金额X

B的记录变化为
步骤二:B转账后的余额=B转账前的余额+转账金额X

以上的过程中,如果再步骤一执行完成后突然发生错误,导致步骤二还没有执行,那么就造成A转账的钱没有到达B的账户,钱在转账过程中出现丢失。那么对于这种转账操作就需要引入事务,在步骤一执行完成后,如果发生错误导致步骤二没有执行,整个转账过程就会回滚,即A的余额会恢复到执行步骤一前的金额,避免余额的损失。

事务的特点(ACID)

  1. 事务的原子性
    原子性是指事务是不可分割的执行单元,事务中的操作要么全部执行,要么都不发生。

  2. 事务的一致性
    事务必须是数据库从一个一致性状态变化为另一个一致性状态
    A向B转账,转账前A和B的余额总和为N,那么转账完成后,A和B余额和依然为N

  3. 事务的隔离性
    事务的隔离性是指一个事务的执行不能被其他的事务所干扰,即一个事务中的操作以及对所使用的数据对并发的其他事务是隔离的,并发的各事务键不能互相干扰。

  4. 事务的持久性
    事务的持久性是指一个事务一旦被提交(整个事务执行成功),那么事务中对数据的改变就是永久性的,接下来的其他操作或者故障都不应对修改的数据产生影响。

事务的分类
事务是分为隐式事务和显式事务

隐式事务: 是指事务没有明显的开启和结束的标志,在之前的 insert, update,delete操作,这些语句执行完成后会自动提交。

显式事务: 显式事务具有明显的开启事务和结束事务的标志。开启事务时需要将自动提交功能禁用(setautocommit = 0;)。需要注意的是禁用自动提交仅在本次事务中有效,在下次创建事务时,需要重新禁用自动提交。

事务的创建
步骤一:开启事务

-- 开启事务前需要禁用自动提交
set autocommit = 0;
-- 开启事务(可选语句)
start transaction;

步骤二:编写事务中的sql语句 (insert,update,delete)

步骤三:结束事务

-- 事务执行成功进行提交
commit;
-- 事务执行失败,进行事务的回滚
rollback;
-- commit和ro11back语句只能二选一 不能都写在一个事务中

事务的举例

  1. 创建账户表
create table account(
user_name varchar(50) not null,
balance int not null
);
  1. 初始化数掘
insert into account values
('小黑',1000),
('小白',1500);
  1. 使用事务进行转账操作
-- 开启事务
set autocommit = 0;
start transaction;
-- 转账语句
update account set balance=500 where user_name='小黑';
update account set balance=2000 where user_name='小白';

-- 预取事务执行成功  进行提交
commit;
  1. 再演示回滚操作
-- 开启事务
set autocommit = 0;
start transaction;
-- 小白转账500给小黑
update account set balance=1000 where user_name='小黑';
update account set balance=1500 where user_name='小白';

-- 进行查询
select * from account;

-- 撤销转账操作,进行事务回滚
rollback;

-- 再进行查询
select * from account;

3. 其他常用sql语句

如:DDL(数据定义语言)、DML(数据操纵语言)、DQL(数据查询语言)
链接地址:
https://blog.csdn.net/m0_48170265/article/details/129687721

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值