Oracle 数据操作基础:INSERT/UPDATE/DELETE最佳实践

一、DML概述

数据操作语言(Data Manipulation Language, DML)是SQL的核心组成部分,用于对数据库中的数据进行增删改查操作。Oracle中的主要DML命令包括INSERT、UPDATE、DELETE和MERGE,这些命令构成了日常数据库操作的基础。

DML命令的主要特点

  1. 需要显式提交:DML操作不会自动提交,需要显式执行COMMIT
  2. 可回滚:在提交前可以使用ROLLBACK撤销操作
  3. 产生重做日志:会生成重做日志以保证数据可恢复性
  4. 锁定资源:操作期间会锁定受影响的数据行

二、INSERT命令详解

INSERT命令用于向表中添加新行数据,是最基本的数据操作之一。

1. 基本INSERT语法

INSERT INTO table_name [(column1, column2, ..., columnN)]
VALUES (value1, value2, ..., valueN);

示例1:向员工表插入单条记录

INSERT INTO employees (emp_id, emp_name, hire_date, salary, dept_id)
VALUES (1001, '张伟', TO_DATE('2023-01-15', 'YYYY-MM-DD'), 8500, 10);

示例2:插入部分列数据

INSERT INTO employees (emp_id, emp_name, dept_id)
VALUES (1002, '李娜', 20);

2. 多行插入技术

Oracle提供了多种方式实现多行插入:

方法1:使用多个INSERT语句

INSERT INTO employees VALUES (1003, '王强', SYSDATE, 9200, 10);
INSERT INTO employees VALUES (1004, '赵敏', SYSDATE, 7800, 20);
INSERT INTO employees VALUES (1005, '刘芳', SYSDATE, 10500, 30);

方法2:使用INSERT ALL语法

INSERT ALL
    INTO employees VALUES (1006, '陈晨', SYSDATE, 8800, 10)
    INTO employees VALUES (1007, '杨光', SYSDATE, 9500, 20)
    INTO employees VALUES (1008, '周涛', SYSDATE, 11500, 30)
SELECT * FROM dual;

方法3:使用子查询插入

INSERT INTO new_employees
SELECT * FROM employees WHERE hire_date > TO_DATE('2023-01-01', 'YYYY-MM-DD');

3. 高级INSERT技术

使用DEFAULT值

INSERT INTO employees (emp_id, emp_name, hire_date, salary)
VALUES (1009, '吴迪', DEFAULT, 7500);

使用RETURNING子句获取生成值

INSERT INTO employees (emp_id, emp_name, salary)
VALUES (emp_seq.NEXTVAL, '郑凯', 8200)
RETURNING emp_id INTO v_emp_id;

使用WITH CHECK OPTION插入

INSERT INTO (SELECT emp_id, emp_name, salary FROM employees WHERE dept_id = 10 WITH CHECK OPTION)
VALUES (1010, '孙伟', 9000);

三、UPDATE命令详解

UPDATE命令用于修改表中已存在的数据行。

1. 基本UPDATE语法

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

示例1:更新单个员工薪资

UPDATE employees
SET salary = 9500
WHERE emp_id = 1001;

示例2:基于表达式更新

UPDATE employees
SET salary = salary * 1.1  -- 涨薪10%
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻南瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值