SQL - UPDATE 查询



SQL UPDATE 语句

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

要过滤需要修改的记录,可以使用 UPDATE 语句的 WHERE 子句。使用 WHERE 子句,您可以更新单行或多行。

由于它只与表的数据交互,因此需要谨慎使用 SQL UPDATE 语句。如果未正确选择要修改的行,则表中的所有行都将受到影响,并且正确的表数据将丢失或需要重新插入。

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

语法

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

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

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

示例

假设我们使用 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 姓名 年龄 地址 薪水
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 的客户的地址。

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

输出

该查询产生以下输出:

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

验证

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

SELECT * FROM CUSTOMERS WHERE ID=6;

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

ID 姓名 年龄 地址 薪水
6 Komal 22 Pune 4500.00

更新多行和多列

使用 SQL UPDATE 语句,还可以更新表中的多行和多列。要更新多行,请在 WHERE 子句中指定条件,以便只有所需的记录才能满足该条件。

但是,要更新多列,请将新值设置为需要更新的所有列。在这种情况下,使用 WHERE 子句将缩小表的记录范围,而不使用该子句将更改这些列中的所有值。

语法

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

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

示例

如果要修改 CUSTOMERS 表中的所有 AGE 和 SALARY 列值,则不需要使用 WHERE 子句,因为 UPDATE 查询就足够了。以下查询将所有客户的年龄增加 5 年,并将所有薪水值增加 3000:

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

输出

该查询产生以下输出:

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

验证

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

SELECT * FROM CUSTOMERS;

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

ID 姓名 年龄 地址 薪水
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

示例

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

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

输出

此查询产生以下输出:

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

验证

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

SELECT * FROM CUSTOMERS WHERE NAME = 'Ramesh';

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

ID 姓名 年龄 地址 薪水
1 Ramesh 37 Pune 1000.00
广告