【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用

openLooKeng | Oracle update和delete支持简介及实现 Oracle update和delete是openLooKeng在Oracle connector上提供的对Oracle数据源进行更新和删除操作的特性,此特性除实现对Oracle数据源update和delete操作的直接支持,还提供了适配开发接口,基于这些接口可以开发某些数据源的update和delete操作。 功能介绍 update和delete操作,先通过查询操作获取到满足条件的行,这些行每行有一个唯一的rowid的值来标识,然后对行数据进行update和delete操作,对于delete操作还提供额外 阅读详情
UPDATE 和 DELETE 操作的正确使用

UPDATE 和 DELETE 是 Oracle 11g 中用于修改和删除表中数据的重要 SQL 语句。在操作时,需特别注意数据筛选条件的准确性,以避免意外更改或删除数据。本文将详细介绍这两种语句的用法、注意事项及相关案例。


一、UPDATE 的基本用法

UPDATE 用于更新表中的现有数据,可以更新单行或多行记录,需结合 WHERE 子句指定目标记录。如果不加 WHERE,将更新表中的所有记录。

1. 基本语法
UPDATE 表名
SET 列名 = 新值 [, 列名 = 新值 ...]
[WHERE 条件];
2. 示例:更新单列数据

将员工编号为 101 的薪资调整为 8000:

UPDATE employees
SET salary = 8000
WHERE employee_id = 101;
3. 示例:更新多列数据

将编号为 102 的员工姓名和部门更新:

UPDATE employees
SET first_name = 'Alice', department_id = 20
WHERE employee_id = 102;

二、DELETE 的基本用法

DELETE 用于删除表中的指定数据行,需搭配 WHERE 子句指定删除条件。如果省略 WHERE,将删除表中的所有记录,但表结构仍然保留。

1. 基本语法
DELETE FROM 表名
[WHERE 条件];
2. 示例:删除指定行

删除部门编号为 30 的所有员工:

DELETE FROM employees
WHERE department_id = 30;
3. 示例:删除所有数据(慎用)

清空 departments 表中的数据:

DELETE FROM departments;

注意: 若想保留表结构但快速清空数据,可使用 TRUNCATE(比 DELETE 更高效)。

TRUNCATE TABLE departments;

三、UPDATE 和 DELETE 的常见注意事项
  1. 谨慎使用 WHERE 子句

    • WHERE 条件不明确会影响意外的数据范围。
    • 没有 WHERE 会影响全表,需格外小心。

    错误示例:无 WHERE 更新或删除

    UPDATE employees SET salary = 8000; -- 更新所有员工薪资
    DELETE FROM employees; -- 删除所有员工数据
    
  2. 确认操作前备份数据
    对关键表进行更新或删除前,建议备份数据,尤其在生产环境中。

    备份示例:创建历史表

    CREATE TABLE employees_backup AS
    SELECT * FROM employees;
    
  3. 避免触发约束错误

    • 更新或删除数据时,需考虑表的外键约束。
    • 违反外键关联可能导致操作失败。

    解决方法:先删除外键表记录

    DELETE FROM order_items WHERE order_id = 101; -- 删除关联表数据
    DELETE FROM orders WHERE order_id = 101; -- 删除主表数据
    
  4. 批量更新或删除时锁定资源

    • 长时间操作会导致表被锁定,其他事务可能阻塞。

    • 可使用分批处理或事务控制:

      BEGIN
        DELETE FROM employees WHERE department_id = 40;
        COMMIT;
      END;
      

四、UPDATE 和 DELETE 的高级用法
1. 使用子查询更新数据

通过子查询动态更新列值。

示例:根据另一个表更新薪资

UPDATE employees
SET salary = (SELECT AVG(salary) 
              FROM employees 
              WHERE department_id = 20)
WHERE department_id = 10;
2. 使用条件删除

结合复杂条件删除数据。

示例:删除薪资低于平均值的员工

DELETE FROM employees
WHERE salary < (SELECT AVG(salary) FROM employees);
3. 使用 RETURNING 提取受影响数据(仅适用于更新和删除操作)

RETURNING 可返回更新或删除的行数据。

示例:删除数据并返回信息

DELETE FROM employees
WHERE department_id = 50
RETURNING employee_id, first_name, last_name INTO :id_var, :first_name_var, :last_name_var;

五、常见错误及解决方法
  1. ORA-01407: cannot update to NULL
    原因: 更新操作试图将 NOT NULL 列赋值为空。
    解决方法: 提供合法值,或修改表结构允许空值。

  2. ORA-02292: integrity constraint violated - child record found
    原因: 删除数据违反外键约束,关联表中存在相关记录。
    解决方法: 先删除外键表中关联记录,或设置级联删除。

  3. ORA-01779: cannot modify a column which maps to a non key-preserved table
    原因: 更新涉及非主键表的视图列。
    解决方法: 修改基础表,或确保视图中包含主键列。


六、实践案例
  1. 批量更新员工薪资
    将部门编号为 30 的员工薪资增加 10%。

    UPDATE employees
    SET salary = salary * 1.1
    WHERE department_id = 30;
    
  2. 删除无效的客户记录
    删除最近一年未活跃的客户。

    DELETE FROM customers
    WHERE last_active_date < ADD_MONTHS(SYSDATE, -12);
    
  3. 避免重复更新:条件过滤
    仅更新薪资低于 5000 的员工。

    UPDATE employees
    SET salary = 5000
    WHERE salary < 5000;
    

七、小结

UPDATE 和 DELETE 是管理数据表中记录的核心操作,其灵活性和强大功能使其在日常开发中被广泛使用。但在操作时需特别小心,确保筛选条件准确并采取必要的备份与验证措施,以避免因误操作造成数据丢失或不一致。

精通SQL:数据库工程师必须掌握的UPDATE操作全解析 UPDATEtable_name:指定需要更新记录的表名。SET:后接需要更新的列名和它们应该被赋予的新值。WHERE:条件语句,指定哪些记录需要被更新。如果省略这一部分,表中的所有记录都会被更新,这通常不是我们希望看到的结果。在本文中,我们深入探讨了数据库工程师必须掌握的UPDATE操作,从基础语法到高级应用,再到实战案例和常见问题的解答。通过这些内容的讲解和分析,目的是帮助读者更加全面和深入地理解UPDATE语句的强大功能及其在数据库管理和维护中的关键作用。UPDATE。 阅读详情

相关推荐

Oracle UPDATE 语句

我估计,只要是知道SQL 语句的人都会用UPDATE 语句,可是大部分人不知道UPDATE 语句有两种写法,首先,考虑下面的情况: CREATE TABLE STUDENT ( ID NUMBER(10), —学号 NAME VARCHAR2(20) NOT NULL,—姓名 BIRTHDAY DATE —生日 ); INSERT INTO STUDENT (ID,NAME,BIRTHDAY) VALUES (1,‘张三’,DATE

萌兔兔MMQ!! 2920

Oracle更新(update)

一:update命令结构: update 表名 set 列名1=值1,列名2=值2,列名3=值3..... where 条件 案例1、更新学生“张三”的年龄和身份证信息: update student.stuinfo t set t.age = '24', t.idnumber = '3503021994XXXXXXXX' where t.stuname = '张三'; commit; 二:update 利用另外一张表关联更新本表数据的命令结构如下: update表1set列名...

qq_24304893的博客 3万+

Perplexity SPACE沙箱平台:安全AI开发环境实战解析

沙箱技术通过资源隔离和权限控制创建受限执行环境,其核心原理是容器化隔离机制。在AI开发领域,这种技术解决了环境配置复杂性和安全风险等关键问题。SPACE沙箱平台作为AI代码执行环境,提供了标准化的开发沙箱,支持Python生态和主流AI框架。通过实战案例展示,该平台特别适用于情感分析等NLP任务的快速原型验证,帮助开发者在安全隔离的环境中测试AI模型和算法,显著提升开发效率并降低系统风险。

weixin_29029995的博客 274

Oracle 四种update方法总结

Oracle 四种update方法总结 Oracle除了提供标准的update语句之外还提供了其他的一些数据更新方式以应对不同的应用场景:标准Update语句,Update join view,merge into,游标

L_WSN的专栏 1万+

StarWind V2V Converter v9 虚拟磁盘转换工具使用教程 (转)

StarWind V2V Converter v9.0.1.268 是一款免费的虚拟磁盘转换工具,支持不同管理程序间的虚拟机镜像格式转换,包括VMDK、VHD/VHDX、IMG和QCOW2等格式。该工具具有窗口修复模式、零拷贝转换和管理程序切换等特色功能,能够轻松实现物理机到虚拟机的转换,并兼容主流管理程序如Hyper-V、ESXi等。使用教程详细介绍了从本地文件选择到格式转换的完整操作流程,转换过程简单高效且不影响原虚拟磁盘数据。

hsh的专栏 1482

IGBT基础知识

IGBT

u010783226的专栏 1万+
上一篇: 【C++】——精细化哈希表架构:理论与实践的综合分析
下一篇: 一个比 Nginx 还简单的 Web 服务器
普通网友
博客等级 码龄4年 3126粉丝 192原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值