Oracle06增删改数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle06增删改数据相关的知识,希望对你有一定的参考价值。
昨天整理了关于Oracle的查询的相关知识,今天将之前的学习笔记整理了一下,准备介绍一下关于Oracle增删改的相关知识。之后博主也会将之前学习的一些学习的基础的笔记作为博文发出来,希望读者能够多多指正,毕竟之前的学习肯定存在了些许的不足之处。整理笔记已经按照分类分类完成了。
一、回顾SQL92/99标准的四大类
(1)DML(数据操纵语言):select,insert,update,delete
(2)DDL(数据定义语言):create table,alter table,drop table,truncate table
(3)DCL(数据控制语言):grant select any table to scott/revoke select any table from scott
(4)TCL(事务控制语言):commit,rollback,savepoint to 回滚点
二、增删改数据
/*向emp表中插入一条记录(方式一:按表默认结构顺序)insert into 表名 values ...语法*/ insert into emp values (1111, ‘JACK‘, ‘IT‘, 7788, sysdate, 1000, 100, 40); /*向emp表中插入一条记录(方式二:按自定义顺序)insert into 表名(列名) values ...语法*/ insert into emp (ENAME, EMPNO, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (‘MARRY‘, 2222, ‘IT‘, 7788, sysdate, 1000, 100, 40); /*向emp表中插入NULL值(方式一:采用显示插入NULL值)*/ insert into emp values (3333, ‘SISI‘, ‘IT‘, 7788, sysdate, 1000, NULL, 40); /*向emp表中插入NULL值 (方式二:采用隐式插入NULL值),前提是所插入的字段允许插入NULL值*/ insert into emp (ENAME, EMPNO, JOB, MGR, HIREDATE, SAL, DEPTNO) values (‘SOSO‘, 4444, ‘IT‘, 7788, sysdate, 1000, 40); /*使用&占位符,动态输入值,&可以运用在任何一个DML语句中,在values子句中使用,例如:‘&ename‘和&sal*/ insert into emp values (&empno, ‘&ename‘, ‘&job‘, &mgr, &hiredate, &sal, &comm, &xxxxxxxx); 注意:&是sqlplus工具提供的占位符,如果是字符串或日期型要加‘‘符,数值型无需加‘‘符 /*使用&占位符,动态输入值,&可以运用在任何一个DML语句中,在from子句中使用*/ select * from &table; /*使用&占位符,动态输入值,&可以运用在任何一个DML语句中,在select子句中使用*/ select empno,ename,&colname from emp; /*使用&占位符,动态输入值,&可以运用在任何一个DML语句中,在where子句中使用*/ select * from emp where sal > &money; /*使用&占位符,动态输入值,&可以运用在任何一个DML语句中,在group by 和 having子句中使用*/ select &deptno, avg(sal) from emp group by deptno having avg(sal) > &money; /*删除emp表中的所有记录*/ delete from emp; /*将xxx_emp表中所有20号部门的员工,复制到emp表中,批量插入,insert into 表名 select ...语法*/ insert into emp select * from xxx_emp where deptno = 20; /*将‘SMITH‘的工资增加20%*/ update emp set sal=sal*1.2 where ename = upper(‘smith‘); /*将‘SMITH‘的工资设置为20号部门的平均工资,这是一个条件未知的事物,优先考虑子查询*/ 第一:20号部门的平均工资 select avg(sal) from emp where deptno=20; 第二:将‘SMITH‘的工资设置为2207 update emp set sal=2207 where ename = ‘SMITH‘; 子查询: update emp set sal = (select avg(sal) from emp where deptno = 20) where ename = ‘SMITH‘; /*删除工资比所有部门平均工资都低的员工,这是一个条件未知的事物,优先考虑子查询*/ 第一:查询所有部门的平均工资 select avg(sal) from emp group by deptno; 第二:删除工资比(*,*,*)都低的员工 delete from emp where sal<all(*,*,*); 子查询: delete from emp where sal < all (select avg(sal) from emp group by deptno); /*删除无佣金的员工*/ delete from emp where comm is null; /*将emp表丢入回收站,drop table 表名*/ drop table emp; /*查询回收站,show recyclebin,但是经过使用发现这个语句不能使用,这里贴出来参考*/ show recyclebin; /*查询回收站,使用下面语句,亲测可以*/ select * from recyclebin; create table t_hzp( id number(12) primary key, name varchar(32) );--创建表 insert into t_hzp (id,name) values (12,‘夜孤寒‘);--插入数据 select * from t_hzp;--查询表数据 drop table t_hzp;--删除表 select * from t_hzp;--测试表是否已经删除 select * from recyclebin;--查询回收站是否有已删除表 /*从回收站将emp表闪回,flashback table 表名 to before drop*/ flashback table emp to before drop;--亲测可以,但是可能要在command sql窗口使用 /*清空回收站,purge recyclebin*/ drop table t_hzp;--删除表 select * from recyclebin;--查看删除的表是不是在回收站中 purge recyclebin;--清空回收站 select * from recyclebin;--查询清空之后删除的表是不是还是在回收站(亲测不在回收站中了) /*使用关键字purge,彻底删除emp表,即不会将emp表丢入回收站,永久删除emp表,drop table 表名 purge*/ create table t_hzp( id number(12) primary key, name varchar(32) );--创建表 insert into t_hzp (id,name) values (12,‘夜孤寒‘);--插入数据 select * from t_hzp;--查询表数据 drop table emp purge;--彻底删除表 select * from recyclebin;--查询删除的表是不是在回收站中 /*依据xxx_emp表结构,创建emp表的结构,但不会插入数据*/ create table xxx_emp as select * from emp where 1<>1;--复制表结构 select * from xxx_emp;-- /*当不小心使用关键字purge将表彻底删除之后怎么回复?如果没有办法的话,那就创建吧...*/ create table EMP ( empno NUMBER(4) not null, ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(2) ); /*使用下面语句更新或者创建对象比较方便*/ select * from emp for update; /*创建emp表,复制xxx_emp表中的结构,同时复制xxx_emp表的所有数据*/ create table yyy_emp as select * from emp where 1=1;--复制表 select * from yyy_emp;--查询表 注意:where不写的话,默认为true /*将emp截断,再自动创建emp表,truncate table 表名*/ truncate table emp; /*向emp表,批量插入来自xxx_emp表中部门号为20的员工信息,只包括empno,ename,job,sal字段*/ insert into emp (empno, ename, job, sal) select empno, ename, job, sal from xxx_emp where deptno = 20; /*使用关键字purge,彻底删除emp表,即不会将emp表丢入回收站,不要乱用,不然就炸了*/ drop table emp purge; /*依据xxx_emp表,只创建emp表,但不复制数据,且emp表只包括empno,ename字段*/ create table emp(empno,ename) as select empno,ename from xxx_emp where 1=2; /*向emp表(只含有empno和ename字段),批量插入xxx_emp表中部门号为20的员工信息*/ insert into emp (empno, ename) select empno, ename from xxx_emp where deptno = 20;
以上基本涵盖了Oracle常用的增删改操作,如果读者觉得有遗漏的话,欢迎指正,谢谢!
三、drop、truncate、delete的区别
drop table 和 truncate table 和 delete from 区别:
drop table
1)属于DDL
2)不可回滚
3)不可带where
4)表内容和结构删除
5)删除速度快
truncate table
1)属于DDL
2)不可回滚
3)不可带where
4)表内容删除
5)删除速度快
delete from
1)属于DML
2)可回滚
3)可带where
4)表结构在,表内容要看where执行的情况
5)删除速度慢,需要逐行删除
以上是关于Oracle06增删改数据的主要内容,如果未能解决你的问题,请参考以下文章
java jdbc连接数据库 oracle的代码实现增删改查的方法怎么写
用java做界面连接oracle数据库实现增删改查功能,具体步骤怎么做?
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段