Oracle之数据修改

本文详细介绍了Oracle数据库中数据的插入、更新和删除操作。包括使用`INSERT`语句插入数据,如何处理字段数量不匹配的情况,使用`UPDATE`语句直接修改和条件修改数据,以及`DELETE`语句删除数据。此外,还提到了子查询的使用、批量插入、事务管理和回滚,以及`TRUNCATE`命令在大量数据删除时的效率优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一;插入

 

如果只要一个表的表结构 结尾添加 where 1=0

 

SQL> create table dept as select * from departments where 1=0;

 

Table created.

 

当插入字段数和表字段数一致可以不输入字段名,数目不一致时需指明字段,操作如下

 

 

SQL> desc dept;

 

 

Name Null? Type

----------------------------------------- -------- ----------------------------

DEPARTMENT_ID NUMBER(4)

DEPARTMENT_NAME NOT NULL VARCHAR2(30)

MANAGER_ID NUMBER(6)

LOCATION_ID NUMBER(4)

 

SQL> insert into dept values(70,'public relation',100,1700);

 

1 row created.

 

SQL> insert into dept values(80,'purchase');

insert into dept values(80,'purchase')

*

ERROR at line 1:

ORA-00947: not enough values

 

 

SQL> insert into dept(department_id,department_name) values(80,'purchase');

 

1 row created.

 

注意 :插数据时 字符,日期类型要用单引号

如果没有对应可用空占位插入

SQL> insert into dept values(80,'purchase',null,null);

 

1 row created.

 

在插入日期数据是最好使用to_date进行转换和指定显示格式不然容易因为语言原因导致无法插入数据

 

指定插入:

SQL> insert into

2 (select employee_id,first_name,last_name,email,phone_number,hire_date,job_id,salary,commission_pct,manager_id,department_id from emp where manager_id=120)

3 values(199,'sds','dsa','dfwe',(select phone_number from emp where employee_id=183),'23-MAY-04','SH_CLERK',5100,null,152,50);

 

1 row created.

即使子查询结果为多个也直插入一条结果

 

批量插入:

 

SQL> insert into dept(department_id,department_name,manager_id,location_id)

2 select department_id,department_name,manager_id,location_id from departments where department_id=100;

 

修改:

1:直接修改:

SQL> update emp

2 set job_id='FI_ACCO',

3 salary=(8200)

4 where employee_id=112;

 

1 row updated.

 

2:条件修改 : 修改employee_id为112的薪资和工作与ID为110的一致

操作如下:

SQL> select employee_id,salary,job_id from emp where employee_id=110

2 ;

 

EMPLOYEE_ID SALARY JOB_ID

----------- ---------- ----------

110 8200 FI_ACCOUNT

 

SQL> select employee_id,salary,job_id from emp where employee_id=112

2 ;

 

EMPLOYEE_ID SALARY JOB_ID

----------- ---------- ----------

112 7800 FI_ACCOUNT

 

 

SQL> update emp

2 set job_id=(select job_id from emp where employee_id=110),

3 salary=(select salary from emp where employee_id=110)

4 where employee_id=112;

 

1 row updated.

 

这句语法可以进行优化,这句话实行了两次查询可使用如下语句,即可只查询一次提升性能:

操作如下:

SQL> update emp

2 set (job_id,salary)=(select job_id,salary from emp where employee_id=110)

3 where employee_id=112;

 

1 row updated.

注:子查询结果必须唯一

 

3:删除

SQL> select * from dept;

 

DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID

------------- ------------------------------ ---------- -----------

100 Finance 108 1700

101 adbgw 109 1900

102 uvuyv 110 2000

 

指定删除

SQL> delete from dept where department_id=100;

 

1 row deleted.

 

SQL> select * from dept;

 

DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID

------------- ------------------------------ ---------- -----------

101 adbgw 109 1900

102 uvuyv 110 2000

 

删除时必须指明删除内容或字段否则删除的将是整个表

SQL> delete from dept;

 

2 rows deleted.

 

SQL> select * from dept;

 

no rows selected

 

删除后没有提交可以回滚找回删除数据,操作如下

 

SQL> rollback;

 

Rollback complete.

 

SQL> select * from dept;

 

DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID

------------- ------------------------------ ---------- -----------

100 Finance 108 1700

101 adbgw 109 1900

102 uvuyv 110 2000

 

 

注:当表很大时使用delete时会很慢,因为他会写日志。此时可考虑使用 truncate:

但他是DDL语句,无法后悔;只有在确保数据不使用时才能使用

 

事物可以设置保存点方便回滚至指定位置

保存点也可以使用别名

 

DDL 语句和 DCL 语句属于事物语句,一个事物开始只要不提交数据就只有当前更改的当前人员可看,其余人员看不见修改,但若是提交或是另一个事物开始则当前人员的更改将会自动提交,其余人员就可看见更改

 

在操作删除更新等操作时如果不提交,存在行级锁则其他用户无法更改同行内的所有字段,只有提交事务后其他人员才能执行操作

 

杀死一个事物就是将事物回滚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值