7.4 模糊查询
使用场景
根据区域查询信息、根据日期范围、根据姓查询、查询包含了某个字的数据等等
关键字符
a.% 任意字符(任意个数及任意字符)
# 查询以张字开头的员工 select * from emp where ename like '张%';
# 查询以13开头的手机号
select * from emp where phone like '13%';
# 查询以9结尾的手机号
select * from emp where phone like '%9';
#查询包含有45的手机号
select * from emp where phone like '%4%5%';
b._ 单个的下划线代表一个任意的字符
# 找'李'的后面只有一个字符的姓名 select * from emp where ename like '李_';
8.常用函数
MySQL的底层使用的是SQL语言,该语言本身也类似于Java等开发语言,其中提供了相关的函数、子程序等等方式,以方便开发使用。
数据库的主要作用是用于存储数据的,而非做业务处理的,在数据库中处理业务是需要消耗性能的,因此,不建议在数据库中使用过多的函数,建议在开发语言中处理。
concat(arg0,arg1,…) 拼接
select concat('开','封','菜');
# 使用mybatis框架进行模糊查询时的使用方案(假设变量名为name) select * from emp where ename like concat('%',name,'%');
now() 获取当前的系统时间
unix_timestamp() 获取当前时间的时间戳
date_format() 格式化日期
select date_format(now(),'%Y年%m月%d号 %H:%i:%s');
from_unixtime() 格式化时间戳
select from_unixtime(unix_timestamp(),'%Y年%m月%d号 %H:%i:%s');
常用函数与聚合函数的区别
答:聚合函数是直接操作数据的,函数是操作获取的数据的
9.数据备份
每家公司通常都会有自己的服务器,存储公司相关的一些信息数据,在使用的过程中可能会出现需要进行数据迁移(搬家),为了防止数据丢失,可以进行数据备份
9.1 数据导出
导出数据需要先退出MySQL的环境
语法:mysqldump -u root -p 数据库名 [表名] > 导出的地址
# 导出整个数据库(所有表-表结构及数据)
mysqldump -u root -p tongbaishan > e:/tongbaishan.sql
# 导出指定表
mysqldump -u root -p tongbaishan emp > e:/emp.sql
# 只导出表结构
mysqldump -u root -p -d tongbaishan > e:/tongbaishan2.sql
9.2 数据导入
在数据中运行指定的SQL文件
注意:导入数据库前提是要先选择一个数据库
source e:/tongbaishan.sql
10.视图
视图就是一张虚拟的表(和表的使用方式【增删改查】类似)
使用场景
甲方公司简称A公司,乙方公司简称B公司,A公司将项目外包给了B公司,要求B公司派遣人员到A公司的办公地点进行办公(驻场办公),A公司的工作人员都需要有门禁权限,所以A公司需要给B公司的工作人员开权限(需要B公司将对应的开发人员的信息给到A公司),同时如果开发团队人员发生了改变,B公司需要及时将改变的情况和人员信息发给A公司
上述场景中需要考虑的问题
思考:B公司如何将人员的信息给到A公司
思考:给的信息中如何对保密的信息进行屏蔽处理(B公司的人员表中有很多员工,信息中包含公司的敏感信息)
思考:如果人员信息发生了改变,如何能够更方便快捷的将变更后的信息发送给甲方
思考:B公司承接了很多公司的外包项目,B公司就需要对应多家公司,上述的几个问题都需要进行再次考虑
语法:create view 视图名 as 查询语句; (达到屏蔽字段的操作)
create view v_a_emp
as
select ename,sex,phone from emp;
在视图关系下,emp会和v_a_emp信息同步:
这样双向都可以修改信息,就会导致数据混乱,没有安全性
设置工资表:
列出员工信息对应的薪资信息:
# 需求 查看部门的薪资总和
select dno,sum(salary) from emp e join salarys s on e.eno=s.eno group by dno;
# 需求 计算部门的薪资总和
create view v_sal
as
select dno,sum(salary) total from emp e join salarys s on e.eno=s.eno group by dno;
注意点:在创建视图时,如果结果中的字段有使用函数或聚合函数,需要给一个别名作为视图中的字段名
# 尝试去修改视图中的薪资总和数据
update v_sal set total=19500 where dno=10;
#ERROR 1288 (HY000): The target table v_sal of the UPDATE is not updatable
#v_sal表中不支持update操作
当视图中的数据修改后无法推断出原表中的数据应该如何改变时,该操作就不能执行
思考:通过哪些关键词或函数等创建出来的视图中的数据是不能进行修改操作的
答:聚合函数、分组等等
通常情况下,B公司在给出对应的视图后,需要提供一个账号给甲方公司,该账号是可以设置权限的(通常只给查询的权限)
总结:视图提高了数据的安全性,用户只能看到提供的数据,同时可以设置权限