MySQL基础

Posted 小鹿可可乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基础相关的知识,希望对你有一定的参考价值。

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 join
  • 右连接:右连接只影响左表,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基础的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB-1 入门

mysql 基础

MySQL悲观锁&乐观锁

谈谈mysql的悲观和乐观锁

MySQL锁类型(一致性是非锁定读自增和外键)

mysql的乐观锁和悲观锁