通俗讲字符集就是字符码的集合,在 MySQL 中字符集的选择影响字符码的存储,字符集选择不好不仅影响存储展示还会有问题,例如乱码。
在业务中常用的字符集是 UTF-8
字符集,mysql 有两种这样的字符集:utf8、utf8mb4,它们的区别如下:
utf8: 支持最长 3 Byte 的字符编码,但一部分 UTF-8
的 4 Byte 编码不支持,例如 emoji。
utf8mb4:支持最长 4 Byte 的字符编码。这是业务中使用最多的字符集,从 MySQL 8.0 开始成为默认字符集。
字符的排序规则(collate):字符在比较、排序时以及大小写敏感 的规则。涉及字符比较的操作均与其相关,例如:排序、分组、索引、比较(=、>、<等)。MySQL 中有些字符排序规则是忽略大小写的,例如 utf8mb4_general_ci
排序规则,这种带有 ci
后缀的是大小写不敏感的标志(ci 即 case insensitive 的缩写)。
使用手动方式安装 MySQL,手动配置 MySQL,使用 systemd 托管 MySQL 启动。
区别于 MyISAM,InnoDB 支持事务,使其成为了 MySQL 的默认存储引擎,也是大多数 OLTP 系统的首选存储引擎。
一条 SQL 是如何执行的 首先客户端通过 tcp/ip 发送一条 sql 语句到 server 层的 SQL interface SQL interface 接到该请求后,先对该条语句进行解析,验证权限是否匹配 验证通过以后,分析器会对该语句分析,是否语法有错误 接下来是优化器器生成相应的执行计划,选择最优的执行计划 之后会是执行器根据执行计划执行这条语句。在这一步会去 open table,如果该 table 上有 MDL 锁,则等待,如果没有,则加在该表上加短暂的 MDL(S) (如果 opend_table 太大,表明 open_table_cache 太小。需要不停的去打开 frm 文件) 进入到引擎层,首先会去 innodb_buffer_pool 里的 data dictionary(元数据信息)得到表信息 通过元数据信息,去 lock info 里查出是否会有相关的锁信息,并把这条 update 语句需要的锁信息写入到 lock info 里(锁
为了知道 SQL 的效率执行的怎么样,经常使用 explain 查看 SQL 的具体执行过程,以加快 SQL 的执行效率。
explain 语句官方说明文档:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html
数据库版本 MySQL 8.0
数据库中的数据是撑起应用系统的重中之重,定期备份数据库中的数据是很有必要的。定期备份数据是为了防止数据库出现意外情况,如被病毒入侵造成删库,勒索等。
实现是使用 mysql 的 mysqldump
备份命令, 利用 cron 配合脚本实现定期备份。