数据库学习笔记(7)——DCL\数据库的备份与恢复\事务\视图\索引
创始人
2025-06-01 20:41:36

1、DCL:

  • 在真实项目环境中是一个项目对应一个数据库,编写项目的开发人员只有操作这个数据库的权限,一般会为每个项目创建一个用户,给这个用户分配出来相关数据库的权限。【这些操作是在root权限下完成的】
    在这里插入图片描述
  • 练习:
    1、新建一个用户(同时也要新建连接)
    在这里插入图片描述
    2、给这个用户分配一个数据库处理权限(注意如果在创建用户之后分配权限,有的权限需要用户断开连接重新连接才会产生效果)
    3、让该用户查看对应数据库
    4、删除该用户(删除连接)
    在这里插入图片描述
    在这里插入图片描述

2、数据库的备份与恢复:

  • 具体流程如下:在这里插入图片描述
  • 注意上述流程备份数据的时候要保证数据库还存在,而恢复数据的前提是数据库已被删除,且在workbench中新建了一个数据库。

3、事务:

  • 执行的SQL语句就是所谓的事务,目前来说一条SQL语句就是一个事务
  • 整体形成一个任务,不可再分割的操作称为事务,有些场景的实现需要多条sql语句协助才能完成一个任务,这种场景就需要我们自己定义事务。
  • 举个例子:在银行转账过程中,收款方与打款方的例子就是最好的关于事务的说明,在银行转账系统中需要打款人的扣钱操作与收款人的收钱操作同时达成且数额对等才能让这两条命令生效,这里就需要用到事务,因为事务具有以下特性:
    在这里插入图片描述
  • 事务的语句结构
    在这里插入图片描述
  • 练习:用事务的方法模拟一个银行转账操作
-- 首先在db_exercise1下新建一个账户表
use db_exercise1;
create table if not exists tb_account(
cid int primary key auto_increment comment '账户编号',
cname varchar(255) comment '账户名称',
balance decimal(10,2) comment '账户余额'
);
-- 插入两个用户
insert into tb_account(cname,balance) values
('甲人',10000),
('乙人',0);
-- 检查表中内容
select * from tb_account;-- 执行更新数据时报错: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.  To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.
-- 解决方案:SET SQL_SAFE_UPDATES = 0;-- 第一个事务:通过事务完成转账操作
begin;
update tb_account set balance=balance-3000 where cname='甲人';
update tb_account set balance=balance+3000 where cname='乙人';
commit;-- 第二个事务:转账过程中如果不一致(违反一致性,就要回滚数据)
begin;
update tb_account set balance=balance-1000 where cname='甲人';
update tb_account set balance=balance+1500 where cname='乙人';
rollback;

在这里插入图片描述
在这里插入图片描述

  • 注意:在事务中整体运行begin及之后语句,但不运行结束事务语句,在终端中结果查询是不会更新表格的。只有运行begin语句和之后语句以及结束事务语句commit之后,最终结果才会在终端查询时呈现。

4、视图:

  • 1、把 select 查询结果做一个快照,形成临时表
-- 语句
create view v_视图名 as select 语句;

注意:这个功能就是把select语句的结果用一个名字定义,下次使用这个结果可以直接通过这个名字。视图中的数据可以修改,但是前提是这个数据必须是来自原表的数据(修改了原表数据,原表也会发生改变),如果是通过聚合函数之类的函数统计得到的数据,视图是无法修改的,会报错。

  • 2、控制访问列的权限:例如公司中的员工表可以给普通员工看,但是普通员工只能看到姓名之类的,不能看到别人的工资。这就是通过将含有工资的原表通过select语句生成一个视图,但是不显示工资之类的敏感信息。然后再通过数据库DCL中的权限控制语句把该视图的权限给到普通员工,这样就能满足上述要求了。

5、索引:

  • 1、接触到索引的有“主键索引”和“唯一索引”,分析字段需求的时候设定相关约束,使用索引键查询效率快的原因是索引就相当于书籍的目录。
  • 2、索引底层结构是B+树,数据遍历通过二分法查找。
  • 3、要看到sql的执行计划,看到sql语句执行效率可以通过下面的sql语句:
explain sql语句;

注意:想要提高查询效率,尽量通过“索引键”查询。

  • 4、索引键相关sql语句如下:

在这里插入图片描述

  • 5、前缀查询
create index idx_索引名 on 表名(字段名(元素下标)); -- 下标从1开始

举例:
在这里插入图片描述

  • 6、复合查询
create index idx_索引名1_索引名2.. on 表名(字段名1,字段名2,..); -- 下标从1开始

举例:
在这里插入图片描述

  • 练习:用两种方法查询,然后通过explain看看两种方法的不同之处
    在这里插入图片描述

相关内容

热门资讯

雷军:小米SU7第十万台汽车下... 11月13日消息,小米集团董事长雷军在微博表示,小米SU7第十万台汽车下线,用了230天。
美联储理事沃勒:仍然认为没有必... 11月13日消息,美联储理事沃勒表示,并不知道数字货币能解决什么问题,仍然认为没有必要推出美国数字货...
全球最大上市对冲基金英仕曼集团... 11月13日消息,据报道,英仕曼集团(Man Group)正计划进行一轮裁员,这家全球最大上市对冲基...
日本就火箭发射失败道歉 日本宇宙航空研究开发机构正式宣布,今天(12月22日)上午日本新一代主力运载火箭“H3”火箭的8号机...
对冲基金North of So... 11月13日消息,对North of South Capital LLP的13F申报分析显示,这家对...