视图
这里有张表 emps
eno | ename | position | salary |
---|---|---|---|
A01 | 炸炸 | 老板 | 10000000 |
B01 | 晨晨 | 经理 | 5000000 |
C01 | 张三 | 员工 | 10000 |
C02 | 李四 | 员工 | 8000 |
视图可以在一张表的基础上创建多个不同权限的视图。
上面的表,如果是老板,可以看到全部的信息;
创建老板的视图
基本语法
create view 视图名称
as
select 语句;
创建三个视图
create VIEW boss
as
SELECT * from emps;
CREATE VIEW manager
as
SELECT * from emps WHERE NOT POSITION in ("老板");
CREATE VIEW farmer
as
SELECT * from emps WHERE POSITION = "员工";
可以看到创建的视图;
视图的作用
当表中的数据比较多,但是划分权限不方便,比如公司的组织架构所有信息都放在一张表中。
不同权限的人员看到的信息也不应该一样, 可以为不同权限的人创建不同的权限的视图;
删除视图
DROP VIEW farmer;
存储过程
思考问题:如何批量添加1万条数据?
创建用户表 users
Excel导入数据
打开 【表】—【导入向导】
选择 【Excel】类型
打开文件路径,选择对应的sheet
编写存储过程
-- 声明结束符号
delimiter //
-- 创建存储过程 insert1w 为存储过程名
CREATE PROCEDURE add1w()
BEGIN
DECLARE num int; -- 声明变量 num 为int 类型
set num =1; -- 设置num 设置开始值
WHILE num <=10000 DO -- 设置结束值
-- 执行语句
insert into students (sno, sname)
VALUES (CONCAT("A",num),concat("李四",num));
set num = num+1; -- 更改num的值,比原来增加1
END WHILE;
END
// -- 结束存储过程
-- 声明结束符号 改为原来的 ;
delimiter ;
调用存储过程
-- 调用存储过程
CALL add100w();
存储过程可以批量添加数据,但是执行的效率比较慢,比如插入1000条数据,使用6s左右的时间。
数据导入,导出
数据导入
test.sql
将文件下载到本地。
索引
思考问题:查询速度比较慢的时候怎么办?
使用子查询
select count(*) from (select
schedule_id, schedule_code ,resource_code, schedule_type, schedule.oper_id, schedule.oper_time,
start_date, end_date, start_time, end_time, img_id, video_id, display_time,
schedule_color, terrace_code, stb_types, district_codes, user_group_codes,
igroup_code, schedule_status, schedule_description, step_id, owner_id, aud.description, so.oper_name
from schedule_record as schedule
left join auditing_desc_record as aud
on schedule.schedule_code = aud.code
and aud.is_last_auditing = 1
left join system_oper as so
on owner_id = so.oper_id
where 1=1 and schedule_status = 7
order by schedule.schedule_code desc) myCount ;
查询时间 4s
添加索引
添加索引
ALTER TABLE auditing_desc_record ADD INDEX index_code (code);
ALTER TABLE schedule_record ADD INDEX index_schedule_code (schedule_code);
再次执行
select
count(schedule_code)
from schedule_record as schedule
left join auditing_desc_record as aud
on schedule.schedule_code = aud.code
and aud.is_last_auditing = 1
left join system_oper as so
on owner_id = so.oper_id
where 1=1 and schedule_status = 7
order by schedule.schedule_code desc;
执行时间可以看到
参考文档
面试问题
- 如何往数据库中批量添加100万条数据?
a, 使用 Excel工具生成 100万条数据, 使用navicat工具导入到数据库中。
b, 导入 sql文件 (前提是sql文件中已经存在有100wan的插入语句)。
c, 存储过程
单数存储过程插入数据的时间相对来说比较长,还是建议大家使用 导入的方式批量添加数据。
- 数据库优化有做过吗?
DBeaver工具简介
工具官网: https://dbeaver.io/
特点:社区版免费 开源;
下载地址: https://dbeaver.io/download/
创建新的连接
选择数据库 连接
选择 Mysql 数据库
输入连接信息
点击【完成】保存
第一次使用的时候需要下载 数据库的驱动
连接成功之后
数据库上—【右键】—【新建编辑器】
编写sql语句;