深度优先

这个家伙好懒,除了文章什么都没留下

0%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
--1、什么是游标
select * from scott.emp where deptno = 30
--表中都与行的数据

--2、游标的分类
--静态和引用
--静态游标:隐式和显式

--3、游标的属性

--4、游标的语法
--隐式语法
--不用打开,不用关闭,不用声明,它会在执行DML语句的时候,自动添加,当需要使用直接取值
--更新部门编号为30的所有员工工资加10%,返回受影响的行数
begin
update scott.emp set sal = sal * 1.1 where deptno = 30;
--使用隐式游标输出受影响的行数
dbms_output.put_line('修改成功条数:'|| SQL%Rowcount);
end;

--显式语法
declare
--1定义游标
cursor mycur is select empno,ename,sal from scott.emp where deptno =30;
theempno number;
thename varchar(20);
thesal scott.emp.sal%TYPE; --使用和scott.emp.sal同样的数据类型
begin
--2打开游标
open mycur;
loop
--3使用游标
fetch mycur into theempno,thename,thesal;
exit when mycur%notfound; --退出循环的条件
dbms_output.put_line('编号:'||theempno||'姓名:'||thename||'工资:'||thesal);
end loop;
--4关闭游标
close mycur;
end;

--带参数的显式游标
declare
--1定义游标(并且给游标带参数)
cursor mycur(mydept number) is select empno,ename,sal from scott.emp where deptno = mydept;
thedept number := 1;
theempno number :=1;
thename varchar(20);
thesal scott.emp.sal%TYPE; --使用和scott.emp.sal同样的数据类型
begin
thedept := &请输入一个部门编号;
--2打开游标
open mycur(thedept);
loop
--3使用游标
fetch mycur into theempno,thename,thesal;
exit when mycur%notfound; --退出循环的条件
dbms_output.put_line('编号:'||theempno||'姓名:'||thename||'工资:'||thesal);
end loop;
--4关闭游标
close mycur;
end;


--循环游标
declare
cursor mycur is select empno,ename,sal from scott.emp where deptno =30;
begin
for i in mycur
loop
dbms_output.put_line('编号:'||i.empno||'姓名:'||i.ename||'工资:'||i.sal);
end loop;
end;

数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
--创建表空间
create tablespace stu
datafile 'd:\stu.dbf'
size 5m
autoextend on

--创建用户名
create user stu
identified by stu

grant connect to stu

grant resource to stu

create table stuInfo --学生信息
(
stuID number primary key,
stuName varchar2(10),
stuSex char(2)
);
insert into stuInfo values(1,'Eric','男');
insert into stuInfo values(2,'Mike','男');
insert into stuInfo values(3,'Lily','女');
insert into stuInfo values(4,'Lucy','女');
create table subInfo --课程信息
(
subID number primary key,
subName varchar2(20)
);
insert into subInfo values(1,'C语言');
insert into subInfo values(2,'SQL基础');
insert into subInfo values(3,'JAVA');

create table markInfo --成绩信息
(
stuID int references stuInfo(stuID),
subID int references subInfo(subID),
score number(3),
primary key (stuID,subID)
);
insert into markInfo values(1,1,98);
insert into markInfo values(1,2,90);
insert into markInfo values(1,3,80);
insert into markInfo values(2,1,50);
insert into markInfo values(2,2,40);
insert into markInfo values(2,3,60);
insert into markInfo values(3,1,70);
insert into markInfo values(3,2,95);

select * from stuinfo
select * from subInfo
select * from markInfo

同义词

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--1、什么同义词 
--别名

--2、作用
--简化对象的名字
select * from myemp

--3、创建语法
create public synonym myemp for scott.emp

--4、删除语法
drop public synonym myemp

select * from stuinfo
select stuid as 编号,stuname 姓名 from stuinfo

序列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
--1、什么是序列?
--标识列,自动增长
--sql server:identity(1,1)
--oracle:sequence

--2、作用,等同于identity,为编号字段,提供自增长

--3、语法
select * from stuinfo

create sequence myseq
increment by 1 --步长
start with 1001 --初始值
maxvalue 100-- 无上限
minvalue 1
cycle

create table stuInfo1 --学生信息
(
stuID number primary key,
stuName varchar2(10),
stuSex char(2)
);

insert into stuinfo1 values(myseq.nextval,'葬爱K','男')
insert into stuinfo1 values(myseq.nextval,'葬爱Q','女')
insert into stuinfo1 values(myseq.nextval,'葬爱A','男')
insert into stuinfo1 values(myseq.nextval,'葬爱B','女')

insert into stuinfo values(myseq.nextval,'葬爱Q','女')

select * from stuinfo1

--4.删除序列
drop sequence myseq

--5、查询序列值
select myseq.currval from dual

视图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
--1、什么是视图?
--虚拟表

--2、作用
--1)简化,复杂的表查询
--2)保密,视图名字不能推断表名
--3) 缓冲,合作开发

--创建视图之前要先授权
grant dba to stu
revoke dba from stu

--创建视图
create view empinfo
as
select * from stuinfo666

--查询视图
select * from empinfo
--drop view empinfo

索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
--1、什么是索引?
--提高查询效率

select * from stuinfo where stuname = 'eric'
stuid --聚集索引(主键)
stuname --非聚集(where条件中的字段)
stusex --非聚集

--2、索引分类
--普通索引
create index Instuid on stuinfo(stusex)

--组合索引
create index innamesex on stuinfo(stuname,stusex)

--唯一索引
create unique index inid on stuinfo(stuname)

数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
--创建表空间(数据库)
create tablespace Test
datafile 'c:\Test.dbf'
size 10m
autoextend on

--创建用户
create user mike
identified by mike123
default tablespace Test

--给用户授权
grant connect to mike;
grant resource to mike

--切换用户6
--创建学生信息表
create table stuinfo
(
id number(3) primary key,
name varchar2(20) not null,
sex varchar2(2) check(sex='男'or sex='女') not null,
age number(2) check(age>0),
address varchar2(20) default('湖北武汉'),
birthday date
);

insert into stuinfo2 values(1,'eric','男',18,default,to_date('1995-10-11','yyyy-mm-dd'));
insert into stuinfo2 values(2,'lily','男',28,default,to_date('1985-10-11','yyyy-mm-dd'));
insert into stuinfo2 values(3,'chunchun','女',58,default,to_date('1965-10-11','yyyy-mm-dd'));
insert into stuinfo2 values(4,'eric888','男',null,default,to_date('1995-10-11','yyyy-mm-dd'));
insert into stuinfo2 values(5,'葬爱K','女',16,default,to_date('2000-9-11','yyyy-mm-dd'));
insert into stuinfo2 values(6,'葬爱Q','男',null,default,to_date('1999-8-11','yyyy-mm-dd'));
insert into stuinfo2 values(7,'葬爱S','男',null,default,to_date('1993-1-11','yyyy-mm-dd'));
select * from stuinfo

分区表

–1、什么是分区表?

–对于超大规模的数据库进行分区数据存储,达到优化数据库的目的

–2、分区表的分类

–1)范围分区

–适用:明确的可以划分范围的,如:月份、编号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
create table stuinfo2
(
id number(3) primary key,
name varchar2(20) not null,
sex varchar2(2) check(sex='男'or sex='女') not null,
age number(2) check(age>0),
address varchar2(20) default('湖北武汉'),
birthday date
)
partition by range(id)
(
partition p1 values less than(3),
partition p2 values less than(5)
);

–查询分区数据

1
select * from stuinfo1 partition(p3);

–2)列表分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
create table stuinfo3
(
id number(3) primary key,
name varchar2(20) not null,
sex varchar2(2) check(sex='男'or sex='女') not null,
age number(2) check(age>0),
address varchar2(20) default('武汉'),
birthday date
)
partition by list(address)
(
partition p1 values('北京','上海','深圳'),
partition p2 values('武汉','郑州','长沙'),
partition p3 values(default)
);
insert into stuinfo3 values(1,'eric','男',18,default,to_date('1995-10-11','yyyy-mm-dd'));
insert into stuinfo3 values(2,'lily','男',28,default,to_date('1985-10-11','yyyy-mm-dd'));
insert into stuinfo3 values(3,'chunchun','女',58,'北京',to_date('1965-10-11','yyyy-mm-dd'));
insert into stuinfo3 values(4,'eric888','男',null,'深圳',to_date('1995-10-11','yyyy-mm-dd'));
insert into stuinfo3 values(5,'葬爱K','女',16,'西藏',to_date('2000-9-11','yyyy-mm-dd'));
insert into stuinfo3 values(6,'葬爱Q','男',null,'台湾',to_date('1999-8-11','yyyy-mm-dd'));
insert into stuinfo3 values(7,'葬爱S','男',null,'长沙',to_date('1993-1-11','yyyy-mm-dd'));
insert into stuinfo3 values(8,'葬爱A','男',null,'合肥',to_date('1993-1-11','yyyy-mm-dd'));
select * from stuinfo3 partition(p3)

–3)散列分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
create table stuinfo5
(
id number(3) primary key,
name varchar2(20) not null,
sex varchar2(2) check(sex='男'or sex='女') not null,
age number(2) check(age>0),
address varchar2(20) default('武汉'),
birthday date
)
partition by hash(id) --指定散列分却
partitions 4 --分区数量

insert into stuinfo5 values(1,'eric','男',18,default,to_date('1995-10-11','yyyy-mm-dd'));
insert into stuinfo5 values(2,'lily','男',28,default,to_date('1985-10-11','yyyy-mm-dd'));
insert into stuinfo5 values(3,'chunchun','女',58,'北京',to_date('1965-10-11','yyyy-mm-dd'));
insert into stuinfo5 values(4,'eric888','男',null,'深圳',to_date('1995-10-11','yyyy-mm-dd'));
insert into stuinfo5 values(5,'葬爱K','女',16,'西藏',to_date('2000-9-11','yyyy-mm-dd'));
insert into stuinfo5 values(6,'葬爱Q','男',null,'台湾',to_date('1999-8-11','yyyy-mm-dd'));
insert into stuinfo5 values(7,'葬爱S','男',null,'长沙',to_date('1993-1-11','yyyy-mm-dd'));
insert into stuinfo5 values(8,'葬爱A','男',null,'合肥',to_date('1993-1-11','yyyy-mm-dd'));

select * from stuinfo5 partition(sys_p24)
select * from stuinfo5 partition(sys_p25)
select * from stuinfo5 partition(sys_p26)
select * from stuinfo5 partition(sys_p27)

--查询分区信息
select * from user_tab_partitions

–4)复合分区

–复合 = 范围+列表 / 范围+散列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
create table stuinfo6
(
id number(3) primary key,
name varchar2(20) not null,
sex varchar2(2) check(sex='男'or sex='女') not null,
age number(2) check(age>0),
address varchar2(20) default('武汉'),
birthday date
)
partition by range(id)
subpartition by list(address)
(
partition p1 values less than(4)
(
subpartition p11 values('北京'),
subpartition p12 values('上海')
),
partition p2 values less than(maxvalue)
(
subpartition p21 values('武汉'),
subpartition p22 values('郑州')
)
)

insert into stuinfo6 values(1,'eric','男',18,'上海',to_date('1995-10-11','yyyy-mm-dd'));
insert into stuinfo6 values(2,'lily','男',28,'上海',to_date('1985-10-11','yyyy-mm-dd'));
insert into stuinfo6 values(3,'chunchun','女',58,'北京',to_date('1965-10-11','yyyy-mm-dd'));
insert into stuinfo6 values(4,'eric888','男',null,'深圳',to_date('1995-10-11','yyyy-mm-dd'));
insert into stuinfo2 values(5,'葬爱K','女',16,'西藏',to_date('2000-9-11','yyyy-mm-dd'));
insert into stuinfo2 values(6,'葬爱Q','男',null,'台湾',to_date('1999-8-11','yyyy-mm-dd'));
insert into stuinfo6 values(7,'葬爱S','男',null,'长沙',to_date('1993-1-11','yyyy-mm-dd'));
insert into stuinfo6 values(8,'葬爱A','男',null,'合肥',to_date('1993-1-11','yyyy-mm-dd'));

select * from stuinfo6 partition (p11)

—–分区表维护

–查询分区
select * from stuinfo2 partition (p2)

–增加分区
alter table stuinfo2
add partition p666
values less than(6)

select * from stuinfo2 partition (p666)

–删除分区
alter table stuinfo2 drop partition p666

–1、什么是数据库中的锁
–为了防止两个用户同时操作一条数据,而引起的数据不一致