查看MySQL提供的所有存储引擎命令:show engines
MySQL的默认存储引擎是InnoDB,它是事务性存储引擎
MyISAM与InnoDB的区别
- 是否支持行级锁:MyISAM只具有表级锁,而InnoDB既具有行级锁也有表级锁
- 是否支持事务和崩溃后的安全恢复:MyISAM强调性能,不支持事务
索引
MySQL使用的索引:BTree索引和哈希索引。需求为单条记录查询时,使用哈希索引
事务
- 事务是逻辑上的一组操作,要么全都执行,要么都不执行
- 事务的四大特性:原子性、一致性、隔离性、持久性
- 并发事务带来的问题:脏读、丢失数据、不可重复读、幻读
- 事务隔离级别:
脏读 | 不可重复读 | 幻读 | |
---|---|---|---|
读未提交 | 会发生 | 会发生 | 会发生 |
读已提交 | 不会发生 | 会发生 | 会发生 |
可重复读 | 不会发生 | 不会发生 | 会发生 |
序列化 | 不会发生 | 不会发生 | 不会发生 |
MySQL的默认隔离级别是可重复读
大表优化
当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施:
- 限定数据范围:查询要带限定条件
- 读写分离
- 重复分区:将一个表竖着分成多张表
- 水平分区
表的操作
1.DELET与DROP
- DROP主要用于删除结构。如库、表;DELET用于删除数据
- 二者都会释放空间
列属性(列约束)
Primary Key(主键):能唯一标识记录的字段,作为主键
特性:
- 一个表只能有一个主键
- 主键具有唯一性
声明方式:
- 在声明字段时用primary key标识
- 在字段列表之后声明:
create table tablename(
id,
name,
...
primary key(id)
)
UNIQUE唯一约束(唯一索引):使某个字段的值不可以重复
特性
- UNIQUE约束唯一标识数据库的每条记录
- 每个表可以有多个UNIQUE约束,但只能有一个主键
使用方式
创建表时指定UNIQUE
create table tablename(
id,
name,
...
unique(id)
)
NULL约束
comment:注释字段(comment “注释内容")
建表规范
Normal Format(NF)
- 每个表保存一个实体信息
- 每个具有一个ID字段作为主键
- ID主键+原子表
1NF:字段不可再分,就满足第一范式
2NF:
- 满足1NF的前提下,不能出现部份依赖
- 消除复合主键可避免部分依赖
3NF:
- 满足2NF的前提下,不能出现传递依赖
- 传递依赖概念:某字段依赖主键,而其他字段依赖该字段
Select
select
- 可用*表示所有字段
- 可以使用表达式(计算公式、函数调用、字段也是表达式)
- 可以用别名表示列名
where
- 单筛选条件:使用运算符=、<、>、<>等
- 多筛选条件:使用and、or等逻辑连词
having
- 作用与where相同,但机制不同
having与where的区别
- where是一个约束声明,使用where来约束来自数据库的数据
- where是在结果返回之前起作用的
- where中不能使用聚合函数
- having是一个过滤声明,在查询到结果后对结果进行过滤
group by子句、分组子句
使用方式:
group by 字段/别名
特性:
- 聚合函数要配合group by使用
- 可以去除重复列
DISTINCT:去除重复列,返回不重复的列
使用方式:
select distinct 列名
order by子句:排序子句
使用方式:
order by 排序字段/别名 DES/ANS [排序字段/别名]
limit子句:限制结果数量子句
仅对处理好的结果进行数量限制
使用方式:
limit A,B