MySQL 索引
分类
主键索引
唯一索引
常规索引
全文索引
InnoDB 引擎中,根据索引的存储形式,又可以分为:
聚集索引
辅助索引
聚集索引选取规则:
如果存在主键,主键索引就是聚集索引
如果不存在主键,将使用第一个(非空)唯一索引作为聚集索引
如果没有主键,或没有合适的唯一索引,则 InnoDB 会自动生成一个 rowid
作为隐藏的聚集索引
语法
12345678# 创建索引CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name ( index_col_name, ... );# 查看索引SHOW INDEX FROM table_name ;# 删除索引DROP INDEX index_name ON table_name;
性能分析
123456789101112# 查看执行频率SHOW GLOBAL/SESSION STATUS LIKE 'Com_______';# 查询语句的耗时情况select @@have_profiling;SET profiling = 1;show profiles;show p ...
MySQL 事务
事务简介
事务
是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么
同时成功,要么 同时失败
比如 A 向 B 转账 75 元,则 A 账户减少 75 元,B 账户增加 75
元,这两个操作要么都成功,要么都失败,否则会造成数据的不一致
默认 MySQL 的事务是自动提交的,也就是说,当执行完一条 DML
语句时,MySQL 会立即隐式的提交事务。
事务操作
可以将默认的自动提交改为手动提交,也可以使用开启事务,两种方法
查看/数值事务提交方式
123# 1 为自动提交,0 为手动提交SELECT @@autocommit;SET @@autocommit = 0;
开启事务
123START TRANSACTION// BEGIN;
提交事务
1COMMIT;
回滚事务
1ROLLBACK;
四大特性 ACID
原子性
(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性
(Consistency):事务完成时,必须使所有的数据都保持一致状态
隔离性
(Isolatio ...
MySQL 多表查询
多表关系
一对多(多对一)
比如部门与员工的关系,一个部门对应多个员工,一个员工对应一个部门
在多的一方建立外键,指向一的一方的主键
多对多
比如学生与课程的关系,一个学生可以选修多门课程,一个课程有多个学生可以选择
建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
一对一
比如用户与用户详情的关系,多用于单标拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率
在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的
(UNIQUE)
多表查询概述
多表查询指从多张表中查询数据
笛卡尔积:笛卡尔乘积是指在数学中,两个集合A集合 和
B集合的所有组合情况(在多表查询时,需要消除无效的笛卡尔积)
多表查询分类
连接查询
内连接:相当于查询 A、B 交集部分数据
外连接:
左外连接:查询左表所有数据,以及两张表交集部分数据
右外连接:查询右表所有数据,以及两张表交集部分数据
自连接:当前表与自身的连接查询,自连接必须使用表别名
子查询
内连接
内连接查询的是两张表的交集的部分
隐式内连接
1SELECT 字段列表 FROM 表1, ...
MySQL 约束
概述
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据
目的:保证数据库中数据的正确、有效性和完整性。
约束
描述
关键字
非空约束
限制该字段的数据不能为null
NOT NULL
唯一约束
保证该字段的所有数据都是唯一、不重复的
UNIQUE
主键约束
主键是一行数据的唯一标识,要求非空且唯一
PRIMARY KEY
默认约束
保存数据时,如果未指定该字段的值,则采用默认值
DEFAULT
检查约束(8.0.16版本之后)
保证字段值满足某一个条件
CHECK
外键约束
用来让两张表的数据之间建立连接,保证数据的一致性和完整性
FOREIGN KEY
自增长约束
自增 1
AUTO INCREMENT
注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。
外键约束
外键:用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性
具有外键的表是 子表或从表,外键关联的表是
父表或主表
添加外键
1234567CREATE TABLE 表名( 字段名 数据类型, ... [ ...
MySQL 函数
字符串函数
函数
功能
CONCAT(S1, S2, …Sn)
字符串拼接,将 S1,S2,...Sn 拼接成一个字符串
LOWER(str)
将字符串 str 全部转为小写
UPPER(str)
将字符串 str 全部转为大写
LPAD(str, n, pad)
左填充,用字符串 pad 对 str 的左边进行填充,达到 n 个字符串长度
RPAD(str, n, pad)
右填充,用字符串 pad 对 str 的右边进行填充,达到 n 个字符串长度
TRIM(str)
去掉字符串头部和尾部的空格
LTRIM(str)
去掉字符串头部的空格
RTRIM(str)
去掉字符串尾部的空格
SUBSTRING(str, start, len)
返回从字符串 str 从 start 位置起的 len 个长度的字符串
LENGTH(str)
得到字符串 str 长度,utf8
编码下,一个汉字三个字节,一个数字或字母一个字节,gbk
编码下,一个汉字两个字节,一个数字或字母一个字节
CHAR_LENGTH(str)
得到字符串 st ...
MySQL 语法
SQL
全称 Structured Query Language,结构化查询语言
根据功能,分为四类
分类
全称
说明
DDL
Data Definition Language
数据定义语言,用来定义数据库对象(数据库,表,字段)
DML
Data Manipulation Language
数据操作语言,用来对数据库表中的数据进行增删改
DQL
Data Query Language
数据查询语言,用来查询数据库中表的记录
DCL
Data Control Language
数据控制语言,用来创建数据库用户、控制数据库的访问权限
DDL
Data Definition
Language,数据定义语言,用来定义数据库对象(数据库,表,字段)
数据库操作
创建
1CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
删除
1DROP DATABASE [IF EXISTS] 数据库名;
切换
1USE 数据库名;
查询
12345# 查询所有数 ...
MySQL
内容
基础篇
语法
函数
约束
多表查询
事务
进阶篇
存储引擎(InnoDB,MyISAM,Memory)
索引(主键索引,唯一索引,常规索引,全文索引,InnoDB
又可分为聚集索引和辅助索引)
SQL 优化
视图/存储过程/触发器
锁
InnoDB 核心
MySQL 管理
运维篇
日志
主从复制
分库分表
读写分离
安装
MacOs
1brew install mysql
Ubuntu
123sudo apt-get install mysql-serversudo apt-get install mysql-clientsudo apt-get install libmysqlclient-dev
设置
1mysql_secure_installation
启动
MacOS 1sudo mysql.server start
Ubuntu
1sudo service mysql start
登录
12// mysql [-h 127.0.0.1] [-P 3306] -u root -pmysql -u root -p
关闭
MacOs 1sudo mysql.s ...