通过将一列设置为MySql中其他两列的总和来更新表中的每一行

通过将一列设置为MySql中其他两列的总和来更新表中的每一行,mysql,Mysql,假设我在mysql中有下表: 表:高度存储 |----|--------|--------|--------------| | id | height | buffer | total_height | |----|--------|--------|--------------| | 0 | 120 | 100 | | | 1 | 180 | 120 | | | ...

假设我在mysql中有下表:

表:
高度存储

|----|--------|--------|--------------|
| id | height | buffer | total_height |
|----|--------|--------|--------------|
| 0  | 120    | 100    |              |
| 1  | 180    | 120    |              |
| ...                                 |
|----|--------|--------|--------------|
我试图找到一种方法,通过将
total\u height
设置为
height+buffer
的值来运行一个查询,该查询将更新表中的每一行

在运行查询之后,它应该是这样结束的

|----|--------|--------|--------------|
| id | height | buffer | total_height |
|----|--------|--------|--------------|
| 0  | 120    | 100    | 220          |
| 1  | 180    | 120    | 300          |
| ...                                 |
|----|--------|--------|--------------|

您只需要使用两个元素的总和进行更新:

UPDATE height_storage
set total_height=height+buffer
但您可能需要在使用查询之前关闭安全模式,因为您没有使用WHERE子句,也没有使用密钥:

SET SQL_SAFE_UPDATES = 0;
UPDATE height_storage
set total_height=height+buffer

为什么要存储冗余数据。您的MySQL版本是什么?显示您尝试过的查询far@PaulSpiegel这是一个例子,实际的数据库比这个复杂一点。MySql服务器版本是5.7.21在5.7中你可以定义一个我不知道为什么会被否决的版本,这是正确的答案。但是,我要添加它,而不是使用
setsql\u SAFE\u UPDATES=0
您应该在WHERE中使用catch-all
。比如
其中height>-1和buffer>-1
(假设catch-all适用于您的桌子)。