Skip to content

Commit

Permalink
update sql docs
Browse files Browse the repository at this point in the history
  • Loading branch information
fengzhao committed Jan 6, 2025
1 parent 1da6151 commit f27bc71
Showing 1 changed file with 34 additions and 0 deletions.
34 changes: 34 additions & 0 deletions docs/basic/4.sql.md
Original file line number Diff line number Diff line change
Expand Up @@ -681,6 +681,40 @@ SET salary = salary + 1000,
WHERE emp_name = '赵云';
```

MySQL 数据库中 UPDATE 语句和 SQL 标准(以及其他数据库)实现上的一个差异。如果我们没有注意到这个问题,很可能会导致意料之外的结果。

```SQL

CREATE TABLE t1(
id int,
col1 int,
col2 int
);

INSERT INTO t1 VALUES (1, 1, 1);

SELECT * FROM t1;
id|col1|col2|
--|----|----|
1| 1| 1|



UPDATE t1
SET col1 = col1 + 1,
col2 = col1
WHERE id = 1;

SELECT col1, col2
FROM t1;
```

对于 SQL 标准以及其他数据库的实现,结果分别为 2 和 1。但是对于 MySQL,结果分别为 2 和 2

对于 MySQL 而言,如果 UPDATE 语句在表达式中(col2 = col1)使用了前面被更新的字段(col1),将会使用该字段被更新后的值(2)而不是原来的值(1)。

一般在编写 UPDATE 语句时,我们不需要关心多个字段的更新顺序。但是由于 MySQL 实现的问题,我们需要注意它们的语法顺序。

#### 关联更新


Expand Down

0 comments on commit f27bc71

Please sign in to comment.