Mysql

2020-08-04  本文已影响0人  瞳师

一、 Mysql

1. Install

(1) 安装

(2) 卸载

  1. 去mysql的安装目录找到my.ini文件复制 datadir = "文件路径"
  2. 卸载mysql
  3. 删除路径下的MySQL文件夹

(3) 配置

2. SQL

(1) 概念

Structured Query Language: 结构化查询语言

(2) SQL通用语法

  1. SQL语句不区分大小写,关键字建议使用大写

  2. 注释方式

    • 单行注释: -- 注释内容 || # 注释内容(mysql特有)
    • 多行注释: /* 注释 */

(3) SQL分类

3. DDL

(1) 操作数据库

1. C(Create) - 创建

2. R(Retrieve) - 查询

3. U(Update) - 更新

4. D(Delete) - 删除

(2) 操作表

1. C(Create) - 创建

create table 表名(
    列名 数据类型
    ...
);

2. R(Retrieve) - 查询

3. U(Update) - 更新

4. D(Delete) - 删除

4. DML

(1) 添加数据

除了数字类型,其他类型需要添加引号

(2) 删除数据

(3) 修改数据

5. DQL

-- 完整语法
select
    字段列表
from
    表名列表
where
    条件列表
group by
    分组字段
having
    分组之后条件
order by
    排序
limit
    分页限定

(1) 基础查询

IFNULL(exper1 , exper2) - 不为null,返回exper1,否则返回exper2

(2) 运算符

(3) 模糊查询

(4) 排序查询

(5) 聚合函数

  1. count - 计数
  2. max - 最大值
  3. min - 最小值
  4. sum - 和
  5. avg - 平均值

注意: 聚合函数的计算,排除null值

  1. 选择不包含非空的列进行计算: 主键
  2. IFNULL函数

(6) 分组查询

(7) 分页查询

6. 约束

对表中的数据进行限定,保证数据的正确性,有效性,完整性

(1) 主键约束(primary key)

(2) 非空约束(not null)

(3) 唯一约束(unique)

(4) 外键约束(foreign key)

(5) 级联

谨慎使用

7. 多表查询

(1) 内连接

  1. 隐式内连接
  2. 显示内连接
    • select 字段列表 from table1 [inner] join table2 on 条件

(2) 外连接

  1. 左外连接/右外连接

    • select 字段列表 from table1 left/right [outer] join table2 on 条件

(3) 子查询

8. 多表间的关系

(1) 分类

  1. 一对一(唯一外键)

  2. 一对多(在多的表中,添加外键)

  3. 多对多(采用中间表记录)

(2) 数据库范式

1. 分类

2. 概念

(3) 数据库的备份与还原

1. 命令行:

9. 事务

Transaction

(1) 基本介绍

如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败

  1. 开启事务: start transaction
  2. 回滚: rollback
  3. 提交: commit
    • 查看事务的默认提交方式: select @@autocomimt;(1为自动,0为手动)
    • 修改事务的默认提交方式: set @@autocomimt = x;

(2) 四大特征

  1. 原子性(Atomicity): 事务是不可分割的最小操作单位,要么同时成功,要么同时失败
  2. 持久性(Durability): 当事务提交或回滚后,数据库会持久化的保存数据
  3. 隔离性(Isolation): 多个事务之间,互相独立
  4. 一致性(Consistency): 事务操作前后,数据总量不变

(3) 隔离级别

多个事务之间是隔离的,互相独立的.如果多个事务操作同一批数据,会引发一些问题,设置不同的隔离级别可以解决这些问题

(4) 具体操作

SELECT @@tx_isolation;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

10. 数据类型

(1) 数据对应

类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述
VARCHAR L+N VARCHAR java.lang.String 12
CHAR N CHAR java.lang.String 1
BLOB L+N BLOB java.lang.byte[] -4
TEXT 65535 VARCHAR java.lang.String -1
INTEGER 4 INTEGER UNSIGNED java.lang.Long 4
TINYINT 3 TINYINT UNSIGNED java.lang.Integer -6
SMALLINT 5 SMALLINT UNSIGNED java.lang.Integer 5
MEDIUMINT 8 MEDIUMINT UNSIGNED java.lang.Integer 4
BIT 1 BIT java.lang.Boolean -7
BIGINT 20 BIGINT UNSIGNED java.math.BigInteger -5
FLOAT 4+8 FLOAT java.lang.Float 7
DOUBLE 22 DOUBLE java.lang.Double 8
DECIMAL 11 DECIMAL java.math.BigDecimal 3
BOOLEAN 1 同TINYINT
ID 11 PK (INTEGER UNSIGNED) java.lang.Long 4
DATE 10 DATE java.sql.Date 91
TIME 8 TIME java.sql.Time 92
DATETIME 19 DATETIME java.sql.Timestamp 93
TIMESTAMP 19 TIMESTAMP java.sql.Timestamp 93
YEAR 4 YEAR java.sql.Date 91

二、Mysql高级

(1) 索引

1. 概述

帮助MySQL高效获取数据的数据结构(有序)

2. 优势劣势

  1. 类似于书籍的目录索引,提高数据检索的效率,降低数据库的IO成本。
  2. 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗
  1. 实际上索引也是一张表,该表中保存了主键与索引字段,并指向实体类的记录,所以索引列也是要占用空间的
  2. 虽然索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行NERT、 URDATE、 DELETE.因为更新表时,MSQL不仅要保存数据,还要保存一下索引文件,每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息

3. 结构

  1. BTree

    BTree又叫多路平衡搜索树,一颗m叉的 BTree特性如下

    • 树中每个节点最多包含m个孩子
    • 除根节点与叶子节点外,每个节点至少有[ceil(m / 2)]个孩子
    • 若根节点不是叶子节点,则至少有两个孩子
    • 所有的叶子节点都在同一层
    • 每个非叶子节点由n个key与n + 1个指针组成,其中[ceil(m / 2) - 1] < n < m - 1

4. 分类

  1. 单值索引:
  2. 唯一索引:
  3. 复合索引:

5. 语法

  1. 创建索引:CREATE INDEX (index_name) ON (table_name(column_name))

  2. 删除索引:DROP INDEX (index_name) ON (table_name)

  3. 查看索引:SHOW INDEX FROM (table_name) [\G]

  4. ALTER:

    • alter table tb_name add primary key (column_list):
      该语句添加一个主键,这意味着索引值必须是一的,且不能为NULL
    • alter table tb_name add unique index_name(column_list)
      这条语句创建索引的值必须是唯一的(除了NUL外,NULL可能会出现多次)
    • alter table tb_name add index index_name(column_list):
      添加通索引,索引值可以出现多次
    • alter table tb_name add fulltext index_name (column_list):
      该语句指定了索引为 FULL TEXT,用于全文索引

6. 设计原则

(2) 视图

1. 创建/修改

CREATE [OR REPLACE] [ALGORITHM [UNDEFINED I MERGE I TEMPTABLE]
VIEW view_name [(column_list)]
AS select statement
[WITH [CASCADED I LOCAL] CHECK OPTION]

2. 查看

show tables;

3. 删除

drop view if exists (view_name);

(3) 存储过程/函数

1. 创建

delimiter $

create procedure procedure_name(参数列表)

begin

        存储过程体(一组合法的SQL语句)

end $

delimiter ;

2. 查看

show procedure status[\G];

3. 删除

drop procedure [if exists] procedure_name;

(4) 触发器

1. 创建

create trigger trigger-name
before/after insert/update/delete
on table_name
[for each row]
trigger_stmt;

(5) 存储引擎

1. Innodb

2. MyISAM

3. MEMORY

4. MERGE

(6) 优化SQL步骤

一般步骤概要:

  1. 通过 show status 命令了解各种sql的执行频率

show [session | global] status like 'Com_______;

  1. 定位执行效率较低的sql语句
  2. 通过explain分析低效sql的执行计划
  1. 通过 show profile 分析sql
  2. 通过trace分析 优化器 如何选择执行计划
  3. 确定问题并采取相应的优化措施
上一篇 下一篇

猜你喜欢

热点阅读