一、MySQL 更新语句
MySQL 更新语句用于修改表中的数据,可以根据需要修改一行或多行数据,具体语法如下:
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
其中 table_name 表示要更新数据的表名称,field1、field2 表示要更新的字段名称,new-value1、new-value2 表示要更新的数据, WHERE Clause 则表示筛选条件,限定更新哪些数据行,如果不加条件,则会更新表中的所有数据。
通过以下示例可以更好地理解 MySQL 更新语句:
UPDATE users SET age=25 WHERE name='Tom';
UPDATE users SET age=age+1 WHERE gender='male';
第一个示例中将名字为 Tom 的用户的年龄修改为 25,第二个示例中将所有男性用户的年龄加 1。
二、MySQL 连表更新
在实际开发中,可能需要更新多个表中的数据,这时可以使用 MySQL 连表更新语句,例如:
UPDATE table1, table2
SET table1.column = new_value1,
table2.column = new_value2
WHERE table1.join_column = table2.join_column;
其中,table1 、table2 表示需要更新的两个表,join_column 表示它们的连接列,new_value1、new_value2 表示新的值。
以下示例演示了如何使用 MySQL 连表更新语句:
UPDATE users, orders
SET users.age = 30, orders.status = 2
WHERE users.id = orders.user_id AND users.name='Tom';
上述示例中,当用户 Tom 的订单发生变化时,可以通过更新 users 表中的数据来反映订单状态的变化。
三、MySQL 更新数据
MySQL 更新数据的方式有两种:
1. 直接更新,通过 SET 关键字设置新值。
2. 直接复制,通过 SELECT 子句设置新值。
具体语法如下所示:
UPDATE table_name
SET column_name1 = new_value1,
column_name2 = (SELECT expression FROM table_name WHERE condition),
[WHERE];
以下示例演示了如何使用 MySQL 更新数据:
UPDATE accounts SET balance = 1000 WHERE account_number = 123;
UPDATE employees SET salary = (SELECT AVG(salary) FROM employees WHERE department_id = 2) WHERE department_id = 2;
第一个示例中将账户号为 123 的账户的余额更新为 1000,第二个示例中将部门 2 中员工的薪水更新为该部门的平均工资。
四、MySQL 联表更新
MySQL 联表更新语句是一种特殊的更新语句,它允许我们更新与某个记录有关联的所有表,具体语法如下所示:
UPDATE table_name1 INNER JOIN table_name2 ON table_name1.column_name = table_name2.column_name
SET table_name1.column_name = new_value1,
table_name2.column_name = new_value2
[WHERE];
以下示例演示了如何使用 MySQL 联表更新语句:
UPDATE customers
INNER JOIN orders ON customers.customer_id = orders.customer_id
SET customers.last_order = orders.order_date
WHERE orders.order_status = 'shipped';
上述示例中,当订单发生变化时,将顾客的最后一张订单更新为新订单的订单日期。
五、MySQL 版本更新
MySQL 版本更新可以用于在更新数据时记录修改时间戳或更新版本,具体语法如下所示:
UPDATE table_name SET column_name = new_value,
version = version + 1
WHERE primary_key = key_value AND version = current_version;
其中,primary_key 表示主键,key_value 表示记录唯一标识,version 表示版本号,new_value 表示新的数据。
以下示例演示了如何使用 MySQL 版本更新:
UPDATE accounts SET balance = balance - 100, version = version + 1 WHERE account_number = 123 AND version = 3;
上述示例中,将账户号为 123 的账户余额减去 100,同时将版本号加 1。
六、MySQL 更新视图
MySQL 视图是一种虚拟表,它是由一个或多个基表的行或列组合而成的,我们可以使用 MySQL 更新视图来修改视图中的数据,具体语法如下所示:
UPDATE view_name SET column_name = new_value WHERE condition;
其中,view_name 表示要更新的视图名,column_name 表示要更新的列名,new_value 表示新值,condition 是更新的条件。
以下示例演示了如何使用 MySQL 更新视图:
CREATE VIEW v_customers_orders AS
SELECT customers.customer_id,
orders.order_id,
orders.order_total
FROM customers
JOIN orders ON customers.customer_id = orders.customer_id;
UPDATE v_customers_orders SET order_total = 500 WHERE customer_id = 100;
上述示例中,先创建了一个名为 v_customers_orders 的视图,然后更新了该视图中客户 100 的订单总额为 500。
七、MySQL 批量更新
MySQL 批量更新语句可以同时更新多个记录,从而提高更新效率,具体语法如下所示:
UPDATE table_name
SET column_name1 = CASE
WHEN condition1 THEN new_value1_1
WHEN condition2 THEN new_value1_2
...
ELSE column_name1
END,
column_name2 = CASE
WHEN condition1 THEN new_value2_1
WHEN condition2 THEN new_value2_2
...
ELSE column_name2
END
[WHERE condition];
其中,table_name 表示要更新的表名,column_name1、column_name2 表示要更新的列名,new_value1_1、new_value1_2 表示新值, condition1、condition2 是条件,ELSE 表示默认情况下保持原来的值。
以下示例演示了如何使用 MySQL 批量更新:
UPDATE employees SET salary = CASE
WHEN department_id = 1 THEN salary * 1.05
WHEN department_id = 2 THEN salary * 1.08
ELSE salary
END,
commission_pct = CASE
WHEN department_id = 1 THEN commission_pct * 1.2
WHEN department_id = 2 THEN commission_pct * 1.5
ELSE commission_pct
END
WHERE hire_date < '2000-01-01';
上述示例中,将 2000 年以前入职的员工的薪水和佣金按部门分别进行不同的加成。