1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-08-10 00:41:37 +08:00

Compare commits

...

3 Commits

Author SHA1 Message Date
Guide
1cca70a215 [docs update]添加NULL 和 '' 的区别是什么? 2023-07-20 23:11:57 +08:00
Guide
0638f92afa
Merge pull request #2083 from Guofuyinan/main
Docs(mysql-questions-01.md) fix typos
2023-07-20 22:33:47 +08:00
郭付一男
fabadf6955 Docs(mysql-questions-01.md) fix typos 2023-07-19 11:48:36 +08:00
2 changed files with 13 additions and 2 deletions

View File

@ -155,6 +155,17 @@ Timestamp 只需要使用 4 个字节的存储空间,但是 DateTime 需要耗
关于两者的详细对比,请参考我写的[MySQL 时间类型数据存储建议](./some-thoughts-on-database-storage-time.md)。
### NULL 和 '' 的区别是什么?
`NULL``''`(空字符串)是两个完全不一样的值,区别如下:
- `NULL` 代表一个不确定的值,就算是两个 `NULL`,它俩也不一定相等。例如,`SELECT NULL=NULL`的结果为 false但是在我们使用`DISTINCT`,`GROUP BY`,`ORDER BY`时,`NULL`又被认为是相等的。
- `''`的长度是 0是不占用空间的`NULL` 是需要占用空间的。
- `NULL` 会影响聚合函数的结果。例如,`SUM``AVG``MIN``MAX` 等聚合函数会忽略 `NULL` 值。 `COUNT` 的处理方式取决于参数的类型。如果参数是 `*`(`COUNT(*)`),则会统计所有的记录数,包括 `NULL` 值;如果参数是某个字段名(`COUNT(列名)`),则会忽略 `NULL` 值,只统计非空值的个数。
- 查询 `NULL` 值时,必须使用 `IS NULL``IS NOT NULLl` 来判断,而不能使用 =、!=、 <、> 之类的比较运算符。而`''`是可以使用这些比较运算符的。
看了上面的介绍之后相信你对另外一个高频面试题“为什么MySQL不建议使用NULL作为列默认值”也有了答案。
## MySQL 基础架构
> 建议配合 [SQL 语句在 MySQL 中的执行过程](./how-sql-executed-in-mysql.md) 这篇文章来理解 MySQL 基础架构。另外,“一个 SQL 语句在 MySQL 中的执行流程”也是面试中比较常问的一个问题。
@ -452,7 +463,7 @@ COMMIT;
一个事务读取数据并且对数据进行了修改,这个修改对其他事务来说是可见的,即使当前事务没有提交。这时另外一个事务读取了这个还未提交的数据,但第一个事务突然回滚,导致数据并没有被提交到数据库,那第二个事务读取到的就是脏数据,这也就是脏读的由来。
例如:事务 1 读取某表中的数据 A=20事务 1 修改 A=A-1事务 2 读取到 A = 19,事务 1 回滚导致对 A 的修改并提交到数据库, A 的值还是 20。
例如:事务 1 读取某表中的数据 A=20事务 1 修改 A=A-1事务 2 读取到 A = 19,事务 1 回滚导致对 A 的修改并提交到数据库, A 的值还是 20。
![脏读](./images/concurrency-consistency-issues-dirty-reading.png)

View File

@ -29,7 +29,7 @@ Java 集合框架如下图所示:
### 说说 List, Set, Queue, Map 四者的区别?
- `List`(对付顺序的好帮手): 存储的元素是有序的、可重复的。
- `Set`(注重独一无二的性质): 存储的元素是无序的、不可重复的。
- `Set`(注重独一无二的性质): 存储的元素不可重复的。
- `Queue`(实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。
- `Map`(用 key 来搜索的专家): 使用键值对key-value存储类似于数学上的函数 y=f(x)"x" 代表 key"y" 代表 valuekey 是无序的、不可重复的value 是无序的、可重复的,每个键最多映射到一个值。