Sql 简明教程

SQL - UPDATE Query

The SQL UPDATE Statement

SQL UPDATE 语句用来修改表中的现有记录。此语句是数据操作语言 (DML) 的一部分,因为它仅修改表中的数据而不影响表的结构。

要筛选需要修改的记录,可以在 UPDATE 语句中使用 WHERE 子句。通过使用 WHERE 子句,你可以更新单行或多行。

SQL UPDATE 语句在修改表中每一行的同时使用对它们的锁,且一旦修改了行,就会释放该锁。因此,它可以使用单个查询来修改单行或多行。

Syntax

带 WHERE 子句的 SQL UPDATE 语句的基本语法如下:

UPDATE table_name
SET column1 = value1, column2 = value2,..., columnN = valueN
WHERE [condition];

您可以使用 AND 或 OR 运算符组合 N 个条件。

Example

假设已使用如下所示的 CREATE TABLE 语句创建了一个名为 CUSTOMERS 的表:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

现在,使用如下所示的 INSERT 语句向此表中插入值:

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

该表将被创建为:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

Kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

6

Komal

22

Hyderabad

4500.00

7

Muffy

24

Indore

10000.00

以下查询将更新表中 ID 号为 6 的客户的 ADDRESS。

UPDATE CUSTOMERS SET ADDRESS = 'Pune' WHERE ID = 6;

Output

该查询生成以下输出:

Query OK, 1 row affected (0.13 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Verification

要验证表的记录是否已修改,请使用下面的 SELECT 查询:

SELECT * FROM CUSTOMERS WHERE ID=6;

现在,CUSTOMERS 表将拥有以下记录:

ID

NAME

AGE

ADDRESS

SALARY

6

Komal

22

Pune

4500.00

Update Multiple ROWS and COLUMNS

使用 SQL UPDATE 语句,还可以更新表中的多行和多列。要更新多行,请在 WHERE 子句中指定条件,以使其仅满足必需的行。

然而,要更新多列,请对需要更新的所有列设置新值。在这种情况下,使用 WHERE 子句会限定表的记录,而不用该子句会更改这些列中的所有值。

Syntax

以下是如何更新多行和多列的语法:

UPDATE table_name
SET column_name1 = new_value, column_name2 = new_value...
WHERE condition(s)

Example

如果你想修改 CUSTOMERS 表中的所有 AGE 和 SALARY 列值,则无需使用 WHERE 子句,因为 UPDATE 查询就已足够。以下查询将所有客户的年龄增加 5 岁,并且将 3000 添加到所有 salary 值:

UPDATE CUSTOMERS SET AGE = AGE+5, SALARY = SALARY+3000;

Output

该查询生成以下输出:

Query OK, 7 rows affected (0.12 sec)
Rows matched: 7  Changed: 7  Warnings: 0

Verification

要验证表的记录是否已修改,请使用下面的 SELECT 查询:

SELECT * FROM CUSTOMERS;

现在,CUSTOMERS 表将拥有以下记录:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

37

Ahmedabad

5000.00

2

Khilan

30

Delhi

4500.00

3

Kaushik

28

Kota

5000.00

4

Chaitali

30

Mumbai

9500.00

5

Hardik

32

Bhopal

11500.00

6

Komal

27

Pune

7500.00

7

Muffy

29

Indore

13000.00

Example

但是,如果你想修改 CUSTOMERS 表中所选记录的 ADDRESS 和 SALARY 列,你需要指定一个条件来使用 WHERE 子句筛选待修改记录,如下面的查询所示:

UPDATE CUSTOMERS
SET ADDRESS = 'Pune', SALARY = 1000.00
WHERE NAME = 'Ramesh';

Output

此查询生成以下输出:

Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Verification

要验证表的记录是否已修改,请使用下面的 SELECT 查询:

SELECT * FROM CUSTOMERS WHERE NAME = 'Ramesh';

现在,CUSTOMERS 表将拥有以下记录:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

37

Pune

1000.00