使用语言 MySQL
使用工具 Navicat Premium 16
代码能力快速提升小方法,看完代码自己敲一遍,十分有用
- 拖动表名到查询文件中就可以直接把名字拉进来
- 中括号,就代表可写可不写
目录
1. 视图
1.1 需要视图的原因
在数据库系统中,数据的安全非常重要。数据的定义由两种含义:一种物理是上的数据安全,即保证数据不丢失;另一种是数据的权限控制,数据库的使用者权限不同,能够看到的数据页不同。这种需求不仅保证合适的人可以看到合适的数据,还符合用户的日常业务逻辑,使他们更容易理解数据。在数据库系统中可以通过视图实现这样的功能。视图就是保存在数据库中的select查询。在实际的数据库系统中,对查询执行的大多数操作可以在视图上进行。
在实际工作中,不同身份的用户所能查询的数据范围可能有所不同。例如,企业的员工信息表中保存了该企业所有员工的详细信息,不同职位的人员对该表中查询的数据范围可能不同。根据企业的人力资源管理制度要求,企业的老板关注企业员工的全部信息,他可以浏览全体员工的全部记录;企业的人力资源主管主要查询全体员工目前的岗位、薪金和绩效;企业的出纳员只能查询每个员工的薪金,不能也无权查询企业员工的其他信息;企业的员工只能查看本人记录,不得查看其他员工的任何信息。
另外,在编写SQL代码时有时会使用子查询和多表查询复杂语句,如果这段SQL代码是一个经常使用的功能,那么每次都需要重复编写这样一大串代码,无疑会增加工作量和影响工作效率。现在,可以借助视图对复杂的代码进行封装保存。名称统计此数据时,只需调用并执行对应的视图就可以轻松地完成任务。
1.2 视图介绍
1.2.1 视图的概念
视图可以看做一张数据库中的虚拟表,也就是说,在物理上,视图不是真实存在的。视图通常是由一张或多张表的行或列的子集组成的,当然也可以包含全部的行和列。视图并不是数据库中存储的数据值的集合,它的行和列来自查询中引用的表。也就是说,视图中的数据直接显示来自被查询表中的数据。
视图充当表数据筛选器的角色。定义视图的查询可以基于一张或多张表,也可以基于其他视图,当前数据库或其他数据可靠。它的本质就是一张物理上不存在的数据表。
视图通常用来进行以下3种操作
- 筛选表中的行
- 防止未经许可的用户范围敏感数据
- 将多张物理数据表抽象为一张逻辑数据表(多表联查后然后存在视图中)
1.2.2 使用视图给开发人员带来的好处
- 限制数据检索更容易。开发人员有时需要隐藏某些行或列中的信息。通过使用视图,用户可以灵活地访问他们需要的数据,同时保证同一张表或其他表中的数据安全性。要实现这一目标,可以在创建视图时将对用户保密的列排除在外。
- 维护应用程序更方便。调试视图比调试查询容易,跟踪视图中各步骤的错误更容易,这时因为所有的步骤都是视图的组成部分。
1.2.3 使用视图给数据库的最终用户带来的好处
- 结果更容易理解。创建视图时,可以将列名改为有意义的名称,使用户更容易理解所代表的内容。在视图中修改列名不会影响基表的列名。
- 获得数据更容易。很多人对SQL不太理解,因此,对他们来说创建对多张表的复杂查询很困难,可以通过创建视图访问多张表中的数据。
1.3 在MySQL中使用视图
1.3.1 创建视图
创建视图的语法格式如下:
- create view 视图名 as <select语句>;
一般来说,为了方便查看,视图一般以view_xxx或v_xxx的格式来命名
1.3.2 查询视图中的数据
查询视图中的数据与查询数据表中的数据的方法一样,所以就不再说太多,主要看后面的示例理解。
1.3.3 创建查询视图示例
运行结果
1.3.4 删除视图
与数据表一样,若将要创建的视图在数据库中已存在,则只有先删除视图才能创建成功。删除视图的语法格式如下。
- drop view [if exists] 视图名;
1.3.5 使用视图的注意事项
- 每个试图中可以使用多张表
- 与查询相似,一个视图可以嵌套另一个视图,但尽量不超过3层(就是查询x个视图存到另一个视图中)
- 对视图数据进行添加、更新和删除操作实际上是直接操作引用表中的数据。
所以一般使用视图时不要进行增删改操作
- 当试图数据来自多张表时,不允许添加和删除数据
2. 数据库备份和恢复
数据在企业中的价值至关重要,数据保障了企业业务的正常运行。因此,数据的安全性及可靠性是运维的重中之重,然后数据的丢失都可能对企业产生严重的影响。通常情况下,数据丢失的原因由如下几种。
- 程序错误
- 人为操作错误
- 运算错误
- 磁盘故障
- 灾难(如火灾、地震)和盗窃
- 病毒入侵
2.1 数据库备份
为了保障数据安全,应经常性地对数据库中的数据进行备份。数据库备份的方法有多种
2.1.1 使用mysqldump备份数据库
mysqldump是客户端常用的逻辑备份命令,它能够产生一组被执行以后再现原始数据库对象定义和表数据的SQL语句。通过mysqldump命令可以将指定的数据库和数表导出为SQL脚本,在通过导出的SQL脚本就可以方便地将其转移到其他设备上。恢复数据时只需执行SQL语句就可以将数据导入目标数据库中。
使用mysqldump备份数据库是在命令行中实现的。命令如下:
- mysqldump [options] database [table1,table2,...] > [path]/filename.sql
options: 连接数据库的参数,主要内容如下
- -u username: 用户名
- -h host: 登录用户的主机名称,若本机为主机,则此项省略
- -p password: 登录密码
本机的一般写法如下:
- -u root -p
database: 需要备份的数据库
table: 需要备份的数据表,可指定多张表。可选项,若备份真个数据库,则此项省略
filename: 备份文件的名称
2.1.2 mysqldump示例
需求:使用mysqldump备份hospital数据库
代码如上,如果没有输出任何东西就代表成功了,然后就可以去对应的位置找文件了,注意最后不要加分号;
注意:mysqldump是dos系统下的命令,使用时无需进入mysql命令行;否则,将无法执行
2.1.3 mysqldump备份文件中的两种注释信息
- 以"--"开头就是关于SQL语句的注释信息
- 以"/*!"开头、"*/"结尾:关于mysql服务器相关的注释。这些语句可以被mysql执行,但其他数据库管理系统将被作为注释忽略,这可以提高数据库的可移植性。
从备份文件中可以获取以下信息:
- 备份文件使用的mysqldump工具的版本号
- 备份账户的名称和主机信息及备份的数据库名称
- 使用set语句将当前系统变量的值赋给用户定义的变量
导出的脚本文件在注释后的语句就是数据表的创建语句(create table)和数据导入语句(insert into);
2.1.4 使用Navicat备份数据库
Navicat也可以用于导出数据的备份脚本。方法如下:
选中的选项就是备份的点击,点击后就可以选择保存路径,数据库也可以右击选择此选项;
- 注:备份后的名字要数据库名_日期才是规范的
2.2 数据库恢复
数据库恢复的方法也有很多种,可以选择任意一种方法实现数据导入操作。
2.2.1 使用mysql命令导入数据
使用mysqldump或Navicat导出的SQL备份脚本,在需要恢复时可以通过MySQL命令对齐进行导入操作。命令格式如下:
- mysql -u username -p dbname < filename.sql
username: 登录数据库系统的用户名
dbname: 导入目标数据库的数据库名
filename.sql: 数据库备份后的文件路径
导出的备份文件中只包含表的备份,而不包含创建数据表的语句,因此,执行导入操作时必须指定库名,且目标库必须存在。
2.2.2 使用mysql命令当选中不存在的目标数据库时
以上的异常就是说以上的test111数据库无法找到,如果目标数据库存在的话输出结果如下(按下上箭头可以找到前面的dos命令并填充):
2.2.3 使用source命令恢复数据
除了在命令行中导入数据,还可以在已连接数据库的状态下导入数据,就是在dos命令中登录mysql后导入数据,语法格式如下:
- source filename;
2.2.4 使用source命令恢复数据示例
示例如上,注意,在执行source命令时,SQL脚本文件后面不要加";"
2.2.5 使用Navicat的数据导入功能导入数据
除了使用命令行导入数据,还可以在Navicat中直接导入数据。右击要导入数据的数据库,在弹出的快捷菜单中执行"运行SQL文件.."命令,打开导入窗口,选择要运行的SQL文件,单击"开始"按钮,开始导入数据。
2.2.6 使用Navicat导入数据示例
在文件的栏上选择路径即可;