目录
博主用的是mysql8 DBMS,附上示例资料:
百度网盘链接: https://pan.baidu.com/s/1XaWi3Y7hpXbs_uHq2cPI6Q
提取码: fpnx
1、更新表中数据
更新数据需要确定三个部分:更新的表、列名和新值、需要过滤的行
-
UPDATE语法:
-- UPDATE语法
UPDATE [表名]
SET [列名] = [新值] -- 多个列之间用,分隔。在更新多个列时,只需要使用一条 SET 命令
WHERE [过滤条件];
-
更新表中的所有行特定列:(不建议运行)
-- 使用update来删除列数据,只需要列值 = NULL即可,NULL表示没有值
-- where过滤时使用的是IS NULL
UPDATE Customers
SET cust_email = NULL
-
更新表中的特定行特定列:
-- 更改多个列值,只需要在列名+值之间以逗号分隔
-- 对于表的操作,都可以叫做查询,使用UPDATE时也会读取表的内容以进行过滤等操作
UPDATE customers
SET cust_email = 'kim@thetoystore.com',
cust_country = 'China'
WHERE cust_id = '10005';
-
SET支持子查询、计算字段等方式
在update中使用子查询,使用子查询检索出的数据更新列数据
表结构:
employees表:
employee_id:员工编号(主键)
salary:员工工资
salary_adjustments表:
employee_id:员工编号
adjustment_amount:工资调整金额
目标是根据salary_adjustments表中的调整金额更新employees表中的员工工资。
UPDATE employees
SET salary = salary + (
SELECT adjustment_amount
FROM salary_adjustments sa
WHERE sa.employee_id = employees.employee_id
)
WHERE EXISTS ( -- 可以使用尝试IN
SELECT 1
FROM salary_adjustments sa
WHERE sa.employee_id = employees.employee_id
);
2、删除表中数据
-
从表中删除特定的行:
-- DELETE 删除表中的行数据,尽量加上FROM,保持可移植性
DELETE FROM Customers
WHERE cust_id = '1000000006';
-
从表中删除所有行:
-- DELETE 删除表中的行数据,尽量加上FROM,保持可移植性
DELETE FROM Customers;
DELETE FROM 要求指定从中删除数据的表名,WHERE 子句过滤要删除的行。
提示:更快的删除
如果想从表中删除所有行,不要使用 DELETE。可使用 TRUNCATE TABLE语句,它完成相同的工作,而速度更快(因为不记录数据的变动)
TRUNCATE TABLE orders_new;
3、更新和删除的指导原则
- 除非对表中所有行进行操作,否则一定要带上WHERE子句
- 每一个表要指定主键
- UPDATE和DELETE前,先用SELECT看看数据是否符合预期
- 使用强制实施引用完整性的数据库(比如MySQL不允许删除键与其他表有关联的行
4、小结
- UPDATE的语法:update + set + where
- DELETE的语法:delete from + where
- TRUNCATE清空表:truncate table
- 进行更新和删除操作前,先使用select查看数据过滤是否达到要求;尽量加上where。