MySQL(九)-索引(一)
参考文献
高性能MySQL(第三版)
极客时间–MySQL实战45讲
数据库索引设计与优化
MySQL 优化之 index merge(索引合并)
索引
概念
关键字与数据的映射关系称为索引(包含关键字和对应的记录在磁盘中的地址).关键字是从数据当中提取的用于标识、检索数据的特定内容.
索引的出现是为了提高查询的效率;
索引用来快速地寻找那些具有特定值的记录.如果没有索引,一般来说执行查询时遍历整张表.
索引的原理很简单,就是把无序的数据变成有序的查询
把创建了索引的列的内容进行排序
对排序结果生成倒排表
在倒排表内容上拼上数据地址链
在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体数据
索引检索为什么快?
关键字相对于数据本身,数据量小
关键字是有序的,二分查找可快速确定位置
索引操作
创建索引
在创建表的时候对字段进行指定索引
12345678CREATE TABLE user_index ( id INT auto_increment PRIMARY KEY, first_name VARCHAR ( 16 ), last_name VARC ...
MySQL(七)-存储过程,视图,触发器
参考文献
存储过程
123456789101112131415161718-- 修改最外层语句结束符delimiter 自定义结束符号 SQL语句自定义结束符号delimiter ; -- 修改回原来的分号-- 语句块包裹begin 语句块end-- 特殊的执行1. 只要添加记录,就会触发程序。2. Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update3. Replace 语法 如果有记录,则执行 before insert, before delete, after delete, after insert
123456789101112131415161718192021222324252627282930313233 ...
MySQL(四)-常见函数
MySQL常见函数
字符函数
数值运算符与函数
比较运算符与函数
日期时间函数
信息函数
聚合函数
加密函数
字符函数
函数名称
描述
CONCAT()
字符连接
CONCAT_WS()
使用指定的分隔符进行字符连接
FORMAT()
数字格式化函数
LOWER()
转换为小写字母
UPPER()
转换为大写字母
LEFT()
获取左侧字符
RIGHT()
获取右侧字符
LENGTH()
获取字符串长度
LTRIM()
删除前导空格
RTRIM()
删除后导空格
SUBSTRING()
字符串截取
[NOT] LIKE
模式匹配
REPLACE()
字符串替换
数值运算符与函数
函数名称
描述
CEIL()
进一取整(向上取整)
FLOOR()
舍一取整(向下取整)
DIV
整数除法
MOD
取模
POWER()
幂运算
ROUND()
四舍五入
TRUNCATE()
数字截取
ABS()
取绝对值
比较运算符与函数
函数名称
描述
[NOT] BETW ...
MySQL(三)-理论
参考文献
MySQL 数据库面试题(2021最新版)
极客时间–MySQL实战45讲
MySQL技术内幕 InnoDB存储引擎
MySQL 设计与开发规范,很详细,你该注意了
MySQL技术内幕 SQL编程
SQL四种语言: DDL,DML,DCL,TCL
DDL
DDL(Data Definition Language ) 数据库定义语言 statements are used to define the database structure or schema.
DDL是SQL语言的四大功能之一.用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束DDL
不需要commit.
123456CREATEALTERDROPTRUNCATECOMMENTRENAME
DML
DML(Data Manipulation Language)数据操纵语言statements are used for managing data within schema objects.
由DBMS提供,用于让用户或程序员使用, ...
MySQL中utf8与utf8mb4的区别
MySQL中utf8与utf8mb4的区别
utf8mb4是MySQL在5.3.3后增加的编码,其中mb4的意思是: most byte 4,专门兼容四字节的Unicode
原来的MySQL支持的utf8编码最大字符长度为3字节,若遇到4字节的宽字符就会插入异常
3字节的utf8最大能编码的Unicode字符为Oxffff,即Unicode中基本多文种平面(BMP),即任何不在基本多文种平面的Unicode字符都无法使用MySQL的utf8字符集进行存储,包括Emoji表情和很多不常用的汉字
当使用utf8字符集时,需要保留长度就是utf8最长字符乘以字符串长度,例CHAR(100),MySQL会保留300字节长度
utf8升级utf8mb4步骤
首先将数据库默认字符集有utf8改为utf8mb4,对应的表默认字符集也要改为utf8mb4,已经存储的字段默认字符集也要进行相应调整;
123456-- 修改数据库ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;- ...
MySQL(二)-运维操作(二)
参考文献
命令行接口
mysql --column-type-info 显示结果集元数据
123456789101112131415161718192021-- 字段名Field 11: `produced_time`-- 目录名称Catalog: `def`-- 数据库名称Database: `test`-- 数据表名称, 当使用select field_name from table_name as alias_name语法时,这里显示的是表的别名Table: `orders`-- 原始表名,当前面行显示的别名,知道这个就非常有用了Org_table: `orders`-- 前面的行显示字段类型Type: DATETIME-- 排序规则Collation: binary (63)-- 表定义中定义的字段长度Length: 26-- 返回结果集字段长度的最大值Max_length: 0-- 如果是一个整数类型,则表示该字段中小数点后的位数Decimals: 6Flags: BINARY
MySQL沙箱
参考文献 ...
MySQL(二)-运维操作(一)
参考文献
你真的知道如何设置数据库连接池的大小吗
客户端操作
展示告警信息SHOW WARNINGS\G
连接相关
MySQL的最大连接数在5.7版本中默认是151, 最大可以达到16384(2142^{14}214)。如何设置最大连接数在于你的服务器性能
查看 MYSQL连接数信息命令
1mysql> show variables like '%max_connections%';
查询当前数据库已建立连接数
1mysql> show status like 'Threads_connected';
配置
含义
Connections
尝试连接mysql的连接数,不管连接成功与否,该值都会+1
Threads_connected
已经建立的连接数,单节点下一般小于最大连接池最大连接数
max_connections
MySQL限制的最大的可连接的数量
wait_timeout
即MySQL长连接(非交互式)的最大生命时长,默认为8小时
interactive_timeout
长 ...
MySQL-用户权限管理
参考文献
你真的知道如何设置数据库连接池的大小吗
用户管理
用户信息表:mysql.user
新增用户
123456CREATE USER 'username'@'host' IDENTIFIED BY 'password'; - 必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限. - 只能创建用户,不能赋予权限. - 用户名,注意引号:如 'user_name'@'192.168.1.1' - 密码也需引号,纯数字密码也要加引号 - 要在纯文本中指定密码,需忽略PASSWORD关键词.要把密码指定为由PASSWORD()函数返回的混编值,需包含关键字PASSWORD
username:你将创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码 ...
MySQL(一)-基础操作
参考文献
不藏了,我的一千行 MySQL 学习笔记(2万字长文)
Difference between Delete and Truncate Command
操作MySQL客户端
MySQL登录:mysql 参数
参数
描述
-D,--database = name
打开指定的数据库
--delimiter = name
指定分割符
-h,--host = name
服务器名称
-p,--port = #
端口号
--prompt = name
设置提示符,[\D:完整的日期;\d: 当前数据库;\h:服务器名称;\u: 当前用户]
-u,--user = name
用户名
-V,--version
输出版本信息并且推出
-S, --socket=name
指定socket文件
1mysql -u root -S /tmp/mysql.sock
MySQL退出: exit/quit/\q
显示数据库信息:\s
1234567891011121314151617181920212223242526Sun Jun 13 16:30:30 ...