MySQL索引
什么是索引
在数据库中,对字段建立索引可以大大提高查询速度。通过善用这些索引,可以令MySQL的查询和运行更加高效
常见的索引的分类
- 主键索引 (primary key)主键是一个唯一性的索引,每个表中只能有一个主键
- 唯一索引 (unique)索引列的所有数据只能出现一次,必须是唯一
- 普通索引(index) 最常见的索引,作用是提高对数据的访问速度
表对应的索引被保存在一个索引文件中,如果对数据进行增删改查操作,那么mysql就需要对索引进行更新
保存位置一般在C:\ProgramData\mysql\Mysql 5.7\Data
主键索引
- 创建表的时候直接添加主键
语法格式:
create table 表名(
--添加主键(主键是唯一性索引,不能为null,不能重复)
字段名 类型 primary key,
);
- 修改表结构 添加主键索引
语法格式:
alter table 表名 add primary key(列名);
唯一索引
- 特点:索引列的所有制都只能出现一次,必须唯一
- 唯一索引可以保证数据记录的唯一性。事实上,在很多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而知识为了避免面数据出现重复
- 创建表的时候添加唯一索引
语法格式:
create table 表名(
列名 类型(长度),
--添加唯一索引
unique [索引名称] (列名)
);
- 使用create语句创建:在已有的表上创建索引
create unique index 索引名 on 表名(列名[长度]);
- 修改表结构时添加索引
alter table 表名 add unique(列名);
普通索引
- 普通索引(由关键字KEY或者Index定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为了那些最经常出现的查询条件(where column=)或排序条件(Order By column)中的数据列创建索引
- 使用create index语句创建:在已有的表上创建
create index 索引名 on 表名(列名[长度]);
- 修改表结构时添加索引
alter table 表名 add index 索引名(列名);
删除索引
- 语法格式:alter table 表名 drop index 索引名;
索引的总结
创建索引的原则
优先选择为经常出现在查询条件或排序、分组后面的字段 创建索引
索引的优点
- 可以大大提高查询速度
- 减少查询中分组和排序的时间
- 通过创建唯一索引保证数据的唯一性
索引的缺点
- 创建和维护索引需要时间,数据量越大,时间越长
- 表中的数据进行增删改查操作时,索引也需要进行维护,降低了维护的速度
- 索引文件需要占据磁盘空间
视图
什么是视图
- 视图是一种虚拟表
- 视图建立在已有表的基础上,视图赖以建立这些表称为基表
- 向视图提供数据内容的语句为select语句,可以将视图理解为存储起来的Select语句
- 视图向用户提供基表数据的另一种表现形式
视图的作用
- 权限控制时可以使用
比如,某几列可以运行用户查询,其他列不允许,可以开通视图,查询特定的列,起到权限控制的作用
- 简化复杂的多表查询
视图本身就是一条查询SQL,我们可以将一次复杂的查询构建成一张视图,用户只要查询视图就可以获取想要得到的信息(不需要在编写复杂的SQL)
视图主要是为了简化多表查询
视图的使用
创建视图
- 语法格式:
create view 视图名[字段列表] as select 查询语句;
view 表示视图
字段列表 一般跟后面的查询语句相同
as select 查询语句 表示给视图提供数据的查询语句
视图与表的区别
- 视图是建立在表的基础之上
- 通过视图,不要进行增删改查操作,视图主要就是用来简化查询
- 删除视图,表不受印象,删除表,视图就不在起作用了。
MySQL存储过程
什么是存储过程
- mysql5.0版本开始支持存储过程
- 存储过程(stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行
简单理解:存储过程其实就是一堆SQL语句的合并。中间加入了一些逻辑控制。
存储过程的优缺点
优点
- 存储过程一旦调试完成后,就可以稳定运行(前提是业务需求要相对稳定,没有变化)
- 存储过程减少业务与数据库的交互,降低耦合,数据库交互更加快捷(应用服务器,与数据库服务器不在同一个地区)
缺点
- 在互联网行业中,大量使用mysql,MySQL的存储过程与Oracle的相比较弱,所以较少使用,并且互联网行业需求变化较快也是原因之一
- 尽量在简单的逻辑中使用,存储过程移植十分困难,数据库集群环境,保证各个库之间存储过程变更移植也十分困难
- 阿里的代码规范里也提出了禁止用存储过程,存储过程维护起来的确麻烦。
创建存储过程
方式一
语法格式:
delimiter $$ --声明语句的结束符号 自定义
create procedure 存储过程名称() ---声明存储过程
begin -- 开始编写存储过程
---要执行的SQL
end $$ --存储过程结束
方式二
创建一个接收参数的存储过程
语法格式:
create procedure 存储过程名(In 参数名 参数类型)
方式三
获取存储过程的返回值
1.变量的赋值
set @变量名 = 值
2.out 输出参数
out 变量名 数据类型
MySQL触发器
什么是触发器
触发器(trigger)是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序嗲用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作***(insert,delete,update)时就会激活它执行,
简单理解:当我们指定一条sql语句的时候,这条sql语句的执行会自动去触发执行其他的sql语句***
触发器创建的四个要素
- 监视地点(table)
- 监视事件(insert/update/delete)
- 触发时间(before/after)
- 触发时间(Insert/update/delete)
创建触发器
- 语法格式
delimiter $ ---自定义结束符号
create trigger 触发器名
after/before (insert/update/delete)---触发的时机和监视的事件
on tableName ---触发器所在表
for each row --固定写法 表示行触发器
begin
---被触发的事件
end $
DCL(数据控制语言)
mysql默认使用的都是root用户,超级管理员,拥有全部的权限,除了root用户之外,我们还可以通过DCL语言来定义一些权限较小的用户,分配不同的权限来管理和维护数据库
创建用户
语法格式:
create user '用户名' @ '主机名' identified by '密码'
参数 | 说明 |
用户名 | 创建新用户,登录名称 |
主机名 | 指定该用户在哪个主机上可以登录,本地用户可用localhost 如果想让该用户可以从任意远程主机登录,可以使用通配符% |
密码 | 登录密码 |
用户授权
语法格式
grant 权限1,权限2 ... on 数据库名.表 to '用户名' @ '主机名'
查看用户权限
语法格式
show grants for '用户名' @ '主机名'
数据库备份 & 还原
备份的应用场景在服务器进行数据传输、数据存储和数据交换,就有可能产生数据故障。比如发生意外停机或存储介质损坏。这是,如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失,造成的损失是无法弥补与估量的
SQLYoga数据备份
- 选中要备份的数据库,右键备份导出 —>选择备份数据库
- 指定文件位置,选择导出即可
命令行方式
语法格式:
备份:
mysqldump -u用户名 -p密码 数据库名 > 文件路径
还原:
source sql文件地址