数据的插入,更新,删除。
DML(data manipulation language数据操作语言):insertupdate delete select
DDL(data definition language数据定义语言):create/alter/drop/truncate表操作
Create/dropview/sequence/index/synonym 视图
DCL(data control language数据控制语言):commitrollback
增删改查组合起来可以组成事务。
--insert
insert into emp(empno,ename,dal,deptno)values(1001,’Tom’,3000,10);
可以插入null,可以显示插入:
Insert into emp(empno,ename,dal,deptno)values(1001,’Tom’,null,null);
可以隐式插入:
insert into emp(empno,ename,dal,deptno) values(1001,’Tom’);
地址符:&,与JDBC的PreparedStatement作用差不多,&相当于一个?
insert into emp(empno,ename,sal,deptno)values(&empno,&ename,&sal,&deptno);
会提示为取地址符输入参数:
Empno的值:1002
Ename的值:’Mary’
Sal的值:3000
Deptno的值:20
会显示原值和新值:
在任何一个DML中都可以使用地址符。
Select * from &t; t代表了一个表
批处理
建立一个表:
create table emp10 as select * from empwhere 1=2;
这样创建表的结构和员工表是一样的。但是里面没有数据。
--一次性将emp中所有的10号部门的员工插入到emp10。子查询可以和任何一个DML语句嵌套。
--使用子查询完成批量导入:会将后面select查询到的记录都插入到emp10中。
Insert into emp10 select * from emp wheredeptno=10;
--在update中嵌套子查询。
--更新114号员工的工作和工资使其与205号员工相同,可以通过子查询将114号的信息查询出来,在set到205中。
Update employees set job_id = (selectjob_id from employees where employee_id=205),salary = (select salary fromemployees where employee_id=205) where employee_id = 114;
--更新时的数据完整性错误,如果更新的值(比如子查询查出来的值)不存在,就会产生错误。
删除操作delete,truncate。
Truncate:清空表,只是清空数据,表结构还在,
与delete的区别是:
(1)delete是逐条删除数据;truncate是先摧毁表,再重建。
(2)最根本的区别是:delete是DML(可以回滚)语句,truncate是一个DDL(不可以回滚)语句。
(3)delete语句不会释放空间,truncate会释放空间。
(4)delete会产生碎片,truncate不会。
(5)delete可以闪回,truncate不可以闪回。
--关闭回显信息
Set feedback off
--删除的数据量大的时候,使用delete更快。
事务:
事务的标志:
起始标志:DML语句执行,就开始。
结束标志:提交à显示:commit,
隐式:正常退出exit。DDL语句默认隐式提交。
回滚à显示:rollback
隐式:非正常退出,停电,宕机。
Oracle中,事务不可以跨越DDL语句,比如执行了select操作,然后执行create操作,再执行DDL,则事务不连续。
通过设置会滚点SAVEPOINT
Create table testsavepoint (tidnumber,tname varchar2(20));
Set feedback on
Insert into testsavepoint values(1,’Tom’);
Insert into testsavepoint values(2,’Mary’);
--定义保存点:
Savepoint a;
--插入Mike,误插入成Mke,插入的数据错误,可以根据会滚点来回滚。
Insert into testsavepoint values(3,’Mke’);
Rollback to savepoint a;
Oracle只支持读已提交,和串行化,两种事务隔离级别。
Oracle支持三个事务隔离级别,它自己实现了一个隔离级别,还有read only。