数据库
索引
what?
- 主键索引,主键自动为索引
- 唯一索引(unique)
- 普通索引(index) //不是主键和uniqu的字段也想缩减查询速度
- 全文索引(fulltext) ??????????
一种存储字段的形式(用各种数据结构实现各种索引方式(二叉树)
how?
-- 创建索引
creat [unique] index idex_name on table_name(field_name)
alter table table_name ADD index table_name(FIELD_NAME)
alter table table_name ADD PRIMARY KEY(FIELD_NAME)
-- 删除索引
drop index [索引名] on [表名]
-- 删除主索引
alter table [表名] drop primary key
修改索引先删除在添加
-- 查询索引
show index from TABLE_NAME
-- 查看表结构
DESC TABLE_NAME
why?
在数据库数据量大的时候可以牺牲空间来换取查询速度,对修改和删除数据有影响,改变了索引里的内容从而重新加载(但这是值得的)
那些列适合做索引
-
较为频繁查询的字段
-
唯一性太差的字段不适合做索引,如性别字段
-
更新频繁的字段不适合做索引
事务
what
事务用于保证数据的一致性,由一组dml语句(数据管理语句,删改查)组成,这组语句要么全部成功要么全部失败,EX:转账就要用事务处,用来保证的数据的一致性(不会出现一个账户扣钱,另一个账户没有增钱)
how
why
事务管理(inodb)
- start transaction 开始一个事务
- savepoint
- rollback to
- rollback
- commit 所有操作生效无法回退,把之前的保存点都删除)(结束事务)
start transaction
-- 设置保存点名字
savepoint a
-- 回滚
rollback to a
-- 设置
set autocommit = off
隔离级别
事务与事务之间的隔离程度
脏读:读取到未提交的改变时(添加,删除,更改)
不可重复读:读取到非当前登录时间段已提交的修改,删除数据
幻读:读取到非当前登录时间段已提交的添加数据
4种隔离级别
- 读未提交 脏读T 不可重复读 T 幻读 T 不加锁
- 读已提交 F T T 不加锁
- 可重复读 F F F 不加锁
- 可串行化 F F F 加锁 (T是可能出现,F是不会出现)
加锁后发现有其他连接事务对这张表进行修改,并且并未提交.会阻塞
dos命令得到当前隔离级别
select @@tx_isolation;
-- 设置当前隔离级别
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
事务ACID特性
- 原子性(Atomicity
- 事务是一个不可被分割的单位,无论什么情况事务都会一起执行,要么一起不执行
- 一致性(Consistency)
- 事务必须使数据库从一个一致状态变换到另外一个一致状态
- 隔离性(Isolation)
- 多个用户并发访问数据库,事务与事务之间不应该存在干扰
- 持久性(Durability)
- 一旦数据被提交到数据库中会永久更改
表类型和存储引擎
what?
- mysql的表类型由存储引擎来决定
- mysql数据库支持6种类型
- CSV
- Memory(数据存储在内存中,不用IO,关闭数据库数据会消失,表结构还在,such qq的状态)
- ARCHIVE
- innoBDB(支持事务,外键,行锁)
- MGR_MYISAM
- MYISAM(不支持外键和事务,支持表锁)
- 主要有两大类事务安全类型和非事务安全类型
how?
-- 展示所有引擎
show engines
-- 修改存储引擎
alter table '表名' engine = ;
根据需求选择表的类型
视图
视图和真实表的对应关系
总结
- 视图是根据表来创建的,视图是虚拟的表
- 视图的数据都来自基表(只有视图结构文件.frm)
- 通过视图可以改变基表
- 基表的改变也会影响视图
how
creat view 视图名 as select语句
alter view 视图名 as select语句
show create view 视图名
drop view 视图名1,视图名2
视图中可以在使用视图
why
-
安全
-
性能(关系型数据库经常分表存储,经常用join来连接,效率低,通过建立视图,将相关表的字段组合在一起,就可以避免使用join
-
灵活
用户管理
create user '用户名'@'ip地址' identified by '密码'
drop user '用户名'@'ip地址'
set [for 用户信息] password = PASSWORD('')//可以修改自己的密码,修改别人的密码需要权限
用户的完整信息是用户名加ip地址
标签:事务,--,数据库,视图,索引,table From: https://www.cnblogs.com/lz2z/p/17704259.html