字符串大小写敏感
Insert into t2(c1) values('BEIJING ');
Insert into t2(c1) values('beijing ');
主健是通过索引实现
索引的名称和约束的名称相同
删除节点,下级保留
select level,empno,ename,mgr from emp
where ename<>'BLAKE'
start with (ename='KING')
connect by prior empno=mgr;
BLAKE 一个人删除,不影响他的下属
删除枝干
select level,empno,ename,mgr from emp
start with (ename='KING')
connect by prior empno=mgr
and ename<>'BLAKE';
BLAKE 和他的整个部门
将回收站的表还原
FLASHBACK TABLE t2 TO BEFORE DROP;
Primary key 主健约束
一个表只能有一个主健
主健要求唯一并且非空
可以是联合主健,联合主健每列都要求非空
主健能唯一定位一行,所以主键也叫逻辑 rowid
主健不是必需的,可以没有
主健是通过索引实现的
索引的名称和主健名称相同
外键约束的作用,是保证字表某个字段取值
全都与另一个数据表主键字段相对应。也就是说,只要外键约束存在
并有效,就不允许无参照取值出现在字表列中。
指定在表的列上
引用本表其它列,或其它表的其它列
被引用的列得有唯一约束或者主健约束,因为引用的是索引的键值,而不是真正的表。
目的是维护数据的完整性
核心是一列是另外一列的子集,null 除外
建立被级连的外健
alter table e add constraint fk_e foreignkey (deptno) references d(deptno) ;
alter table e add constraint fk_e foreignkey (deptno)
references d(deptno) on delete set null;
alter table e add constraint fk_e foreignkey (deptno)
references d(deptno) on delete cascade;
intersect
将t1 的结果和t2 的结果的共有部分显示。
含有排序操作,也去掉重复的行。
Group by Rollup(a,b,c,d)
的结果集为,共n+1 个集
Group by a,b,c,d
Union all
Group by a,b,c
Union all
Group by a,b
Union all
Group by a
Union all
Group by null
Grouping(列名称)的使用,为了表达该列是否参加了分组活动。
0 为该列参加了分组,1 为该列未参加分组操作
selectdeptno,job,grouping(deptno),grouping(job),sum(sal)
from emp group by rollup(deptno,job);
Cube 分组
select deptno,job,grouping(deptno),
grouping(job) ,sum(sal) from emp group bycube(deptno,job);
结果集为,2**n个结果集
select deptno,job,sum(sal) from emp groupby deptno,job
union all
select deptno,null,sum(sal) from emp groupby deptno
union all
select null,job,sum(sal) from emp group byjob
union all
select null,null,sum(sal) from emp;
使用隐式游标的属性来控制dml,有四种隐式的游标。
SQL%ROWCOUNT
SQL%FOUND
SQL%NOTFOUND
SQL%ISOPEN
分支
IF-THEN-END IF
IF-THEN-ELSE-END IF
IF-THEN-ELSIF-END IF
IF condition THEN
statements;
[ELSIF condition THEN
statements;]
[ELSE
statements;]
END IF;
Case 语句
DECLARE
v1 CHAR(1) := UPPER('&v1');
v2 VARCHAR2(20);
BEGIN
v2 :=CASE v1
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Very Good'
WHEN 'C' THEN 'Good'
ELSE 'No such grade'
END;
DBMS_OUTPUT.PUT_LINE ('级别为: '|| v1|| ' 是 ' || v2);
END;
LOOP:
Declare
V1 number(2) :=1;
Begin
Loop
Insert into t1 values(v1);
v1:=v1+1;
Exit When v1>10 ;
End loop;
End;
While 循环,先判定条件,每次循环时条件都要变化,如果不变化就是死循环。
Declare
V1 number(2) :=1;
Begin
While v1<10 Loop
Insert into t1 values(v1);
v1:=v1+1;
End loop;
End;
/
For 循环,pl/sql 中的最常见的循环,是和游标操作的绝配。方便而直观。
begin
for v1 in 1..9 loop
Insert into t1 values(v1);
end loop;
end;
%rowtype 记录结构
前缀为表的名称
内部域的属性为表中列的数据类型
域的名称为列的名称
便于存储表的一行
V1 emp%rowtype;
V2 dept%rowtype;
使用记录
set serveroutput on
declare
v1 dept%rowtype;
begin
select * into v1 from dept where rownum=1;
dbms_output.put_line(v1.deptno);
dbms_output.put_line(v1.dname);
dbms_output.put_line(v1.loc);
end;
停止数据库的四种模式
该实验的目的是区分不同的停止数据库的方式.
四种停止数据库的方式各不相同,用于不同的情况,一般我们采用 shutdown immediate 方式停止数据
库,下面是每种停止数据库方式的差别.
Shutdown NORMAL
Shutdown TRANSACTIONAL
Shutdown IMMEDIATE
Shutdown abort
Shutdown NORMAL
新的会话不接受
等待非活动的会话结束
等待事物结束
产生检查点
停止数据库
Shutdown TRANSACTIONAL
新的会话不接受
不等待非活动的会话结束
等待事物结束
产生检查点
停止数据库
Shutdown immediate
新的会话不接受
不等待非活动的会话结束
不等待事物结束
产生检查点
停止数据库
Shutdown abort
新的会话不接受
不等待非活动的会话结束
不等待事物结束
不产生检查点
停止数据库
一致性 shutdown,产生检测点
Shutdown NORMAL
Shutdown TRANSACTIONAL
Shutdown IMMEDIATE
数据库再次启动的时候不要恢复
不一致性 shutdown,不产生检测点
Shutdown abort
Startup force
Instance 崩溃(停电)
数据库再次启动的时候需要恢复,自动的,透明的。