1 存储过程
预编译的SQL语句
优点:
预编译过,执行效率高
可以重复使用
安全性高,执行存储过程需要一定权限
缺点:
一致性低
2 视图
定义:虚拟表,和物理表拥有一样的功能,一般是由一个或多个表的行或列的子集组成,对视图的修改也会改变原始表
优点:
简化数据操作
定制不同用户的访问机制,安全机制
缺点:
一个复杂的多表查询所定义的视图无法直接进行更新
create or replace view 视图名 as select……;
drop view 视图名;
3 drop , delete,truncate区别
drop:删除整个表
delete:删除表内容,可加条件where
truncate:删除表内容,速度快,不能回滚
4 临时表
临时表是存在当前连接中的,一旦断开连接,mysql会自动删除并释放空间。
CREATE TEMPORARY TABLE tmp_table (
NAME VARCHAR (10) NOT NULL,
time date NOT NULL);
select * from tmp_table;
5 非关系型数据库和关系型数据库
nosql:基于键值对存储,无需经过sql解析,效率高
可扩展性强,数据之间没有耦合性
sql:复杂查询,支持事务
6 索引
是一种数据库管理系统中排序的数据结构。
优点:
加快检索速度
创建唯一性索引,保证表中每行数据唯一性
加快表之间的连接
缺点:
创建和维护索引消耗时间
索引占据存储空间
对数据进行修改,增加,删除时需要动态维护索引
聚集索引:表记录的排列顺序和索引的排列顺序一致,所以查询效率快
非聚集索引:表记录的排列顺序和索引的排列顺序不一致
7 事务
定义:对数据库一系列操作进行统一回滚或提交,保证数据完整性和一致性
四大特性ACID
原子性、一致性、隔离性、持久性
事务并发问题
脏读:一个事务读取另外一个事务还没有提交的数据
不可重复读:在同一个事务内,两个相同的查询返回了不同的结果(修改)
幻读:读取的记录数量前后不一致(插入删除)
事务隔离级别:
读未提交:如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据(解决了更新丢失,但还是可能会出现脏读)
读提交:如果是一个读事务(线程),则允许其他事务读写,如果是写事务将会禁止其他事务访问该行数据(不可重复读)
可重复读(mysql默认):指在一个事务内,多次读同一个数据,在这个事务还没结束时,其他事务不能访问该数据(包括了读写)(幻读)
串行化:提供严格的事务隔离,它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行
8 存储引擎
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/96f3dd49724dff9d119b4e76036ca419.png)
9 查询语句的执行顺序
from-where-group by-having-select-order by
10 数据库锁
悲观锁:每一次获取数据都担心被修改,先获取锁,再操作(select ... for update)
乐观锁:每一次获取数据都不被修改(版本号机制)
11 日志
redo log
undo log