--伪列
可以像其他列一样被查询但是不能修改
level
rownum 行号
rowid 行地址
·level
必须从1开始,并且是连续的
必须和connect by配合使用 --只有connect by 限制了他的
·level
level的用法★(必须记住这个)
1.树形查询返回节点深度 --之前说过
2.控制显示格式--控制缩进 --之前说过
3.生成多条记录
4.一行变多行
--生成多条记录
select level
from dual
connect by level<=10
--查询1-19的所有整数
select level
from dual
connect by level<=19
--这里就是说level是从1到2到3一直到之后,而且必须是连续的
--只有connect by 限制了他,才能实现他的功能,
--否则就会无限增长,永远也跑不出结果
--这里不能用=号,因为他是从1往上连续增长,
--如果我们使用等于他是无法满足的条件,所以只会输出一个1
select level
from dual
connect by level=20
--查询100以内所有的奇数
select level
from dual
where mod(level,2)=1
connect by level<100
--查询本月所有周末
select trunc(sysdate,'mm')+level-1
from dual
where to_char(trunc(sysdate,'mm')+level-1,'day')
in('星期六','星期日')
connect by level<=to_char(last_day(sysdate),'dd')
--查询今年所有的星期五
select trunc(sysdate,'yyyy')+level-1
from dual
where to_char(trunc(sysdate,'yyyy')+level-1,'day')
in('星期五')
connect by level<=add_months(trunc(sysdate,'yyyy'),12)-
trunc(sysdate,'yyyy')
--查询2005-2018年所有的年月,月初,月末
select to_char(add_months(date'2005-1-1',level-1),
'yyyy"年"mm"月"') 年月,
add_months(date'2005-1-1',level-1) 月初,
last_day(add_months(date'2005-1-1',level-1)) 月末
from dual
connect by level<=months_between(date'2019-1-1',
date'2005-1-1')
--查询2008年所有的周一到周五
select date'2008-1-1'+level-1 日期,
to_char(date'2008-1-1'+level-1,'day') 星期
from dual
where to_char(date'2008-1-1'+level-1,'day') not in ('星期六','星期日')
connect by level<=to_char(date'2008-12-31','ddd')
4.一行转多行
创表:
create table abc(a varchar2(20));
insert into abc values('aaa,bbb,ccc,ddd,eee');
commit;
select * from abc;
select substr(a,4*level-3,3) --4*level-3是由4*(level-1)-1推导过来的
from abc
connect by level<=(length(a)+1)/4
总结规律,如果每个部分有n位
select substr(str,(n+1)*level-n,n)
from dual
connect by level<=length(replace(str,','))/n
如果没有分隔符,每n位换一行
select substr(str,n*level-(n-1),n)
from dual
connect by level<=ceil(length(str)/n)
--把'abcdefghijklmn'每3位换一行显示
select substr('abcdefghijklmn',3*level-2,3)
from dual
connect by level<=ceil(length('abcdefghijklmn')/3)
---------------------------------------------------------------------------------------------------------------------
·rownum
select *
from emp
where rownum=1
select *
from emp
where rownum=2
--推导出:必须从1开始并且是连续的
--拓展:查询emp表第二行的数据
select *
from (select e.*,rownum r
from emp e)
where r=2
--查询emp表的前五行
select *
from emp
where rownum<6
--查询emp表6-10行
select *
from (select e.*,rownum a from emp e)
where a between 6 and 10
--查询工资最高的前5人
select *
from (select * from emp order by sal desc)
where rownum<=5
--查询工资最高的6-10名
select *
from (select e.*,rownum c from (select * from emp order by sal desc) e)
where c between 6 and 10
查emp表第一条到第十条数据
select *
from (select e.*,rownum a
from emp e)
where a between 1 and 10
--假设我们将这第一条到第十条当做第一页,
--第二页是第十一条到第二十条为第二页以此类推,
--我们要怎么做,肯定不能每次都改代码(引出宏代换的理论)
--ROWNUM主要用在分页查询
--宏代换:&a
select &a
from dual
--宏代换可以显示手动输入的内容
--所以像刚才那题我们可以:
select * --(板书)
from (select e.*,rownum r
from emp e)
where r between &a*10-9 and &a*10 --这里是伪列转真列
--结论:这里的宏代换我们是手动输入的,
--第一页我们就输入1,所以我们想要一页显示多少行,
--我们就用between 宏代换*要显示的行数-(要显示的行数-1)
--and 宏代换&要显示的行数.像这里是十行就为between &a*10-9
--and &a*10,如果三行就为between &a*3-2 and &a*3,
--归纳为:&a*n-(n-1) and &a&n(n为要显示的行数)
--按照工资由多到少排序,每页4人
select *
from (select rownum h,e.* from (select * from emp order by sal desc) e
)
where h between &a*4-3 and &a*4
伪列┌LEVEL┌树形查询返回节点深度
│ ├控制显示格式
│ ├生成多条记录
│ └一行转多行
├ROWNUM 分页查询
└ROWID 去除重复数据
数据库语言
DQL 数据查询语言 :简单查询、限定查询、树形查询、子查询、表连接、集合、、、、
DCL 数据控制语言┌GRANT 赋权
└REVOKE 回收权限
DDL 数据定义语言 创建create、删除drop、修改alter、、、、
DML 数据操作语言┌插入数据 INSERT
├更新数据 UPDATE
├删除数据 DELETE
└合并数据 MERGE
TPL/TCL 事务处理/控制语言┌提交 COMMIT
└回滚 ROLLBACK
-----------------------------------------------------------------------------------------------------------------------------------------------------
DCL 数据控制语言 用处一般是给用户赋权和回收权利
dba权限是数据库最高权限
dba: dba权限或最高权限,只有数据库管理员(dba)可以赋权和回收权限
授权: GRANT 权限 TO 用户;
回收权限:REVOKE 权限 FROM 用户;
从命令窗口连接数据库的语法 : Cmd打开命令窗口
sqlplus / as sysdba --sysdba是个用户(有dba权限的用户) --我们现在是以sysdba的身份登录oracle
给scott用户赋dba权限,在scott用户下查询hr用户的表 --我们油桶现在是用scott连接数据库
收回scott用户赋dba权限,在scott用户下查询hr用户的表
观察区别
--注在连接数据库的情况下,更改权限是不会立即生效的,需要退出数据库重新登陆(切换用户再切回来)
-----------------------------------------------------------------------------------------------------------------------------------------------------
ddl的概念:可以创建表、修改表(不是修改数据、是修改属性,比如表的名字、表的列数、表的列的格式;对表数据进行修改的是其他的语言)
DDL 数据定义语言(创建 create,修改 alter,删除 drop)
┌表 TABLE
├视图 VIEW
└序列 SEQUENCE
可以对表和视图、序列进行操作,是一种大层次的定义方面的语言。
而对数据层面进行修改的就不是ddl。(对数据修改是dml)
--表
·表┌创建表
├表的重命名
├清空表
├修改表
└删除表
一:创建表
1.复制表(可以只复制表格式也可以复制表)语法:
create table 表名 as select语句;
create table emp3 as select * from emp where 1=2;
--创建emp3数据同emp工作为CLERK的员工信息
create table emp3 as select * from emp where job='CLERK';
select * from emp3
--创建emp10、emp20、emp30三张表,
--表数据分别为10部门20部门30部门的数据
create table emp10 as select * from emp where deptno=10;
create table emp20 as select * from emp where deptno=20;
create table emp30 as select * from emp where deptno=30;
命名规则
驼峰式 HuaXiaJinLing
下划线式 hua_xia_jin_ling
2.手动创建表
字段类型:┌数值型 number,int
├字符型 char,varchar/varchar2
└日期型 date
└ 大数据类型(暂时用不到)
语法结构:create table 表名 (列1 类型长度 [约束],列2 类型长度 [约束]...)
数据类型
·数值型
number[(数1[,数2])]
数1是长度,数2是小数位数,数2不写默认没有小数,
number类型会四舍五入。
数1最大38,就是说number的精度最大是38位
数1不写,最多可以存126位,但是精度仍然是38
除了number之外还有int↓ 放整数的。
int
只能存整数,相当于number(22)
·字符型
char[(数)] 定长字符
最多存储2000个字节的定长字符,数不写,默认1
位数不足用空格补齐.
比如char(10)存了一个9位的字符,最后一位用空格补齐
--读取快,可能会浪费空间
varchar/varchar2(数) 可变长字符
varchar是定长字符,最多存储2000个字节,varchar2是可变长字符,
最多存储4000个字节的可变长字符,数不能不写
位数不足,直接存储
--读取比char略慢,不浪费空间
--当列中值存在大量空的时候varchar2比char读取要快
·日期型
date 我们用lengthb(日期)看emp表中日期的字节长度
!由一个(9)个字节组成的定宽日期、时间类型。
包含7个属性:
世纪、年、月、日、时、分、秒
不会浪费空间。
2018-8-1 10:00:00
这就是21世纪 、18年、8月、1日、10时、0分、0秒
timestamp 时间戳 --stamp:邮票,邮戳
比date存储更精确的时间,还存储了时区,书写格式基本上和date一直
select systimestamp from dual
select to_timestamp('2020-1-1 2:10:30.200','YYYY_MM_DD hh24:mi:ss.ff')
from dual
select timestamp'2020-1-1 2:10:30.200'
from dual
还有一个是大数据类型,分两种 CLOB和BLOB。
·大对象的类型(大数据类型)
BLOB 储存二进制大对象 用二进制存储 如:保存位图--(图片)
4GB*数据块大小比如说装一个大的图片、一部电影,
这些都能装到数据库当中
因为数据库不止除了小的数据,
有时候也会处理大型数据
CLOB 储存字符大对象 用char来存储 如:保存xml文件 --(XML是可延伸标记语言的缩写形式,很多网页都是.xml文件) 4GB*数据块大小
--创建学生表
create table student(
stu_id number(4)
,stu_name varchar2(4000)
,stu_sex varchar2(6)
,stu_class varchar2(20)
,stu_bith date
,stu_pic blob
);
select * from student
--删除表
drop table 表名 [purge];
加上 purge 是物理删除
不加 purge 是逻辑删除,就是把表放进回收站(recyclebin)
--查看回收站
select * from user_recyclebin;
drop table stu_1 purge; --物理删除stu_1
drop table stu_2; --逻辑删除stu_2
--从回收站闪回删除的表
flashback table emp10 to before drop;
flashback table stu_2 to before drop;
select * from emp10;
--闪回表的时候也可以用对象名
---用对象名闪回的时候记得加双引号
flashback table “ 对象名” to before drop;
select * from stu_2;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
--清空表数据 ddl的清空表之后数据无法找回!!!!!!!!!!!!只有dml操作时才能找回
truncate table 表名;
truncate table emp10;
--修改表:
1. 修改表名的语法:
rename 旧表名 to 新表名;----
rename emp10 to emp40;
select * from emp40;
2. 增加列的语法:
alter table 表名 add (列1 类型长度,列2 类型长度...);
alter table emp40 add(a varchar2(20),b number);
select * from emp40;
3. 修改列的类型的语法:
alter table 表名 modify 列名 (修改后的)类型长度
create table emp101 as select * from emp ---!
select * from emp101
alter table emp101 modify ename number(20) ---!
注意事项:
同类型修改变长,直接修改
同类型修改变短,不能短于已有数据最长长度。
不同类型的修改,则此列必须为空
4.删除列的语法:
alter table 表名 drop (列1,列2);--删除多列
或
alter table 表名 drop column 列名;--删除一个列
alter table student drop(aa,b); ----!说明做了什么操作
alter table student drop column stu_pic; ---!
5.修改列名的语法:
alter table 表名 rename column 旧列名 to 新列名;
alter table student rename column a to aa; ------!
小结:
dcl ┌ grant 赋权
└ revoke 回收权利
ddl┌创建表┌ 复制表/复制表格式
│ └ 手动创建表
└删除表┌ 逻辑删除
│ └ 物理删除
└清空表 --无法撤回
└ 修改表┌ 表重命名
└ 增加列
└ 删除列
└ 修改列类型
└ 修改列名
约束部分
·约束 constraint
约束的作用
!!用来确保数据满足业务规则的手段,
约束是保障数据合理性的最后一道防线
约束可以限制插入的数据,就是可以防止有不符合规则的
数据插入进来,如果不满足的话约束会阻止你的操作,
也就是报错,会说插入数据不符合约束,也就是不符合规则
约束的分类
1主键约束 primary key 唯一且非空 --一张表只能有一个主键
2非空约束 not null 非空
3唯一约束 unique 唯一(可以有空)
4检查约束 check() 给它一个条件 --后面会有括号,里面写一个条件
5外键约束 foreign key
6默认值 default 当列中值为空时,变成default的值
默认值可以算做一个约束,因为语法和创建约束差不多。--可说可不说
默认值约束并不会限制什么,当没有给他值的时候,他会默认给你一个值。
1. 主键约束用于定义基本表的主键,起唯一标识作用,
其值不能为NULL,也不能重复,以此来保证实体的完整性。
PRIMARY KEY与UNIQUE约束类似,通过建立唯一索引来保证基本表
在主键列取值的唯一性,但它们之间存在着很大的区别:
①在一个基本表中只能定义一个PRIMARY KEY约束,
但可定义多个UNIQUE约束;
②对于指定为PRIMARY KEY的一个列或多个列的组合,
其中任何一个列都不能出现空值,
而对于UNIQUE所约束的唯一键,则允许为空。
注意:不能为同一个列或一组列既定义UNIQUE约束,
又定义PRIMARY KEY约束。
2. 唯一性(UNIQUE)约束用于指明基本表在某一列或多个列的
组合上的取值必须唯一。
定义了UNIQUE约束的那些列称为唯一键,
系统自动为唯一键建立唯一索引,从而保证了唯一键的唯一性。
唯一键允许为空,但系统为保证其唯一性,
最多只可以出现一个NULL值。
UNIQUE既可用于列约束,也可用于表约束。
UNIQUE用于定义列约束时,其语法格式如下:
[CONSTRAINT <约束名>] UNIQUE
唯一性约束用于指定一个或者多个列的组合的值具有唯一性,
以防止在列中输入重复的值。当使用唯一性约束时,
需要考虑以下几个因素:
①使用唯一性约束的字段允许为空值。
②一个表中可以允许有多个唯一性约束。
③可以把唯一性约束定义在多个字段上。
④唯一性约束用于强制在指定字段上创建一个唯一性索引。
unique约束是用来确保不受主键约束列上的数据的唯一性.
unique与primary key的区别在于:
(1)unique约束主要用于非主键的一列或多列上要求数据唯一.
(2) unique约束允许该列上存在NULL值,而主键决不允许出现.
(3)可以在一个表创建多个unique约束,而在一个表上只能够设
置一个主键
3. 检查约束
CHECK约束用来检查字段值所允许的范围,如,一个字段只能输入
整数,而且限定在0-100的整数,以此来保证域的完整性。
当执行INSERT语句或者UPDATE语句时,检查约束将验证数据。
5. 外部键约束
外部键约束用于强制参照完整性,提供单个字段或者多个字段的
参照完整性。 FOREIGN KEY约束指定某一个列或一组列作为外部键,
其中,包含外部键的表称为从表(参照表),包含外部键所引用的
主键或唯一键的表称主表(被参照表)。
系统保证从表在外部键上的取值要么是主表中某一个主键值或
唯一键值,要么取空值。以此保证两个表之间的连接,
确保了实体的参照完整性。
6. NULL 约束
(1)NULL/NOT NULL
是否允许该字段的值为NULL。
NULL值不是0也不是空白,更不是填入字符串“NULL”,
而是表示“不知道”、“不确定”或“没有数据”的意思。
当某一字段的值一定要输入才有意义的时候,
则可以设置为NOT NULL。
如主键列就不允许出现空值,
否则就失去了唯一标识一条记录的作用
---------------------------------------------------------------------------------------------------------------------------------------------------
--创建约束的语法:
--非列模式,不带约束名
语法:
create table 表名(字段名1 字段类型 约束,
字段名2 字段类型 约束,
字段名3 字段类型 约束,
...
)
实例: 约束后面写
create table stu_1(
stu_id number(4) primary key
,stu_name varchar2(4000) not null
,stu_sex varchar2(6) check(stu_sex in('男','女','其他')) --或者check(substr(c,1,1)='A')
,stu_idcard char(18) unique not null --一个列可以加多个约束,not null写在最后
,stu_bith date default date'2000-1-1'
);
建好之后我们可以刷新左边对象,找到表右键查看
如果创建约束时没有给名字,系统会默认取名sys_开头!!
--注意:
--检查约束检查的列是他约束的列,
--他约束的列的字段类型要和条件的字段类型一致,
--比如被约束的字段类型为varchar2,
--那他的条件就不能为between 1 and 100
--一个列可以添加多个约束,not null写在最后
--创建一张表 表名叫test4至少有五个列
--包含主键 非空 唯一 检查约束 还有默认值
-----------------------------------------------------------------------------------------------------------------------------------------------------
--非列模式,带约束名
语法: 约束↓
create table 表名(字段名1 字段类型 constraint 约束名 约束,
字段名2 字段类型 constraint 约束名 约束,
字段名3 字段类型 constraint 约束名 约束,
...
)
create table stu_2(
stu_id number(4) constraint pk_nana primary key
,stu_name varchar2(4000) constraint nn_lala not null
,stu_sex varchar2(6) constraint ck_lulu check(stu_sex in('男','女','其他'))
,stu_idcard char(18) constraint un_lili unique constraint nn_kiki not null --一个列可以加多个约束,not null写在最后
,stu_bith date default date'2000-1-1' --默认值不能取名字
);
--创建一张表 表名叫test5 至少有五个列
--包含主键 非空 唯一 检查约束 还有默认值
--要求有约束名
-----------------------------------------------------------------------------------------------------------------------------------------------------
--列模式,不带约束名
语法:
create table 表名(字段名1 字段类型,
字段名2 字段类型,
字段名3 字段类型,
...
约束(字段1),
约束(字段2),
约束(字段3),
...
)
实例:--(板书)
create table stu_3(
stu_id number(4)
,stu_name varchar2(4000)
,stu_sex varchar2(6)
,stu_idcard char(18)
,stu_bith date default date'2000-1-1'
,primary key(stu_id)
,check(stu_name is not null)
,check(stu_sex in('男','女'))
,unique(stu_idcard)
,check(stu_idcard is not null)
);
--默认值不能用于列模式、非空列模式要转成检查
--列模式,带约束名
语法: 区别是在表创好了后在最后的地方增加约束
create table 表名(字段名1 字段类型,
字段名2 字段类型,
字段名3 字段类型,
...
constraint 约束名 约束(字段1),
constraint 约束名 约束(字段2),
constraint 约束名 约束(字段3),
...
)
实例:--(板书)
create table stu_4(
stu_id number(4)
,stu_name varchar2(4000)
,stu_sex varchar2(6)
,stu_idcard char(18)
,stu_bith date default date'2000-1-1'
,constraint pk_1 primary key(stu_id)
,constraint nn_1 check(stu_name is not null)
,constraint ck_1 check(stu_sex in('男','女'))
,constraint un_1 unique(stu_idcard)
,constraint nn_2 check(stu_idcard is not null)
);
--外键约束和复合主键只能用列模式创建
复合主键(组合主键),多个列合在一起充当主键,
起到唯一且非空的限制作用
比如 PRIMARY KEY(员工姓名,部门编号)
复合主键(组合主键) --(板书)
多个列合在一起充当主键,起到非空且唯一的作用
create table test7(
a number,
b number,
c number,
d date,
e char,
primary key(a,b,c), --a字段和b字段和c字段合在一起后的结果非空且唯一
unique(b),
check(c is not null),
check(d=date'2020-1-1'))
外键约束 --只能用列模式创建
外键约束需要两张表.创建外键约束的表是子表,参考表是父表
创建外键约束的列叫外键列,参考表的参考列必须是父表的主键列
外键约束的作用是:外键列中的值必须是父表的主键列
中存在的 在emp的deptno列建立了外键约束连接到了
dept的主键列(deptno列)
子表emp的deptno列的值必须在父表dept表的主键列
(deptno列)中存在。
否则报错,插不进去
语法: 必须是主键列
[constraint 外键约束名] foreign key(外键列) references 父表(主键列)
[on delete cascade|on delete set null] --foreign 外部的,references 参照
alter table 表名 add constraint fk1 foreign key(deptno) refereces dept(deptno) --增加一个外键约束
--创建emp1 包含三个列,empno,ename,deptno(参照emp表),它的deptno上创建外键约束,参考dept的deptno(问题)
CREATE TABLE emp1(
empno number
,ename VARCHAR2(20)
,deptno NUMBER(2)
,CONSTRAINT fk_1 FOREIGN KEY(deptno) REFERENCES dept(deptno) ON DELETE SET NULL);
┌级联删除 on delete CASCADE
├级联删除为空 on delete SET NULL
└不指定级联删除 on delete NO action --默认
注意事项
·外键列可以为空,也可以不唯一
·删除父表的数据时,
如果不指定级联删除,必须先删除子表的相关项,
再删除父表的对应行
如果指定了级联删除,子表的相关项和父表的对应行一起被删除
如果指定了级联删除为空,父表的对应行被删除,
子表的相关项还在,外键列的值变成空 deptno列变成空
·插入/更新到子表的外键列的数据必须是父表主键列里存在的
·插入到父表主键列的数据没有限制(只需要符合主键约束)
--创建emp2 包含三个列,empno,ename,deptno(参照emp表),
--它的deptno上创建外键约束,参考dept1的deptno
--这种情况执行会报错,因为dept1是直接从dept复制过来的,
--deptno并不是他的主键,所以会报错,
--需要执行添加主键约束的语句
create table emp2(
empno number
,ename varchar2(20)
,deptno number(2)
,constraint fk_1 foreign key(deptno)
references dept1(deptno) on delete set null);
--增加约束 --也是ddl
alter table 表名 add [constraint 约束名] 约束类型(列);
alter table student add constraint pk_2 primary key(stu_id);
--约束重命名
alter table 表名 rename constraint 旧名字 to 新名字;
alter table student rename constraint pk_2 to pk_3;
--约束的启用和禁用 --当我要插入大量的数据时,
--约束都会去检查是否符合,消耗资源浪费时间。
alter table 表名 disable|enable [validate|novalidate] constraint 约束名; 禁用 启用
alter table student disable constraint pk_3;
↓
·约束的四种状态
enable validate : 正常地启用约束 --新数据和旧数据都要符合约束 --validate:正确的,有效的
enable novalidate : 不正常地启用约束 --表中可以有不合约束的状态,新数据必须符合约束,只对检查约束可以用
disable novalidate : 正常地禁用约束 --约束失效,可以输入不符合约束的值
disable validate : 锁表 --不能对全表进行插入、更新、删除
--修改非空、默认值、列的类型长度 --modify 修改
语法:
alter table 表名 modify 列名 类型长度 [[default 值] [not null| null]];
实例1:alter table stu_1 modify stu_bith number default 666 not null; --改为非空默认值
实例2:alter table stu_1 modify stu_bith varchar2(10) default null; --改为非空列长度
·要修改列的类型,该列必须为空
·要把列修改成可为空,该列必须现在是非空,反之亦然
·varchar2的长度可以改长,如果要改短,必须不短于该列已有数据的最长长度
·number要修改长度,必须此列为空
--删除约束
alter table 表名 drop constraint 约束名;
alter table stu_1 drop constraint sys_c0011970;
--练习
--1.给emp100的empno列增加一个主键约束
--2.给emp100的ename列增加一个唯一约束
--并起名为un100
--3.删除第二问增加的唯一约束
--4.将hiredate列修改为不可为空
--5.给deptno列设置默认值为10
小结:
dcl┌赋权 grant 权限 to 用户;
└回收权限 revoke 权限 from 用户;
ddl┌表┌创建表┌复制表 create table 表名 as select语句;
│ │ └手动创建┌create table 表名 (列 类型长度 [约束],列 类型长度 [约束]..)
│ │ ├数据类型 数值型 number int 字符型 char varchar/varchar2 日期型 date timestamp 大对象 clob blob
│ │ └约束 主键 pk 外键 fk 唯一 un 非空 nn 检查 ck 默认值 default
│ ├表重命名 rename 旧表名 to 新表名
│ ├清空表 truncate table 表名
│ ├修改表┌增加列 alter table 表名 add (列 类型长度,列 类型长度 )
│ │ ├列重命名 alter table 表名 rename column 旧列名 to 新列名
│ │ ├修改列的类型长度/默认值/是否可为空
│ │ │ alter table 表名 modify 列名 类型长度 default 值 not null|null
│ │ ├删除列 alter table 表名 drop (列1,列2..)
│ │ │ 或 alter table 表名 drop column 列
│ │ ├增加约束 alter table 表名 add constraint 约束名 约束类型(列)
│ │ ├约束重命名 alter table 表名 rename constraint 旧约束名 to 新约束名
│ │ ├启用和禁用 alter table 表名 disable|enable [validate|novalidate] 约束名
│ │ └删除约束 alter table 表名 drop constraint 约束名
│ └删除表┌drop table 表名 [purge]
│ ├查看回收站 select * from user_recyclebin
│ ├回收站闪回表 flashback table 表名 to before drop
│ └清空回收站 purge recyclebin
├视图
└序列
dml┌插入数据 insert into
├更新数据 update set
├删除数据 delete from
└合并数据 merge into
tpl┌提交 commit
└回滚 rollback