diff --git a/docs/database/mysql/mysql-high-performance-optimization-specification-recommendations.md b/docs/database/mysql/mysql-high-performance-optimization-specification-recommendations.md index 584f3938..cd0079be 100644 --- a/docs/database/mysql/mysql-high-performance-optimization-specification-recommendations.md +++ b/docs/database/mysql/mysql-high-performance-optimization-specification-recommendations.md @@ -185,7 +185,7 @@ InnoDB 是一种索引组织表:数据的存储的逻辑顺序和索引的顺 InnoDB 是按照主键索引的顺序来组织表的 -- 不要使用更新频繁的列作为主键,不适用多列主键(相当于联合索引) +- 不要使用更新频繁的列作为主键,不使用多列主键(相当于联合索引) - 不要使用 UUID,MD5,HASH,字符串列作为主键(无法保证数据的顺序增长) - 主键建议使用自增 ID 值 diff --git a/docs/database/mysql/mysql-questions-01.md b/docs/database/mysql/mysql-questions-01.md index 26f10118..de4a63da 100644 --- a/docs/database/mysql/mysql-questions-01.md +++ b/docs/database/mysql/mysql-questions-01.md @@ -19,7 +19,7 @@ head: ### 什么是关系型数据库? -顾名思义,关系型数据库(RDBMS,Relational Database Management System)就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多)。 +顾名思义,关系型数据库(RDB,Relational Database)就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多)。 关系型数据库中,我们的数据都被存放在了各种表中(比如用户表),表中的每一行就存放着一条数据(比如一个用户的信息)。 @@ -609,8 +609,10 @@ InnoDB 行锁是通过对索引数据页上的记录加锁实现的,MySQL Inno 由于 MVCC 的存在,对于一般的 `SELECT` 语句,InnoDB 不会加任何锁。不过, 你可以通过以下语句显式加共享锁或排他锁。 ```sql -# 共享锁 +# 共享锁 可以在 MySQL 5.7 和 MySQL 8.0 中使用 SELECT ... LOCK IN SHARE MODE; +# 共享锁 可以在 MySQL 8.0 中使用 +SELECT ... FOR SHARE; # 排他锁 SELECT ... FOR UPDATE; ``` @@ -650,7 +652,10 @@ SELECT ... FOR UPDATE; ```sql SELECT ... FOR UPDATE -SELECT ... LOCK IN SHARE MODE +# 共享锁 可以在 MySQL 5.7 和 MySQL 8.0 中使用 +SELECT ... LOCK IN SHARE MODE; +# 共享锁 可以在 MySQL 8.0 中使用 +SELECT ... FOR SHARE; ``` 快照即记录的历史版本,每行记录可能存在多个历史版本(多版本技术)。 @@ -673,6 +678,8 @@ SELECT ... LOCK IN SHARE MODE SELECT...FOR UPDATE # 对读的记录加一个S锁 SELECT...LOCK IN SHARE MODE +# 对读的记录加一个S锁 +SELECT...FOR SHARE # 对修改的记录加一个X锁 INSERT... UPDATE... diff --git a/docs/database/sql/sql-questions-01.md b/docs/database/sql/sql-questions-01.md index 16c5443f..77868bef 100644 --- a/docs/database/sql/sql-questions-01.md +++ b/docs/database/sql/sql-questions-01.md @@ -192,7 +192,7 @@ ORDER BY vend_name DESC | 运算符 | 描述 | | :------ | :--------------------------------------------------------- | | = | 等于 | -| <> | 不等于。**注释:**在 SQL 的一些版本中,该操作符可被写成 != | +| <> | 不等于。 **注释:** 在 SQL 的一些版本中,该操作符可被写成 != | | > | 大于 | | < | 小于 | | >= | 大于等于 | @@ -358,7 +358,7 @@ WHERE prod_id IN ('BR01', 'BR02', 'BR03') AND quantity >= 100 ```sql SELECT prod_name, prod_price FROM Products -WHERE prod_price BETWEEN 3 AND 6 +WHERE prod_price >= 3 and prod_price <= 6 ORDER BY prod_price ``` @@ -1337,7 +1337,7 @@ ORDER BY c.cust_name,o.order_num 这是错误的!只对 `cust_name` 进行聚类确实符合题意,但是不符合 `GROUP BY` 的语法。 -select 语句中,如果没有 `GROUP BY` 语句,那么 `cust_name`、`order_num` 会返回若干个值,而 `sum(quantity _ item_price)` 只返回一个值,通过 `group by` `cust_name` 可以让 `cust_name` 和 `sum(quantity _ item_price)` 一一对应起来,或者说**聚类**,所以同样的,也要对 `order_num` 进行聚类。 +select 语句中,如果没有 `GROUP BY` 语句,那么 `cust_name`、`order_num` 会返回若干个值,而 `sum(quantity * item_price)` 只返回一个值,通过 `group by` `cust_name` 可以让 `cust_name` 和 `sum(quantity * item_price)` 一一对应起来,或者说**聚类**,所以同样的,也要对 `order_num` 进行聚类。 > **一句话,select 中的字段要么都聚类,要么都不聚类** diff --git a/docs/database/sql/sql-syntax-summary.md b/docs/database/sql/sql-syntax-summary.md index 6879abcd..12b4efde 100644 --- a/docs/database/sql/sql-syntax-summary.md +++ b/docs/database/sql/sql-syntax-summary.md @@ -556,7 +556,7 @@ SELECT column_name(s) FROM table2; | `LEFT()`、`RIGHT()` | 左边或者右边的字符 | | `LOWER()`、`UPPER()` | 转换为小写或者大写 | | `LTRIM()`、`RTRIM()` | 去除左边或者右边的空格 | -| `LENGTH()` | 长度 | +| `LENGTH()` | 长度,以字节为单位 | | `SOUNDEX()` | 转换为语音值 | 其中, **`SOUNDEX()`** 可以将一个字符串转换为描述其语音表示的字母数字模式。