MySQL 也替换了master、slave

MySQL用source替代master。
指主服务器。
异步复制架构里。
source不决定角色。
用primary不合适。
尤其复杂拓扑。
如双向复制。

MySQL用replica替代slave。
指从服务器。
保持术语一致。
replica描述复制角色。

MySQL用blocklist替代blacklist。
用allowlist替代whitelist。
指访问控制列表。
blocklist和allowlist更中立。

社会因素影响。
响应"BlackLivesMatter"。
技术上更准确描述功能。

数据库行业会跟进。
其他系统可能也替换类似术语。

MySQL 和 MongoDB 的区别

上周看这个数据库对比的。

MySQL是关系型数据库。
用表格存数据。
像Excel那种。
要遵守ACID规则。
就是数据不能乱。
适合做金融那种。
2 02 3 年Oracle在维护它。

MongoDB是非关系型数据库。
用文档存数据。
像JSON格式。
结构可以随便变。
适合快速开发。
2 02 3 年MongoDB Inc开发的。

查询语言MySQL用SQL。
写起来复杂。
MongoDB不用SQL。
用特定的方法查。
2 02 2 年我试过写SQL比MongoDB慢。

扩展性MySQL比较难扩。
要加好机器。
MongoDB可以自动分摊到很多机器上。
2 02 3 年MongoDB说一个集群能上亿条记录。

我那个朋友做电商的。
他说MySQL好。
做内容管理的。
都说MongoDB方便。

算了。
你看着办。

mysql如何区分schema和database

那天在改一个老项目的数据库结构,看到代码里 CREATE DATABASE 和 CREATE SCHEMA 搞混了,结果运行报错。
查了半天,原来MySQL里这两者根本不是一回事。
不过话说回来,这事儿还挺有意思的。

先说个具体事。
我有个客户用的系统,数据库管理员老爱在脚本里写 DROP SCHEMA,结果每次执行都提示语法错误。
后来发现,他那个版本MySQL根本不支持 DROP SCHEMA 命令。
查资料才知道,MySQL为了兼容SQL标准,把 SCHEMA 当成了 DATABASE 的别名。
2 02 0年那会儿MySQL 8 .0刚出,还特别官方地说明过这事。

你看这个例子特别清楚:CREATE DATABASE test; 和 CREATE SCHEMA test; 在MySQL里完全一样都创建了一个新数据库。
但如果你用 DROP DATABASE test; 和 DROP SCHEMA test;,MySQL都会先报错说找不到命令,实际上它们都是等价操作。
这就像中文里"电脑"和"计算机"一样,指的都是那台机器,但有人偏要分得清清楚楚。

最搞笑的是图形化工具。
像MySQL Workbench,默认生成SQL语句时用 SCHEMA,但实际数据库里创建的却是 DATABASE。
我有个同事非得让工具用 DATABASE,结果导出脚本到处都是 CREATE DATABASE,最后执行时直接崩溃。

等等,还有个事。
在Linux系统里,数据库路径通常在 /var/lib/mysql/ 下,目录名肯定是按 DATABASE 命名的。
但有些系统管理员喜欢用 SCHEMA 来命名备份文件,比如 test_backup.sql,结果把 SCHEMA 当成了文件名。
这种时候MySQL根本不认识这个命令,因为它只管物理路径,不管你叫它啥名字。

突然想到,可能这就是MySQL的设计哲学吧。
它既想兼容标准SQL,又想照顾传统习惯,结果把 SCHEMA 和 DATABASE 搞成了"一体两面"。
就像我那个客户的系统,数据库管理员非要区分这两个词,结果把SQL标准搞成了"反人类设计"。

不过话说回来,现在年轻开发都不太在意这些细节了。
他们只管用 CREATE DATABASE,连SQL标准都没读过。
但话说回来,如果MySQL真把 SCHEMA 当成独立命令,那数据库迁移时会不会更麻烦?

MySQL复习二

上周,我那个朋友问我MySQL复习二都包含了哪些内容,我就给他详细解释了一下。
MySQL函数这部分,他应该挺感兴趣的,数学函数、字符串函数和日期函数,都是处理数据时特别有用的工具。
比如,ABS(x)就能算出x的绝对值,AVG(age)能算出年龄的平均值,这对他分析数据挺有帮助的。

2 02 3 年,我刚开始学MySQL的时候,也是从这些基础函数开始。
像CEIL(x)和FLOOR(x)这样的函数,能处理一些简单的数学计算,比如把一个数值向上或向下取整。

我那个朋友听了之后,说:“哦,我之前用CONCAT(s1 ,s2 …sn)合并字符串的时候,没想到还有这么多函数可以用。

说到事务,这是数据库操作中的一个大概念。
事务得保证ACID原则,就是原子性、一致性、隔离性和持久性。
他问我:“那怎么开启一个事务呢?”我回答他:“StartTransaction,提交用CommitTransaction,回滚就是RollbackTransaction。

至于索引,我告诉他,这就像是给数据库的数据表加上了一个目录,能加快查找速度。
他说:“那怎么选择加在哪个字段上呢?”我回答:“一般加在经常作为查询条件的字段上。

他问:“那索引的类型有哪些?”我就给他列了主键索引、唯一索引、常规索引和全文索引,每种索引都有它适用的场景。

我那个朋友听得很认真,最后说:“嗯,我明白了,这些知识对我来说很重要,我得好好消化一下。
”我说:“那你看着办吧,慢慢来。