视图

这里有张表 emps

eno ename position salary
A01 炸炸 老板 10000000
B01 晨晨 经理 5000000
C01 张三 员工 10000
C02 李四 员工 8000

视图可以在一张表的基础上创建多个不同权限的视图。
上面的表,如果是老板,可以看到全部的信息;
创建老板的视图

基本语法

  1. create view 视图名称
  2. as
  3. select 语句;

创建三个视图

  1. create VIEW boss
  2. as
  3. SELECT * from emps;
  4. CREATE VIEW manager
  5. as
  6. SELECT * from emps WHERE NOT POSITION in ("老板");
  7. CREATE VIEW farmer
  8. as
  9. SELECT * from emps WHERE POSITION = "员工";

可以看到创建的视图;
image.pngimage.pngimage.png

视图的作用

当表中的数据比较多,但是划分权限不方便,比如公司的组织架构所有信息都放在一张表中。
不同权限的人员看到的信息也不应该一样, 可以为不同权限的人创建不同的权限的视图;

删除视图

  1. DROP VIEW farmer;

存储过程

思考问题:如何批量添加1万条数据?

创建用户表 users

Excel导入数据

test.xlsx

打开 【表】—【导入向导】
image.png
选择 【Excel】类型
image.png
打开文件路径,选择对应的sheet
image.png
image.png
image.pngimage.pngimage.png

编写存储过程

  1. -- 声明结束符号
  2. delimiter //
  3. -- 创建存储过程 insert1w 为存储过程名
  4. CREATE PROCEDURE add1w()
  5. BEGIN
  6. DECLARE num int; -- 声明变量 num int 类型
  7. set num =1; -- 设置num 设置开始值
  8. WHILE num <=10000 DO -- 设置结束值
  9. -- 执行语句
  10. insert into students (sno, sname)
  11. VALUES (CONCAT("A",num),concat("李四",num));
  12. set num = num+1; -- 更改num的值,比原来增加1
  13. END WHILE;
  14. END
  15. // -- 结束存储过程
  16. -- 声明结束符号 改为原来的 ;
  17. delimiter ;

调用存储过程

  1. -- 调用存储过程
  2. CALL add100w();

存储过程可以批量添加数据,但是执行的效率比较慢,比如插入1000条数据,使用6s左右的时间。

数据导入,导出

数据导入

test.sql
将文件下载到本地。

数据库上—右键—【运行Sql文件】
image.png
image.png
image.png

索引

思考问题:查询速度比较慢的时候怎么办?

使用子查询

  1. select count(*) from (select
  2. schedule_id, schedule_code ,resource_code, schedule_type, schedule.oper_id, schedule.oper_time,
  3. start_date, end_date, start_time, end_time, img_id, video_id, display_time,
  4. schedule_color, terrace_code, stb_types, district_codes, user_group_codes,
  5. igroup_code, schedule_status, schedule_description, step_id, owner_id, aud.description, so.oper_name
  6. from schedule_record as schedule
  7. left join auditing_desc_record as aud
  8. on schedule.schedule_code = aud.code
  9. and aud.is_last_auditing = 1
  10. left join system_oper as so
  11. on owner_id = so.oper_id
  12. where 1=1 and schedule_status = 7
  13. order by schedule.schedule_code desc) myCount ;

image.png
查询时间 4s

添加索引
image.png
image.png

添加索引

  1. ALTER TABLE auditing_desc_record ADD INDEX index_code (code);
  2. ALTER TABLE schedule_record ADD INDEX index_schedule_code (schedule_code);

再次执行

  1. select
  2. count(schedule_code)
  3. from schedule_record as schedule
  4. left join auditing_desc_record as aud
  5. on schedule.schedule_code = aud.code
  6. and aud.is_last_auditing = 1
  7. left join system_oper as so
  8. on owner_id = so.oper_id
  9. where 1=1 and schedule_status = 7
  10. order by schedule.schedule_code desc;

执行时间可以看到
image.png

参考文档


面试问题

  1. 如何往数据库中批量添加100万条数据?

a, 使用 Excel工具生成 100万条数据, 使用navicat工具导入到数据库中。
b, 导入 sql文件 (前提是sql文件中已经存在有100wan的插入语句)。
c, 存储过程
单数存储过程插入数据的时间相对来说比较长,还是建议大家使用 导入的方式批量添加数据。

  1. 数据库优化有做过吗?

DBeaver工具简介

工具官网: https://dbeaver.io/
特点:社区版免费 开源;
下载地址: https://dbeaver.io/download/
image.png

创建新的连接

image.png
选择数据库 连接
image.png
选择 Mysql 数据库
image.png
输入连接信息
image.png
点击【完成】保存

第一次使用的时候需要下载 数据库的驱动
image.png

连接成功之后
数据库上—【右键】—【新建编辑器】
image.png
编写sql语句;