mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-08-01 16:28:03 +08:00
commit
761e804d8e
@ -185,7 +185,7 @@ InnoDB 是一种索引组织表:数据的存储的逻辑顺序和索引的顺
|
|||||||
|
|
||||||
InnoDB 是按照主键索引的顺序来组织表的
|
InnoDB 是按照主键索引的顺序来组织表的
|
||||||
|
|
||||||
- 不要使用更新频繁的列作为主键,不适用多列主键(相当于联合索引)
|
- 不要使用更新频繁的列作为主键,不使用多列主键(相当于联合索引)
|
||||||
- 不要使用 UUID,MD5,HASH,字符串列作为主键(无法保证数据的顺序增长)
|
- 不要使用 UUID,MD5,HASH,字符串列作为主键(无法保证数据的顺序增长)
|
||||||
- 主键建议使用自增 ID 值
|
- 主键建议使用自增 ID 值
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ head:
|
|||||||
|
|
||||||
### 什么是关系型数据库?
|
### 什么是关系型数据库?
|
||||||
|
|
||||||
顾名思义,关系型数据库(RDBMS,Relational Database Management System)就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多)。
|
顾名思义,关系型数据库(RDB,Relational Database)就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多)。
|
||||||
|
|
||||||
关系型数据库中,我们的数据都被存放在了各种表中(比如用户表),表中的每一行就存放着一条数据(比如一个用户的信息)。
|
关系型数据库中,我们的数据都被存放在了各种表中(比如用户表),表中的每一行就存放着一条数据(比如一个用户的信息)。
|
||||||
|
|
||||||
@ -609,8 +609,10 @@ InnoDB 行锁是通过对索引数据页上的记录加锁实现的,MySQL Inno
|
|||||||
由于 MVCC 的存在,对于一般的 `SELECT` 语句,InnoDB 不会加任何锁。不过, 你可以通过以下语句显式加共享锁或排他锁。
|
由于 MVCC 的存在,对于一般的 `SELECT` 语句,InnoDB 不会加任何锁。不过, 你可以通过以下语句显式加共享锁或排他锁。
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
# 共享锁
|
# 共享锁 可以在 MySQL 5.7 和 MySQL 8.0 中使用
|
||||||
SELECT ... LOCK IN SHARE MODE;
|
SELECT ... LOCK IN SHARE MODE;
|
||||||
|
# 共享锁 可以在 MySQL 8.0 中使用
|
||||||
|
SELECT ... FOR SHARE;
|
||||||
# 排他锁
|
# 排他锁
|
||||||
SELECT ... FOR UPDATE;
|
SELECT ... FOR UPDATE;
|
||||||
```
|
```
|
||||||
@ -650,7 +652,10 @@ SELECT ... FOR UPDATE;
|
|||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT ... FOR UPDATE
|
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
|
SELECT...FOR UPDATE
|
||||||
# 对读的记录加一个S锁
|
# 对读的记录加一个S锁
|
||||||
SELECT...LOCK IN SHARE MODE
|
SELECT...LOCK IN SHARE MODE
|
||||||
|
# 对读的记录加一个S锁
|
||||||
|
SELECT...FOR SHARE
|
||||||
# 对修改的记录加一个X锁
|
# 对修改的记录加一个X锁
|
||||||
INSERT...
|
INSERT...
|
||||||
UPDATE...
|
UPDATE...
|
||||||
|
@ -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
|
```sql
|
||||||
SELECT prod_name, prod_price
|
SELECT prod_name, prod_price
|
||||||
FROM Products
|
FROM Products
|
||||||
WHERE prod_price BETWEEN 3 AND 6
|
WHERE prod_price >= 3 and prod_price <= 6
|
||||||
ORDER BY prod_price
|
ORDER BY prod_price
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -1337,7 +1337,7 @@ ORDER BY c.cust_name,o.order_num
|
|||||||
|
|
||||||
这是错误的!只对 `cust_name` 进行聚类确实符合题意,但是不符合 `GROUP BY` 的语法。
|
这是错误的!只对 `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 中的字段要么都聚类,要么都不聚类**
|
> **一句话,select 中的字段要么都聚类,要么都不聚类**
|
||||||
|
|
||||||
|
@ -556,7 +556,7 @@ SELECT column_name(s) FROM table2;
|
|||||||
| `LEFT()`、`RIGHT()` | 左边或者右边的字符 |
|
| `LEFT()`、`RIGHT()` | 左边或者右边的字符 |
|
||||||
| `LOWER()`、`UPPER()` | 转换为小写或者大写 |
|
| `LOWER()`、`UPPER()` | 转换为小写或者大写 |
|
||||||
| `LTRIM()`、`RTRIM()` | 去除左边或者右边的空格 |
|
| `LTRIM()`、`RTRIM()` | 去除左边或者右边的空格 |
|
||||||
| `LENGTH()` | 长度 |
|
| `LENGTH()` | 长度,以字节为单位 |
|
||||||
| `SOUNDEX()` | 转换为语音值 |
|
| `SOUNDEX()` | 转换为语音值 |
|
||||||
|
|
||||||
其中, **`SOUNDEX()`** 可以将一个字符串转换为描述其语音表示的字母数字模式。
|
其中, **`SOUNDEX()`** 可以将一个字符串转换为描述其语音表示的字母数字模式。
|
||||||
|
Loading…
x
Reference in New Issue
Block a user