通俗讲字符集就是字符码的集合,在 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 了(一是没有多余服务器,二是懒的装了),经过一番调研后决定尝试一下嵌入式数据库。
区别于 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,当时写了个管理系统,使我养成了对编程的兴趣,在当时更侧重于实践,也就是把 MySQL 用好,现在想了下当时也可能没有用好,因为 MySQL 有很多优化的理论和哲学当时没有接触到。最近准备深入学习了一下,这篇文章是这个系列的第一篇,先简单聊下数据库。
引言
MongoDB 是一种非关系型数据库(NoSQL, Not only SQL),相较于关系型数据库(RDBMS)使用较简单,没有冗杂的数据类型约束。
虽然 MongoDB 是 NoSQL,但它里面也有一些与关系型数据库对应的“名词”.
RDBMS
NoSQL
表/关系(table/rela)
集合(collection)
元组/记录
文档(document)
列/字段(column/field)
字段(field)
主键(primary key)
_id(mongodb 默认)
数据库中的数据是撑起应用系统的重中之重,定期备份数据库中的数据是很有必要的。定期备份数据是为了防止数据库出现意外情况,如被病毒入侵造成删库,勒索等。
实现是使用 mysql 的 mysqldump
备份命令, 利用 cron 配合脚本实现定期备份。