数据库

数据库

索引

what?

  1. 主键索引,主键自动为索引
  2. 唯一索引(unique)
  3. 普通索引(index) //不是主键和uniqu的字段也想缩减查询速度
  4. 全文索引(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?

在数据库数据量大的时候可以牺牲空间来换取查询速度,对修改和删除数据有影响,改变了索引里的内容从而重新加载(但这是值得的)

那些列适合做索引

  1. 较为频繁查询的字段

  2. 唯一性太差的字段不适合做索引,如性别字段

  3. 更新频繁的字段不适合做索引

事务

  1. 事务管理

  2. savepoint

  3. rollback

  4. commit

  5. 隔离级别

  6. ACID

what

事务用于保证数据的一致性,由一组dml语句(数据管理语句,删改查)组成,这组语句要么全部成功要么全部失败,EX:转账就要用事务处,用来保证的数据的一致性(不会出现一个账户扣钱,另一个账户没有增钱)

how

why

事务管理(inodb)

  1. start transaction 开始一个事务
  2. savepoint
  3. rollback to
  4. rollback
  5. commit 所有操作生效无法回退,把之前的保存点都删除)(结束事务)
start transaction
-- 设置保存点名字
savepoint a
-- 回滚
rollback to a
-- 设置
set autocommit = off

隔离级别

事务与事务之间的隔离程度

脏读:读取到未提交的改变时(添加,删除,更改)

不可重复读:读取到非当前登录时间段已提交的修改,删除数据

幻读:读取到非当前登录时间段已提交的添加数据

隔离级别

4种隔离级别

  1. 读未提交 脏读T 不可重复读 T 幻读 T 不加锁
  2. 读已提交 F T T 不加锁
  3. 可重复读 F F F 不加锁
  4. 可串行化 F F F 加锁 (T是可能出现,F是不会出现)

加锁后发现有其他连接事务对这张表进行修改,并且并未提交.会阻塞

dos命令得到当前隔离级别

select @@tx_isolation;
-- 设置当前隔离级别
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

事务ACID特性

  1. 原子性(Atomicity
    • 事务是一个不可被分割的单位,无论什么情况事务都会一起执行,要么一起不执行
  2. 一致性(Consistency)
    • 事务必须使数据库从一个一致状态变换到另外一个一致状态
  3. 隔离性(Isolation)
    • 多个用户并发访问数据库,事务与事务之间不应该存在干扰
  4. 持久性(Durability)
    • 一旦数据被提交到数据库中会永久更改

表类型和存储引擎

what?

  1. mysql的表类型由存储引擎来决定
  2. mysql数据库支持6种类型
    • CSV
    • Memory(数据存储在内存中,不用IO,关闭数据库数据会消失,表结构还在,such qq的状态)
    • ARCHIVE
    • innoBDB(支持事务,外键,行锁)
    • MGR_MYISAM
    • MYISAM(不支持外键和事务,支持表锁)
  3. 主要有两大类事务安全类型和非事务安全类型

how?

-- 展示所有引擎
show engines
-- 修改存储引擎
alter table '表名' engine = ;

根据需求选择表的类型

视图

视图和真实表的对应关系

视图与表的关系

总结

  1. 视图是根据表来创建的,视图是虚拟的表
  2. 视图的数据都来自基表(只有视图结构文件.frm)
  3. 通过视图可以改变基表
  4. 基表的改变也会影响视图

how

creat view 视图名 as select语句
alter view 视图名 as select语句
show create view 视图名
drop view 视图名1,视图名2

视图中可以在使用视图

why

  1. 安全

  2. 性能(关系型数据库经常分表存储,经常用join来连接,效率低,通过建立视图,将相关表的字段组合在一起,就可以避免使用join

  3. 灵活

    视图的灵活性

用户管理

create user '用户名'@'ip地址' identified by '密码'
drop user '用户名'@'ip地址'
set [for 用户信息] password = PASSWORD('')//可以修改自己的密码,修改别人的密码需要权限


用户的完整信息是用户名加ip地址

用户授权代码规范

posted @ 2023-09-15 10:16  佬zz  阅读(7)  评论(0)    收藏  举报