01 PREFACE
前言.
时间过得好快啊,转眼间,这已经是公众号的第30篇文章了,回想一下,从开始写文章到现在,还是有一些成就感的
,没想到坚持了这么久。为了方便大家阅读,这篇文章就为大家梳理一下前面文章的目录导航。
02 CONTENTS
文章目录导航.
一篇简短的自我介绍:
数据库的前世今生: 《初识数据库》 数据库体系结构浅谈(Oracle & MySQL): 《浅谈数据库体系》 初次体验MySQL: 《MySQL之初使用》
MySQL数据类型:
MySQL字符编码:
MySQL字段属性:
MySQL安全更新参数——safe_updates:
MySQL对自增“极值”的处理:
MySQL数据定义语言(DDL,Data Definition Language):
MySQL数据操作语言(DML,Data Manipulation Language):
- 数据查询语言(DQL,Data Query Language):
检索数据(SELECT)、排序检索数据(ORDER BY):
过滤数据(WHERE)、数据过滤(AND、OR、IN、NOT):
用通配符(%、_)、正则表达式过滤数据(REGEXP):
创建计算字段(CONCAT、TRIM、+、-、×、÷)、使用数据处理函数(DATE等时间函数、UPPER等文本处理函数、ABS等数学函数):
汇总数据(COUNT、SUM等聚合函数)、分组数据(GROUP BY):
使用子查询(嵌套在其他查询中的查询)、连结表(JOIN):
创建高级联结(自联结、自然联结、外部联结)、组合查询(UNION、UNION ALL)、全文本搜索(Match):
- MySQL InnoDB Engine:
InnoDB Buffer Pool(InnoDB缓冲池):
Change Buffer(写缓冲):
Adaptive Hash Index(自适应哈希索引):
《MySQL各种“Buffer”之Adaptive Hash Index》
Doublewrite Buffer(双写缓冲区):
Log Buffer(Redo日志缓冲区):
《MySQL各种“Buffer”之Log Buffer》
- MySQL Server:
Binlog Cache(Binlog缓存)、Sort Buffer(排序缓冲区)、Join Buffer(链接缓冲区)等:
在线DDL变更工具——gh-ost: 《MySQL工具之gh-ost》
MySQL原生Online DDL:
在线DDL变更工具——gh-ost原理解析:
工作生活:
分享一个Redis清理Keys、一个mysqladmin查看MySQL的运行状态脚本:
03 SUPPLEMENT
补充一个知识点.
一听这个问题,确实感觉被问住了,我们知道VARCHAR类型是变长存储,每次定义表字段的时候,默认都是指定了字符长度,还真没有试过不指定字符长度会怎么样。
于是有了下面的测试:
场景一:VARCHER
CREATE TABLE `test` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;

结果:报错。
场景二:VARCHAR()
CREATE TABLE `test` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR() DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;

结果:报错。
场景三:VARCHAR(0)
CREATE TABLE `test` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(0) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;

接下来,我们再看一下数据是否可以正常插入:
INSERT INTO `test` VALUES(NULL,'a');INSERT INTO `test` VALUES(NULL,NULL);INSERT INTO `test` VALUES(NULL,'');INSERT INTO `test` VALUES(NULL,' ');INSERT INTO `test` VALUES(NULL,' ');

结果:NULL、''可以正常插入,' '、' '显示插入成功,但有警告。
我们在插入的数据中有'空格',所以我们在用LENGTH函数看一下:
SELECT * FROM `test`;SELECT LENGTH(name) FROM `test` WHERE id = 3;SELECT LENGTH(name) FROM `test` WHERE id = 4;

结果:正如警告中所描述的,' '、' '是没有被插入进去的,Data被truncated了。
经过上面的测试,我们得到以下结论:
1、VARCHAR类型在创建表时可以指定成VARCHAR(0),但是VARCHAR、VARCHAR()是不行的。
2、空格也会占用数据长度,当超过字段定义的VARCHAR(0) → 字符长度为0时,MySQL会删除超长的数据。
所以,建议大家在使用VARCHAR数据类型时,还是最好定义长度使用,以免发生数据丢失的情况。
04 END
结语.
在前面的文章中,留下了很多出现过但没有详解的知识点,比如Percona开源的MySQL在线DDL变更工具pt-osc、Multi-Range Read(MRR)优化特性、驱动表、被驱动表、MySQL物理&逻辑备份工具等,后续的文章会慢慢的将没有详解的部分补回来。

end




