MySQL基础
Posted 小鹿可可乐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基础相关的知识,希望对你有一定的参考价值。
1.MySQL基础
MySQL是关系型数据库代表之一
1.1 数据库范式
- 第一范式:每一列保持原子特性
- 第二范式:属性完全依赖于主键
- 第三范式:属性不依赖于其他的非主属性
- BC范式(BCNF):每个表中只有一个候选键
- 第四范式:消除表中的多值依赖
1.2 SQL命令
1.2.1 数据库连接和释放
- 连接数据库:MySQL -u XXX -p XXX
- 退出连接:exit
1.2.2 库操作
- 创建库:create database database_name;
- 查看所有库:show databases;
- 删除库:drop database database_name;
- 选择库:use database_name;
- 查看库下所有表:show tables;
1.2.3 表操作
1.创建表:create table table_name(属性名 数据类型 [约束条件],…);
2.查看表:
- 使用desc命令: desc table_name
- 使用show命令: show create table table_name;
3.修改表:
- 修改表名:alter table table_old_name rename table_new_name;
- 修改字段类型:alter table table_name modify 属性名 数据类型;
- 修改字段:alter table table_name change 旧属性名 新属性名 新数据类型;
- 增加字段:alter table table_name add 属性名 数据类型 [约束条件];
- 删除字段:alter table table_name drop 属性名;
- 修改存储引擎:alter table table_name engine=innodb;
4.查询表:
select 属性列表 from 表名 [where 条件表达式] [ group by 属性名[having 条件表达式] ] [order by 属性名[asc|desc]] - 带in子查询:[not] in(元素1,元素2…)
- 范围查询:[not] between 取值1 and 取值2
- 带like的通配符模糊查询: [not] like '字符串’通配符‘%’:表示0个或任意长度字符串通配符‘_’:表示单个字符
- 带and多条件查询:条件表示1 and 条件表达式2 […and 条件表达式n]
- 多or的多条件查询:条件表示1 or 条件表达式2 […or 条件表达式n]
- 去重查询:select distinct 属性
- 对结果排序:order by 属性名 [asc| desc]
- 分组查询:group by [having 条件表达式]
- 分页查询:limit
5.多表查询
多表关系:一对一关系、一对多关系、多对多关系
SQL连接方式(sql结构:select 属性列表 from table1 inner|left|right join table2 on 连接条件): - 内连接:inner join
- 左连接:left joion
- 右连接:right join
2.索引
索引是一种数据结构(B+树),对数据库表中一行或者多行的值进行排序的结果,好处是提高查询的效率,避免全表扫描
2.1 索引分类
- 普通索引
- 唯一性索引:使用unique修饰的字段
- 主键索引:使用primary key 修饰的字段会创建主键索引
- 单例索引
- 多列索引
- 全文索引:只有MyISAM存储引擎支持
- 聚集索引:在INNODB引擎下建立索引
- 非聚集性索引:在MyISAM引擎建立的索引
- 哈希索引:只有memory引擎支持:利用哈希结构为底层索引
- B树索引:用B+树为底层数据结构索引
2.2 索引SQL命令
1.创建表时创建索引:create table table_name(属性 类型 [约束条件],…, [unque| fulltext] index(属性));
2.已有表上添加索引:
- 通过create命令:create [unique | fulltext] index index_name on table_name (属性名);
- 通过alter命令:alter table table_name add [unique | fulltext] index index_name (属性名);
3.删除索引:drop index index_name on table_name;
2.3 索引执行过程
explain关键字:explain命令,可以查看SQL执行计划,分析该SQL语句是否能够正确使用索引!
2.4 索引底层结构
介绍:索引支持两种索引结构:一种是B树索引、一种哈希表索引
介绍B树结构、B+树结构、哈希结构
- MyISAM中主键索引和辅助索引采用的都是B+树作为索引存储结构,叶子节点存储的都是数据地址,即索引和数据是分开存储的也叫MyISAM是非聚集索引
- INNODB的主键索引和辅助索引采用的是B+树作为索引存储结构,在主键索引的叶子节点存放的是主键及所有数据,辅助索引的叶子节点存储的是关键字和主键值,查询其他数据还需要借助主键索引,INNODB的数据和索引存放在一起,也把INNODB叫做聚集索引
3.存储索引
MySQL的存储引擎是支持插件式使用
3.1 主要存储引擎介绍
1.MyISAM:采用表锁,采用B+树结构来作为索引结构,非聚集索引数据和索引分开存储:在磁盘上三个文件:
- .frm(存储表定义)
- .myd(mydata 存储数据)
- .myi(myindex 存储索引)
2.INNODB:采用行锁(采用锁索引的形式来实现行锁/如果没有对应索引,退化为行锁),采用B+树结构作为索引结构,提供事务安全特征,支持列自动增长,外键,索引聚集索引聚集索引:数据和索引存放在一块,磁盘上有两个文件 - .frm(存放表定义)
- .ibd(存储数据和索引)
3.memory:使用的是哈希表结构作为索引结构,将数据都存放在内存中,访问效率是非常快的memory表在磁盘上对应一个文件,格式是.frm(存放的是表定义)
3.2 存储引擎SQL命令
- 创建表指定存储引擎:create table table_name(属性 …) engine = innodb;
- 修改存储引擎:alter table table_name engine=innodb;
- 查看存储引擎:show engines;
- 全局表统一修改:修改MySQL的配置文件(windows下是my.ini文件)default-storage-engine=INNODB
4.事务
事务是指一条或者多条对数据库操作的SQL组成的一个不可分割的单元,该事务要么全部执行,要么全部不执行,不存在部分执行
4.1 事务特征(ACID)
- 原子性
- 一致性
- 隔离性
- 持久性
4.2 事务相关操作
1.查看事务:select @@autocommit(查询结果: 1开启自动提交事务 0:表示手动提交)
2.修改事务:set autocommit=0;
3.事务操作:
- 开启事务:begin或start transaction
- 事务提交:commit
- 事务回滚:rollback
- 保存点设置:savepoint point1
- 回滚保存点:rollback point1
4.查看隔离级别:select @@tx_isolation
5.设置隔离级别:set session transaction isolation level XXX
4.3 并发事务问题
1.脏读:A事务读取到B事务尚未提交的更改数据,并在读取的数据基础上进行操作,如果这是B事务恰巧进行回滚事务,A事务的读取的事务是不被承认的
2.不可重复读:A事务读取到B事务已经更改的数据(针对行数据的更改)
3.幻读:A事务读取到B事务提交的新增数据,幻读一般是针对数据统计(针对表级别的新增数据)
4.4 事物的隔离级别
- read-uncommitted(读取未提交):最低隔离级别,允许读取未提交的事务,可能会导致脏读、不可重复读和幻读
- read-committed(读取已提交)允许读取并发事务已提交的数据,可以阻止脏读,会发生不可重复读和幻读
- repeatable-read(可重复读)对同一个字段的多次读取的结果是一致的,可以阻止脏读和不可重复读,会出现幻读
- serializable(可串行化)最高隔离级别,所有事务依次逐个执行,可防止幻读、不可重复读和幻读
5.MySQL优化
- 设计角度:存储引擎、字段类型、范式原则
- 功能:索引、缓存、分库分表
- 架构设计:主从复制、读写分离、负载均衡
6.连接池
1.通过连接池来复用MySQL连接
2.常见连接池:
- c3p0
- dbcp
- druid
今天也要好好学习呀~
以上是关于MySQL基础的主要内容,如果未能解决你的问题,请参考以下文章