SQL> /*
SQL> SQL的类型
SQL> 1. DML(Data Manipulation Language 数据操作语言):insert update delete select
SQL> 2. DDL(Data Definition Language 数据定义语言): create/drop/alter/truncate table
SQL> create/drop view,sequence,index,synonym(同义词)
SQL> 3. DCL(Data Control Langauge 数据控制语言): grant(授权) revoke(撤销权限)
SQL> */
SQL> --PreparedStatement pst = "insert into emp values(????)";
SQL> --地址符 &
SQL> insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno);
输入 empno 的值: 1002
输入 ename 的值: 'Mary'
输入 sal 的值: 3000
输入 deptno 的值: 20
SQL> select ename,&s from emp;
输入 s 的值: sal
原值 1: select ename,&s from emp
新值 1: select ename,sal from emp
SQL> --批处理
SQL> create table emp10 as select * from emp where 1=2;
SQL> insert into emp10 select * from emp where deptno=10;
SQL> /*
SQL> 海量插入数据:(了解)
SQL> 1. 数据泵
SQL> 2. SQL*Loader
SQL> 3. 外部表
SQL> */
SQL> /*
SQL> delete和truncate的区别:
SQL> 1. delete逐条删除,truncate先摧毁表 再重建
SQL> 2. delete是DML(可以回滚) truncate是DDL(不可以回滚)
SQL> 3. delete会产生碎片 truncate不会 消除碎片方法:1).alter table <表名> move 2).数据导出再导入
SQL> 4. delete不会释放空间 truncate会释放
SQL> 5. delete可以闪回(flashback) truncate不可以
SQL> */
SQL> set feedback off
SQL> @d:\temp\testdelete.sql
SQL> select count(*) from testdelete;
COUNT(*)
----------
5000
SQL> set timing on
SQL> delete from testdelete;
已用时间: 00: 00: 00.05
SQL> set timing off
SQL> drop table testdelete purge;
SQL> @d:\temp\testdelete.sql
SQL> select count(*) from testdelete;
COUNT(*)
----------
5000
SQL> set timing on
SQL> truncate table testdelete;
已用时间: 00: 00: 02.62 (mysql相反,truncate更快)
SQL> --delete换个地方存: undo表空间
SQL> set timing off
SQL> /*
SQL> Oracle中事务的标志
SQL> 1. 起始标志: 事务中第一条DML语句
SQL> 2. 结束标志:提交: 显式 commit
SQL> 隐式 正常退出exit,DDL,DCL
SQL> 回滚 : 显式 rollback
SQL> 隐式 非正常退出,掉电,宕机
SQL> */
SQL> --定义保存点
SQL> savepoint a;
SQL> rollback to savepoint a;
SQL> commit;
SQL> set transaction read only;
不能在 READ ONLY 事务处理中执行插入/删除/更新操作
创建和管理表
SQL> create table test3
2 (tid number,
3 tname varchar2(20),
4 hiredate date default sysdate);
SQL> create table emp20
2 as
3 select * from emp where deptno = 20;
SQL> create table test5
2 (tid number,
3 tname varchar2(20),
4 gender varchar2(2) check (gender in ('男','女')),
5 sal number check (sal > 0)
6 );
SQL> -- 修改表:追加新列 修改列 删除列 重命名列 重命名表
SQL> alter table test1 add photo blob;
SQL> alter table test1 modify tname varchar2(40);
SQL> alter table test1 drop column photo ;
SQL> alter table test3 rename column tname to username;
SQL> rename test3 to test4;
SQL> drop table emp20;
SQL> --Oracle的回收站
SQL> --查看回收站
SQL> show recyclebin;
SQL> purge recyclebin;
回收站已清空。
SQL> --查看回收站某表的数据
SQL> select * from "BIN$NILXYzrtTralDV4rTmIeLQ==$0";
SQL> purge table "BIN$3YVK1yvZRh+Ck9idDCHM1Q==$0" ; 删除回收站某表
SQL> --rowid 行地址 伪列
SQL> select rowid,empno,ename,sal from emp;
SQL> create table student
(
sid number constraint student_pk primary key,
sname varchar2(20) constraint student_name_notnull not null,
gender varchar2(2) constraint student_gender check (gender in ('男','女')),
email varchar2(40) constraint student_email_unique unique
constraint student_email_notnull not null,
deptno number constraint student_fk references dept(deptno) on delete set null
);
外键约束:
foreign key : 在子表中定义表级的外键约束
references : 指定子表和父表的列
on delete cascade : 删除父表时 级联删除子表记录
on delete null : 删除父表时 子表相关依赖记录的外键置为空