事务
事务介绍(DML语句)
事务边界
commit: 不提交就不会修改原数
rollback: 回滚
事务的特性
原子性:整体全部成功才能成功,
一致性:遇到错误后,所有数据回滚到修改前的状态
隔离性:将中间事物隔离,不允许其他操作
持久性:事务完成后,对系统的影响是永久的
事务语法
-- 开启事务
begin
/start transaction
sql语句;sql可以有多条;
/*
如果多条语中有错误,需要回滚
如果没有错误语句,需要提交
*/
sql语句;sql可以有多条;
rollback;回滚
commit;事务
注意;
在开启事务后,在提交或回滚之前,都属于事务的语句;
事务提交隔离级别
读未提交
读已提交
可重复读(默认级别)
串
注意;
再开发中不会修改隔离级别,
1,读未提交:会出现脏数据,(会导致脏读);
2,读已提交:读提交后的数据(会导致虚读)
3,可重复读:重复读第一次读到的数据(会导致幻读)
4,串行,一个事务发生时,别的事务不能进行,
权限管理
创建用户
create user 'jlf' identified by '123456';
授权
grant all on mybank.* to 'jlf';
撤销权限
revoke all on mybank.* from 'jlf';
删除用户
drop user 'jlf';
select user from
视图
概念
视图,就是由数据库中一张表或者多张表根据特定的条件查询出得数据构造成得虚拟表
视图的作用
安全性:如果我们直接将数据表授权给用户操作,那么用户可以CRUD数据表中所有数据,加入我们想要对数据表中的部分数据进行保护,可以将公开的数据生成视图,授权用户访问视图;用户通过查询视图可以获取数据表中公开的数据,从而达到将数据表中的部分数据对用户隐藏。
简单性:如果我们需要查询的数据来源于多张数据表,可以使用多表连接查询来实现;我们通过视图将这些连表查询的结果对用户开放,用户则可以直接通过查询视图获取多表数据,操作更便捷。
数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
创建视图
语法:
create view 视图名称 as <select语句>
如:
create view view_test01
as
select * from students;
查询视图结构
语法:
desc 视图名称;
如:
desc view_test01;
修改视图
语法;
create or replace view 视图
as 查询语句;
或
alter view 视图名称
as 查询语句;
-- 方式1
create OR REPLACE view view_test01
AS
select * from students where stu_gender='女';
-- 方式2
alter view view_test01
AS
select * from students where stu_gender='男';
视图特性
查询操作:
如果在数据表中添加了新的数据,而且这个数据满足创建视图时查询语句的条件,通过查询视图也可以查询出新增的数据;当删除原表中满足查询条件的数据时,也会从视图中删除。
新增数据:
如果在视图中添加数据,数据会被添加到原数据表
删除数据:
如果从视图删除数据,数据也将从原表中删除
修改操作:
如果通过修改数据,则也将修改原数据表中的数据
视图的使用建议: 对复杂查询简化操作,并且不会对数据进行修改的情况下可以使用视图。
索引
概念
分类
MySQL中的索引,根据创建索引的列的不同,可以分为:
主键索引:在数据表的主键字段创建的索引,这个字段必须被primary key修饰,每张 表只能有一个主键
唯一索引:在数据表中的唯一列创建的索引(unique),此列的所有值只能出现一次, 可以为NULL
普通索引:在普通字段上创建的索引,没有唯一性的限制
组合索引:两个及以上字段联合起来创建的索引
注意:
1. 在创建数据表时,将字段声明为主键(添加主键约束),会自动在主键字段创建主键 索引
2. 在创建数据表时,将字段声明为唯一键(添加唯一约束),会自动在唯一字段创建唯 一索引
创建索引
创建唯一索引
-- 创建唯一索引:创建唯一索引的列的值不能重复
-- create unique index <index_name> on 表名(列名)
create unique index index_text01 on tb_testindex(tid);
创建普通索引
-- 创建普通索引:不要求创建索引的列的值的唯一性
-- create index <index_name> on 表名(列名)
create index index_test01 on tb_testindex(name);
创建组合索引
-- 创建组合索引
-- create index <index_name> on 表名(列名,列名...)
create index index_text01 on tb_testindex(tid,name);
创建全文索引
-- 语法:
create fulltext index <index_name> on 表名(字段名);
使用索引
索引创建完成之后无需调用,当根据创建索引的列进行数据查询的时候,会自动使用索引;
组合索引需要根据创建索引的所有字段进行查询时触发。
在 命令行窗口中可以查看查询语句的查询规划:
explain select * from tb_testindex where tid=250000;
查看索引
-- 命令行
show create table tb_textindex
-- 查询数据表的索引
show indexes from tb_testindex;
-- 查询索引
show keys from tb_testindex;
删除索引
-- 删除索引:索引是建立在表的字段上的,不同的表中可能会出现相同名称的索引,因此删除索引时需要指定表名
-- 语法:drop index 索引名 on 表面;
drop index index_test3 on tb_testindex;
总结
优点:
索引大大降低了数据库服务器在执行查询操作时扫描的数据,提高查询效率索引可以避免服务器排序、将随机IO编程顺序IO
缺点:
索引是根据数据表列的创建的,当数据表中数据发生DML操作时,索引页需要更新索引文件也会占用磁盘空间
注意事项:
1,数据表中数据不多时,全表扫面可能更快吗,不要使用索引
2,数据量大但是DML操作很频繁时,不建议使用索引
3,不要在数据重复读高的列上创建索引(性别)
4,创建索引之后,要注意查询SQL语句的编写,避免索引失效