SQL语句
1. DML语句(Data Manipulation Language 数据操作语言): insert update delete select
2. DDL语句(Data Definition Language 数据定义语言): create/alter/drop/truncate table
create/drop view,create/drop index(sequence,synonym)
3. DCL语句(Data Control Language 数据控制语言): commit rollback
--地址符 &
SQL> insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno);
输入 empno 的值: 1003
输入 ename 的值: 'Mike'
输入 sal 的值: 3000
输入 deptno 的值: 20
原值 1: insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno)
新值 1: insert into emp(empno,ename,sal,deptno) values(1003,'Mike',3000,20)
--在DML语句中使用地址符
SQL> select empno,ename,&a from emp;
输入 a 的值: sal
原值 1: select empno,ename,&a
新值 1: select empno,ename,sal
一次插入(拷贝)一批数据
SQL> create table emp20 as select * from emp where 1=2;
因为1=2的条件为假,所以创建的表只是emp表的框架,无具体内容
一次性将emp中所有20号部门的员工插入到emp20
SQL> insert into emp20 select * from emp where deptno=20;
truncate table emp20;
等同于: delete from emp20;
delete和truncate table的区别
1. delete是DML,truncate是DDL (DML可以rollback,DDL不可以)
2. delete逐条删除;truncate先摧毁,再重建
3. delet会产生碎片;truncate不会
4. delete不会释放空间;truncate会
set feedback off------》会将“表已创建,已插入一行”等Oracle自己打印出来提示字符串的功能关闭
@c:\sql.sql-----------》加载并执行C盘下Sql.sql文件,文件中会创建一个testdelete表并插入5000行数据
SQL> delete from testdelete;
已用时间: 00: 00: 00.04
SQL> drop table testdelete purge;-----》purge会一并将testdelete删除后在Oracle回收站的testdelete删除
已用时间: 00: 00: 01.92 SQL> truncate table testdelete;
已用时间: 00: 00: 00.54
总结:delete 性能比 truncate要好
Oracle中的事务
1. 事务的起始标志: DML语句
2. 事务的结束标志: 提交: 显式提交 commit
隐式提交 DDL 语句,正常退出 exit
回滚: 显式 rollback
隐式 非正常退出,掉电,宕机
SQL> --保存点-------在Java中也支持保存点
SQL> create table testsavepoint
2 (tid number,tname varchar2(20));
SQL> insert into testsavepoint values(1,'Tom');
SQL> insert into testsavepoint values(2,'Mary');
定义保存点
SQL> savepoint a;
SQL> insert into testsavepoint values(3,'Moke');
SQL> rollback to savepoint a;---》只会回退到保存点,不会将1,2的数据回退