sql语句
1.DML语句(Data Manipulation Language)
也就是通俗的 增、删、改、查
2.DDL语句(Data Definition Language 数据定义语言)create/alter/drop/truncate table create/drop view,create/drop index(sequence,symbol)
3.SCL语句(Data Control Language 数据控制语言)commit rollback
表的增删改查
–insert语句
–插入一个新员工
–隐式插入null值、显式插入null值
insert into emp(empno,ename,job,sal) values(7802,'LiSi','CLERK',8000)
–地址符&:类似于java代码中的prepareStatement
insert into emp(empno,ename,sal,deptno)values(&empno,'&ename',&sal,&deptno) 输入 empno 的值: 1002 输入 ename 的值: Tom 输入 sal 的值: 1500 输入 deptno 的值: 20 原值 1: insert into emp(empno,ename,sal,deptno)values(&empno,'&ename',&sal,&deptno) 新值 1: insert into emp(empno,ename,sal,deptno)values(1002,'Tom',1500,20) 已创建 1 行。
–在DML语句中可以使用地址符
select * from &a;
输入 a 的值: emp
原值 1: select * from &a 新值 1: select * from emp
–一次插入(拷贝)一批数据。
–1、首先创建一张表
create table emp20 as select * from emp where 1=2;
–一次性将emp中所有20号部门的员工一次性插入到emp20中。
insert into emp20 select * from emp where deptno=20;
–更新语句
update emp20 set deptno = 30 where ename = 'Tom';
–如果delete中没有where条件,就删除整个表中的数据,等同于truncate table
–truncate(DML语句)删除表
truncate table emp20;
表被截断。
delete和truncate table的区别
1.delete是DML语句,truncate table是DDL语句。DML语句可以rollback,DDL语句不可以回滚。
2.delete逐条删除;truncate先摧毁,再重建。
3.delete会产生碎片;truncate不会。
4.delete不会释放空间;truncate会。
–关闭回显语句 set feedback off
–开启计时操作 set timing on
oracle中的事务
1.事务的起始标志:DML语句(增删改查)
2.事务的结束标志:提交:显示提交:commit
隐式提交:DDL语句(操作表的语句),正常退出 exit
回滚:显示 rollback
隐式 非正常退出,停电,宕机
–保存点
create table testsavepoint (tid number,tname varchar2(20)) insert into testsavepoint(tid,tname) values(&tid,&tname) 输入 tid 的值: 102 输入 tname 的值: 'Tom' 已创建 1 行。 savepoint a;
保存点已创建。
insert into testsavepoint(tid,tname) values(103,'Maty') savepoint b;
保存点已创建。
rollback to savepoint a;
回退已完成。
oracle的隔离级别
1、读已提交的数据(read commited)
2、串行化(serializable)
3、只读(read only)
–创建表
create table test1 (tid number,tname varchar2(20),hiredate date default sysdate)
–快速建表
–创建表:包含员工号 姓名 月薪 年薪 部门名称
create table empcorn as select empno,ename,sal,sal*12 money from emp e,dept d where e.deptno = d.deptno
–rowid 行地址
select rowid,empno,ename from emp;
ROWID EMPNO ENAME
------------------ ---------- --------------------
AAADheAAEAAAADoAAA 7369 SMITH
AAADheAAEAAAADoAAB 7499 ALLEN
AAADheAAEAAAADoAAC 7521 WARD
–修改表:追加新列,修改列,删除列,重命名列
–1、添加列
alter table test1 add photo blob;
–2、修改表
alter table test1 modify tname varchar2(40);
表已更改。
–3、删除列
alter table test1 drop column photo;
表已更改。
–4、重命名列
alter table test1 rename column tname to username;
表已更改。
–查看回收站
show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
TESTSAVEPOINT BIN$aI6puMaDQfikeiQIHli4Fw==$0 TABLE 2016-09-01:09:55:26
–彻底删除表
drop table test1 purge;
约束条件
–check约束别名 constraint+名字
–创建一个表,包括所有的约束条件
create table myperson( pid varchar2(18) constraint myperson_PK primary key,--主键约束 pname varchar2(4) constraint myperson_Name not null,--非空约束 sex varchar2(4) constraint myperson_Sex check (sex in ('男','女')),--check约束 email varchar2(30) constraint myperson_Email unique, --唯一性约束 deptno number constraint myperson_FK references dept(deptno) on delete set null--外键约束 )
视图
–创建一个视图:员工号 姓名 月薪 年薪
create view view1 as select empno,ename,sal,sal*12 年薪 from emp 第 1 行出现错误: ORA-01031: 权限不足
–没有权限,给scott用户设置一个全新
grant create view to scott;
–视图的优点
–视图的概念:视图是一张虚表,相当于一个封装起来的sql语句。
–视图只能进行创建或者替换,不能进行修改。
–创建或者替换视图
create view view2 as select * from emp where deptno = 10;
视图已创建。
SQL> –设置视图为只读。
create or replace view view2 as select * from emp where deptno = 10 with read only
–删除视图
drop view view1;
视图已删除。
序列
–用于作为主键的自动增长,以数组的形式存储,数组默认长度为20.
–序列不连续
–序列存储在内存中,默认长度为20.
–创建一个序列
create sequence myseq;
序列已创建。
create table testseq(tid number,tname varchar2(8));
表已创建。
查询序列
select myseq.nextval from dual;
NEXTVAL
----------
1
插入序列
insert into testseq values(myseq.nextval,'Tom');
已创建 1 行。
同义词synonym
–给hr.employees取一个别名。
create synonym hremp for hr.employees