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