我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > Oracle增删查改 day05
总共48086条微博

动态微博

查看: 1551|回复: 0

Oracle增删查改 day05

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-03 21:43:49 |只看该作者 |倒序浏览
复习:SQL语句
* N$ r% d$ O8 q  E: F, x- Dselect
) H' |$ P1 k/ bDML: insert / update / delete
6 y) O. a( ]6 ^. q. L. o
) ?2 K! {* r/ bCRUD. A$ f0 K- O& r" U% a
C:Create
5 X/ Y8 ^, f8 y- m# S, ~& ER: Retrive$ n0 \) n: @; }* K
U: Update8 u: X- Q/ S7 d7 z
D: Delete
, e% I3 Q3 R9 v& p8 m6 o
/ l# x2 B8 b4 x! _' c; lDDL: create / drop / truncate / alter+ F# H0 A' s4 D1 \) v; X

3 P% y: F. ^4 |! n  PTCL: commit / rollback / savepoint
: a6 q; [  H% `! R& Z- M) M1 @1 f7 p9 G3 r) Y- d. b; y; J
DCL: grant / revoke
% D; P' y' S( K( p4 ~/ B
$ d4 H+ ?& i  y! `. w) Q8 Fgrant: 赋予权限7 f. g% M' P9 T; d6 m7 k
revoke: 剥夺权限
% t) r; x" x+ k5 K数据库中的用户: openlab   hr    scott
) u! o# h! I( k+ C" b                 emp
# \/ I% P6 ^7 c; s" ~, C* U6 M1 d) c
8 |8 S  R8 f" r3 Z假设现在的用户是openlab
7 w) `- c) @* s& f# `+ xSQL>grant select on emp to scott;, T8 _& O) A/ ]0 q0 H4 g: c
SQL>revoke select on emp from scott;
7 o/ J# |4 L+ F4 C8 a) M5 a# _: Y2 E% @8 K" ~( j& ^' c
scott的会话:
2 a+ v& d0 q, P% `$ p+ U0 h- cSQL>select * from openlab.emp;
, }& F0 k% T% E7 ?' |SQL>select * from emp;- K; S. {/ k! R8 y7 a1 b# g! Y7 h
) B4 u$ ]; x1 h  u
. a8 K, T& J9 j; f3 a3 n% \
Oracle数据库的用户:$ K$ J5 x. ^" a% q; u0 w
sys
1 ]7 x' U2 }( L0 Tsystem: w1 M: ?4 Y6 }! u! t( m7 y0 z5 i

5 K! W- ~% Y  I3 Q; n3 vscott/tiger
5 X# i# ?& U: W+ X" H+ l$ zopenlab/open123: H0 P' W. r# {  z- O1 m8 ^
ninglj/******
1 S0 M& B. ~8 S" J4 M0 ^exam/exam123
9 n6 y8 `$ u& v6 ~" t- o+ @/ E+ c8 m, a! Z/ G" }9 S; g1 h
C:>sqlplus scott/tiger@192.168.0.26:1521/tarena) W7 P$ ]. g) S- ^  [( b
SQL>5 _# r* `3 v) k) O+ _
, N  u: h% s; d+ z6 Y. y

% e; B  h6 ]- V6 G今天的内容:
3 G- Z9 z4 ^2 P$ M1、约束条件3 D9 [3 r/ A( ]
2、数据库的其他对象) C* N9 o. F4 t" k1 V
! v8 h2 B! H" [. v
一、约束条件 Constraint  \; j3 r$ \! I
1。主键约束:Primary key, 简称PK& O6 M( e5 X7 E! c
--建表时增加主键约束条件
% L# }3 P4 q" n6 d; U! Ucreate table dept_ning1(# c2 q$ q! Z* j+ n- U& I
deptno number(2) primary key, --列级约束条件
) {/ K( J+ q9 |% e4 hdname varchar2(20),/ J" d! K0 Q8 z7 }& ~
location varchar2(40)
: U' l  u0 w$ L- j  W1 u, l  L);
  Y5 x# m* s! ?* sinsert into dept_ning1 : b, T  X6 I+ b8 ~/ Z
values(10,'developer','beijing');  J% K! e, P) }  y
insert into dept_ning1
" i8 b3 `$ T) M% a+ mvalues(10,'market','shenzhen');$ V+ \5 I$ P% b. w
--如果插入重复编码,会提示:6 f: i5 x" S" @& W, e" \
ORA-00001: unique constraint (NINGLJ.SYS_C00634053) violated9 Z) I9 y# [% N" @/ H# v
其中,SYS_C00634053是数据库自定义的主键名( C6 ]3 V5 _: f% I# T- L- B1 M
--约束条件如果没有显式命名,$ e/ z; C9 C0 o, E0 s+ ]6 o/ r6 w! S
数据库给约束条件命名:SYS_C*****
& K, H* N+ ]# s' M& l: D( Y) a6 p9 s1 u. G' [
--在建表时自定义约束条件名
% Q  e4 Y) |5 A--建议命名规则:表名_列名_约束条件的类型
) g: D9 y1 V* K5 B. Hcreate table dept_ning2($ ?) B' n$ ?9 j  |8 i
deptno number(2),. \. G9 B% k8 t  |: G. x
dname varchar2(20),) v% u4 N/ T" ~4 \3 j
location varchar2(40),3 T/ M# ?5 i0 U& `" R# K3 C
constraint dept_ning2_deptno_pk
7 i% T0 A6 I- A) R# dprimary key (deptno) --表级约束条件
+ E. [7 A# B8 D& I- U);9 }$ y$ d# @0 `+ y
--当插入重复编码时,会提示具体的约束条件名字错误。- @+ \- [! l+ E% p9 k% {4 K: F
--方便定位出错的原因
( j9 ~7 n" Z: L) V  q5 {, ]0 q% W
主键约束:primary key = 不能重复 + 不能为空
8 M0 H9 ]0 B$ p5 c! i* o6 A: M8 g
! _+ K3 L5 p1 h3 }6 g2、非空约束: not null,简称NN
  ~5 R0 k/ S$ u# A0 x" Q# ~学生姓名必须提供,但是可以重复
' f- }0 p/ ]6 K" J) l--只能定义在列级  h& m( t5 `: T4 f  v  O, S3 r* h
create table student_ning(0 H9 c& R1 l" ~/ a7 c
id number(4) primary key,
2 m; e; |  n% `2 m' kname varchar2(10) not null,
! X0 b% d5 i& P; z) {1 w( dage number(2)
% Z2 L* x4 ]* y2 J, r+ @);7 G6 K% \) U1 r) {% ~# y
insert into student_ning 2 ^, ]% `6 W, e& R& W- w# s# r! K
values(1, 'zhangwei', 20);$ w: C) F; b1 Z) z. P4 Q1 X1 y5 L
--名字可以重复2 C1 h$ ^! B( G- U) D
insert into student_ning 5 q3 G  d6 T) ~4 n- {4 N; _* `. z
values(2, 'zhangwei', 19);
* \' x' m  V, ?1 M, y" l" A--提示name列不能为NULL; f/ `9 Y4 \2 ^" _
insert into student_ning
4 P" j4 G) x$ Y. Z8 evalues(3, null, 18);
# ?% t6 j0 @. o; ~; }/ Y
9 ^; ]$ e# C/ J8 r1 i3、唯一约束:Unique,简称UK
4 c" ]" }' u& _  k$ g4 }! xcreate table student_ning1(( m+ G8 ?! L% K  x+ K% j/ J& W
id number(4) primary key,
1 A9 |7 s, A% d5 ^1 ^) f+ [name varchar2(10) not null,
! x4 J2 L+ S  k$ nemail varchar2(30) unique,* G# l' O8 ^$ u. l) M" g
age number(2)+ ]& T' u+ _. E2 S) [
);. ~; l, N; |7 H& F
insert into student_ning1 6 V- j7 @; @' [4 u' S/ o& J1 F8 W
values(1,'amy','amy@doctor.com', 19);
1 |" r5 ~7 k8 j* w9 j--ORA-00001: 唯一约束条件被违反
/ M- V' d: h- C: T1 u, @  H, E6 Finsert into student_ning1 . H' f1 t7 ]' y! {& T
values(2,'rory','amy@doctor.com', 19);% Y$ R3 U3 F+ u6 B* s% u* S
# ]3 U. [4 {0 G1 l: _1 v9 R
--唯一约束建立在表级
* E9 f/ s/ R$ V' b9 M0 w--主键约束建立在表级
& |. }  t7 B8 @# X- n6 a5 Bcreate table student_ning2(5 z7 j' |; M; m% W$ ]" j/ |& q& a- K3 }
id number(4),9 J( i# ?, M/ F' o8 s! a9 c1 x
name varchar2(10) not null,
- A3 @0 c: B* ~  Z$ g6 remail varchar2(30),8 j1 |8 M; m1 A4 y0 ^
age number(2),4 g. n+ k  q, U( S
constraint student_ning2_id_pk
' A$ e1 n! f9 Uprimary key (id),3 W9 h( i# x: \. ]9 R8 k4 w- T
constraint student_ning2_email_uk
  F) ^/ }, e. c2 Q& V& yunique (email)8 A% m8 T/ X7 n9 W# D' [
);
- O# ^$ m! u$ P& l& E$ }
- y/ A8 z7 U) cinsert into student_ning2( S( c# X3 A( B# u7 D
values(1,'amy','amy@doctor.com',19);  |* o7 P- r' I! C. \) }& m

+ w) k+ [/ d4 T" ^0 M1 g2 L- h--unique约束只要求不能重复,可以为NULL3 H3 B3 J- V6 x4 f
insert into student_ning2* W2 Z0 Q) u7 h6 w
values(2, 'rory', null, 20);
; z, t  d+ K2 G, G
/ d: X  M( t  @5 c7 e# r6 N, m--不管是insert还是update,email都不能重复。
5 q0 L/ h1 x# X. Iupdate student_ning2 set email = 'amy@doctor.com'
5 ]! {* K, _( G5 C  l( M1 _# Twhere id = 2;% w( i. F3 T' }4 d- i/ I3 q

+ Y) C  \) ?( B- [$ F4、检查约束 check 简称 CK+ G# s7 |/ P  K  t1 E$ e( ~4 A
create table student_ning3(! j$ ^8 x, ]! s! f) U3 a/ X
id number(4),
  H0 W8 z4 z6 H: @  O# N) Oname varchar2(10) not null,
. K& H2 s/ h, \: S, Iemail varchar2(30),
# Q# Z  X$ ?9 Z7 R* tage number(2),
2 y: }, g6 {4 T5 Bgender char(1), --'F':女生; 'M':男生) ]* H# D) X' s6 y0 F
constraint student_ning3_id_pk# V1 f4 `' r( z2 E
primary key (id),8 e' m, \" B/ ]( I5 ]
constraint student_ning3_email_uk
& ~6 t/ n3 K& l% @: [* y$ Nunique (email),# p0 E3 k! A3 J' E/ K8 n3 ~; G  s
constraint student_ning3_age_ck7 W9 v8 W. L& `! ]1 ]9 a
check (age > 10),' j2 ]5 G/ Q, h
constraint student_ning3_gender_ck
4 t) D4 i2 g3 t1 k2 jcheck (gender in ('F', 'M', 'f', 'm'))1 O7 H3 W5 Y9 V# C
);# S4 E+ h1 p: _2 T, E1 i8 r
insert into student_ning3
) x0 J: L; E" c# [: @values(1,'amy',null,19,'F');7 l. L. A: V& Q1 n$ z+ J' Y
insert into student_ning3
/ F, f. J9 Z. u* j3 T4 ?- Pvalues(2,'rory',null,8,'M'); --违反check约束 age > 10
! m6 i6 h* Q1 `# ^/ s/ @insert into student_ning3
  W- D0 z! n0 d( g8 dvalues(3,'doctor',null,50,'A'); --违反check约束 gender in ('F','M')
# G' m) s1 |. y- E$ }8 g9 N
8 a9 a  q8 K! \8 S4 iPK / NN / UK / CK / FK
, h+ u: `" L0 C/ h3 U" |6 L
3 H8 G; K9 a- m1 E. C# q5.外键. Foreign key, 简称FK3 U  N+ a# f8 s+ M5 K9 s
create table major_ning (  A6 h# c, ~. I
id number(2) primary key, $ ~/ c: E) B- U) P9 X! v6 K
name char(20)
1 o% A# p, P( r$ T( H& V! k% p, E/ B);* l0 _4 }1 f) p( g' ~! ~! m7 g
insert into major_ning values(1, 'computer');: C( h/ i' y( W" m6 N
insert into major_ning values(2, 'history');
+ ~3 ]. u, I  q# Y$ [insert into major_ning values(3, 'music');6 f& l* z+ Q) A. u7 y
insert into major_ning values(4, 'sing');
1 i$ {3 e; Z1 F6 q9 ecommit;
" L5 Z1 e/ X# R: L, c; {. Kcreate table student_ning4(
6 V: }( j, s% B+ w+ i8 y2 ~  X( f& _sid number(3),
0 j1 m; M5 k- o: d9 fname varchar2(20) not null,
1 Y% u% s9 S2 @: J# {email varchar2(30),
" B8 h# i& u3 fgender char(1),9 z( e9 U8 w! G1 i6 t) ^0 L
majorid number(2),% C" ^: Y, q4 t2 W
constraint stu_n4_sid_pk primary key(sid),1 H( K: I* G- i- }
constraint stu_n4_email_uk unique (email),
! r  R5 \  x9 q( U9 T' ^2 f( ]; Zconstraint stu_n4_g_ck check (gender in ('F','M')),& e3 q7 N2 f1 A2 J; G# N$ ^% t( n4 p  i
constraint stu_n4_mid_fk foreign key
* [, {9 T% L/ p; a, Q) x/ U% ?& B  (majorid) references major_ning(id)5 c# k2 a% ]3 G; e7 v$ \; `
);
) M, u# Z* ]. m! L4 A/ x) Q, Y
* L. ?% s! w$ u4 D$ Hinsert into student_ning48 x. {- j1 Z/ x5 B* O9 ~3 D
values(101,'amy',null,'F',1);
/ k% h& G) Y( ~--新增数据,不存在9这个专业4 G4 u" P+ g  a4 G0 c! ?
insert into student_ning42 c- ?/ H) D  m
values(102,'river',' Q2 H! p8 D+ t( r
'river@sina.com','F', 9);$ n! ~' j4 e. t' G
--提示错误:
1 p& \" b& u7 c8 P2 fORA-02291: integrity constraint (NINGLJ.STU_N4_MID_FK)7 o, c: ]; c9 U* O$ U2 I' R
violated - parent key not found6 Y: `; X! e6 R! `0 Y% K
insert into student_ning4/ e' r% H. K$ r8 e$ m1 l; O
values(102,'river',3 b3 j7 C. c/ U; W) G0 t8 w
'river@sina.com','F', null);, y) |& \: j5 m, q" R# C
( j/ ?. T2 I/ u9 x' P& [( D
--有学生属于专业1(computer)
5 F" n% P# p5 V0 ^delete from major_ning where id = 1;3 @# x6 Z% f5 N- q- X# E) s4 i
--ORA-02292: child record found0 s+ b2 {- F* [

0 Y) y& @+ o8 ?4 S; Bcreate table student_ning5(
2 G" \; j2 y4 a8 Ksid number(3),
- w$ t- n7 j. o* G: xname varchar2(20) not null,/ g" |$ _' N% V# x
email varchar2(30),3 ^7 L# _/ V) _, Z3 z3 a. r$ `1 z
gender char(1),* a8 N* e: l7 ?6 x8 O0 ]/ V2 b
majorid number(2),
6 t* A4 S& o4 yconstraint stu_n5_sid_pk primary key(sid),1 Q' ?: p. K8 N6 o
constraint stu_n5_email_uk unique (email),, n4 n8 k! Z0 C. e
constraint stu_n5_g_ck check (gender in ('F','M')),, D# t9 h8 |/ P9 c7 V
constraint stu_n5_mid_fk foreign key
' k% I2 q  F. O+ a$ y  (majorid) references major_ning(id)
5 {: D( J+ ?9 U  on delete set null);
" ~! Z4 d9 C# |1 O$ _9 Y9 b8 D7 c! c9 {" y/ L) [1 y, h
insert into student_ning5
4 n. z3 h) g  t3 V0 z& x1 d% X6 _values(101,'amy',null,'F',4); --amy是4专业的学生
+ T: c( |1 O6 L0 l--删除编码为4的专业* s* _$ Q  M9 l+ w
delete from major_ning where id = 4;
/ Y: s/ d% h4 @; H( Q: i--amy的专业被设置为NULL
1 H$ a& u/ Z( I8 l! b3 J6 Dselect * from student_ning5;
! A) Y" c# Y; C/ E
+ ]3 M" a3 X# h! o1 A" Hcreate table student_ning6(0 \8 \+ p$ Q3 h3 q! G
sid number(3),
; r+ ?/ W1 t2 D- o) d2 o2 z' Z8 lname varchar2(20) not null,
% b+ E2 s, R6 I, G& u# @2 q# bemail varchar2(30),/ W* L0 j& n: j3 I7 b# M: t  z. s% \
gender char(1),: s8 L" C2 |  [& d# V2 r0 b
majorid number(2),( Y: L% q1 G7 u- O( D
constraint stu_n6_sid_pk primary key(sid),
/ B1 I( G9 N' ]! i7 ]- N4 aconstraint stu_n6_email_uk unique (email),
" e1 w( o# k! z/ Zconstraint stu_n6_g_ck check (gender in ('F','M')),
3 W" F9 B: L" N# |. b. g# Oconstraint stu_n6_mid_fk foreign key
2 `: d; s8 k# e7 ~  (majorid) references major_ning(id)
" q5 T! `, Z1 e, T% g  on delete cascade);
* ]2 {& }3 S% j7 _6 T! O; g
( D2 t/ E6 B9 ]1 I--复制表,不复制约束条件。
& H2 ]6 H' M- j+ Bcreate table 表名 as 查询语句- F8 a* S4 [$ C
. x; f; Z% H+ r& |/ i4 n* E
--建立约束条件的时机
* F& @8 C3 ^  a: \3 f* @/ S6 L0 E--建表同时建立约束条件:
% [4 m7 W* L  `1 T! r* S! }9 [create table student(
" M1 q+ a) ~# p' _$ K5 e) `% v1 Vid number(3),
- }  o& ?  C# e7 N. {% U$ \6 ^2 V* o0 Hname char(20) not null,9 h! s. H3 G% l0 e
majorid number(2),
& m  g; }8 h' r& |$ Yconstraint stu_id_pk primary key(id),
1 k; J  W, q  b; n8 n6 Aconstraint stu_mid_fk foreign key(majorid): u/ {  u/ r' A  o5 n' ^
   references major(id)$ `3 @4 R! I, q! c
);; ^& O9 B5 M$ j& e& l! U
--在创建完表以后创建约束
. i/ R6 A" O% a: Vcreate table student(
( A1 Y; u9 }+ W# pid number(3),6 a" t' G- G# ?- p/ D$ }
name char(20) not null,1 M8 p4 L6 Z, ?5 z; |
majorid number(2));
& @; X$ [1 @  G: ealter table student
) T8 t1 N- T# A: r) ~& ~+ t! c  add constraint stu_id_pk primary key(id);
1 L4 B8 V1 L% F- A% z- Y3 Kalter table student- i2 s2 e$ g3 u5 ~2 G( `( W8 F4 m
  add constraint stu_mid_fk foreign key(majorid)
4 u5 x/ V; \. k4 @; ~: i5 t. m0 x  references major(id);3 T! e* R, G/ j+ J9 `

+ C7 M7 u- E: p3 g- D2 @  w-----------脚本文件begin---------
2 D) ^$ _+ F( O. kalter table student drop constraint stu_mid_fk;
5 c# i/ c) U: D. [3 y9 j- I1 ^drop table student;
1 i) r) j5 p3 I* b" C% a7 L# [drop table major;
: F- W9 M1 X+ ~; a+ Tcreate table major(....);3 N9 i" J6 J7 c$ r6 k3 n( A
create table student(....);: B0 W/ f- O' I( C9 T/ {; }4 D
alter table student add constraint ..... P0 }7 [+ A: X7 Z) k6 {5 U
-----------脚本文件end------------( l) l8 q+ l- L$ Y" A
& J& X; w& |" q8 q
user_tables  :用户所有的数据表6 ^* \, t$ x; h7 Q8 d2 \* B, p
user_constraints:用户所有的约束条件; C$ _; X1 O" Z1 J; `
user_objects :用户所有的对象(表、视图、索引...)) \. G6 W( a: k/ \

' O( Q  n  z8 L6 Pall_tables  :用户能访问的数据表,) s. S; q; q) ]* O
             包括自己的和别的用户允许自己访问的
/ y4 B0 @5 T& f- i6 Aall_constraints:用户能访问的约束条件
& a9 {8 [; Z2 Lall_objects :用户能访问的对象(表、视图、索引...)
1 h# ^/ e/ U. q! x/ d% L7 Q1 K
  @  ?8 X9 w/ @) i0 l1 n3 a. X+ rPK / FK
: M5 C, A  |) F1 vNOT NULL / UNIQUE
. q) b% T! x7 d, @' SCHECK
& w6 L! ^% X) @! c- ~0 _其中:CHECK和NOT NULL可以在程序级别控制# G+ q! F! l3 a
0 Y2 y# Y5 F$ u* n6 L# n
二、数据库的其他对象
! b7 K7 X4 X% l, q* \0 L7 @表 Table  X, X6 W" K/ G& \8 W1 r+ H$ y2 a8 [
视图 View$ u# @. H# l. `$ f0 ?) [% ]
索引 Index3 `% I: f5 N0 n& Q, f
序列 Sequence
2 t% U: A& h, V) W3 U  A过程 Procedure0 K+ Q# Y1 V) K  p. I
函数 Function- H2 S* P7 D% `4 Y' u) f
包 Package! Z; E1 ]( h# s4 I) P1 r  v' T
触发器 Trigger
8 p$ R  `  U/ ]' |* }' p- I同义词 Synonym
9 p; A) X% @( [....
  b1 K+ l( m7 U9 X2 X5 q
* E, |: w7 Q5 \. }# q# M$ K$ A1.视图View
3 |" {. z& c( E& f; t: Pcreate view v_emp_ning
) G% o4 K1 f8 H7 R: v4 gas+ [# h$ @7 [, {2 y3 W/ z; y: x  L  ]
select empno, ename, job from emp_ning
( P2 ]% e+ E7 b+ ]3 F! Ewhere deptno = 20;# _& i  e$ I6 J: U3 c" }
--使用和表相同
: q! }0 H1 h% P5 ^desc v_emp_ning& q: O& \- w- ]
select * from v_emp_ning;5 j" O6 m& n8 Z" z) D3 E( C
--视图的好处:简化查询;隐藏数据表的列
7 q3 m1 {: g5 O, g% e
) `# `! P2 s- J" T: M9 U" D' a+ }create view v_emp_count
8 w9 o7 @8 e# s/ \as9 }$ p* z: C* |
select deptno, count(*) emp_num
* G- c4 n# H# ~from emp_ning6 L8 ?" V4 Q+ m( `& Y3 K3 h; Q
group by deptno;1 J# ^6 J9 S+ T" Q6 s
--修改基表数据/ _$ q; J1 b4 ^8 U
update emp_ning set deptno = 10
* d/ u- l: a: P: f5 b+ {% R where deptno is null;% ]1 U4 W$ o  I6 R0 n
--视图查询到的是修改后的数据。
, n' K7 r' G: r0 N' ?% @--视图不包含任何数据。是基表数据的投影。
& N9 V# ?+ `$ mselect * from v_emp_count;0 L5 D. x: G& _2 m- w$ L9 z
# _- T: w( I/ Y+ I& {: [: @+ J# y
--创建或修改视图0 O3 x2 r$ U/ f
create or replace view v_emp_count
3 m% N6 P4 H' z% U- o- Mas, [+ J, ~; K" F! P
select deptno, count(*) emp_num,. I) n: X5 R4 K- n) Y. g3 M
sum(salary) sum_s,' _. _( |- i! b& u" M9 U4 o
avg(nvl(salary,0)) avg_s,
# [" d  H% h. H' J6 n. U9 V' z* G) `  Amax(salary) max_s,2 |7 J8 \8 _8 O8 u! a( `. m3 l
min(salary) min_s* ]: D( _, @) p
from emp_ning, T' Z  g* i5 x0 X0 F
group by deptno;
$ ?8 ?0 Q0 _9 m
1 X0 V: ~4 f9 w& |0 ]1 F--查询视图的定义
" i- I- S! e5 V0 \4 rselect text from user_views' n8 J/ Z- H* i( d+ a% L# M" ~$ x
where view_name = 'V_EMP_COUNT';
/ l( R4 B, r: _--如果视图对应的sql语句显示不全9 Y& }$ f8 o. _
set long 1000
/ q  Y- G* y9 ^# @2 ^. L& h, w3 |3 U5 Q) G6 V6 }/ U  U8 l
2.索引 Index :用来提高查询效率的机制。) P0 z* ?5 c7 o3 F* C6 v1 x
全表扫描: Full Table Scan: 查询效率极低
& e3 w- ]" V% Q$ A  a索引查询:比全表扫描快。5 ^+ \  W% X7 W3 ]7 B

  q9 V9 e7 w+ K5 o7 T% w, |8 X: j, k索引的结构:数据 + 地址
/ A/ Z6 f: D) ?6 V            张三 + Room203
9 X& _! ?5 n% o& S& D' f
/ U( D. w+ H" E对于数据变更频繁(DML操作频繁)的表,  G' b6 ]- A3 p
索引会影响性能。
% Q6 a' U6 W0 u; k( ~& Z
, ?$ z& k& D5 C8 F如果数据表有PK/Unique两种约束,索引自动创建
4 S+ C0 n* f2 Q/ g) \% {除此以外,索引必须手动创建。- C2 {- ?. x& R4 S7 l
create table student_ning7(
: ]+ I3 G: G8 f( Zid number(4),8 ~  L$ V* X8 s9 f' B. x# E
name char(20),& b- J% L$ o; j+ m4 f
email char(40),
. Z" H& k8 X& P& f! B) i, ^$ m' Fconstraint stu_n7_id_pk primary key(id),
# B$ c1 x# c# hconstraint stu_n7_email_uk unique(email), w7 d# I0 n# @5 E2 [! Q
);" Z+ y/ m3 q/ G! O6 I4 T
select constraint_name 9 T8 j; f4 ^# l5 H5 n( h
from user_constraints
, G3 W. O: X, mwhere table_name = 'STUDENT_NING7';, s: d$ v8 d7 i- t+ q) B3 j
$ c% v2 j" n- N+ b' R
--查询student_ning7表上的索引,
& m" q, `3 j0 z, @和主键/唯一约束条件同名,数据库自动创建的索引。
5 Q$ i# e4 `# A$ Q. A' zselect index_name from user_indexes
0 Z" U3 ~/ @9 I0 H: o( k1 uwhere table_name = 'STUDENT_NING7';
/ V3 t+ r* i9 @# Y6 c/ \- `. J1 @" X7 t+ L# ~& g
--凡是id或email上的查询,会使用索引
( X+ Z  [/ ~- A1 Rselect * from student_ning7
  T1 [+ s5 H' c; a" r) o9 Nwhere id = 1001;
4 d& `# z* N( B# s$ j! F4 q9 E
# g1 X5 T$ {4 L9 E1 G3 w  i--这种查询用不到索引:全表扫描6 A# T. S& J" z6 A7 S, e2 I% e
select * from student_ning7! N# p5 k' M& O* x/ y4 x* G4 u
where name = 'zhangsan';
& W$ E! u+ {+ m; J4 ]% [4 O$ _  U' G
--创建基于名字字段的索引,索引名自定义3 {5 ]3 s: Y" B& n) A* r: o: `
create index 索引名 on 表名(列名);
5 j6 k( @$ ~: p) a7 rcreate index idx_stu7_name
  E: A& C# Y; V) z# con student_ning7(name);
6 Z8 {1 ]3 i; @
) N3 a9 C' {; e# ^2 J5 `6 ^( P索引:. y1 t! L3 ]' L" X: s, i: l
1)了解索引的工作原理
4 r3 h& Y; T* t/ j2)pk/uk自动创建索引
; `! Y7 `$ G8 m  _$ c; Q2 j3)根据查询情况决定手动创建哪些索引。
, b8 B# k3 H/ O
3 o4 p' A) [6 _( z: p0 X" t  m! z7 c" W% Q4 s
3、序列 Sequence --Oracle独有的8 C: [  P& J) {+ n! h+ U
--产生从1开始的数字值,步进是1
$ c, d9 z2 U, s: g( ^create sequence myseq_ning;
2 R/ r) n% I6 b+ |3 q! `select myseq_ning.nextval from dual;
7 u! ~* O  [' @4 ?
( F8 l- O3 s" r, B; [序列的特性:产生连续的不同的数字值! y( b# {0 m8 n$ q8 v8 c
用来作为数据表的主键。3 W) c9 m6 k2 F0 {+ s

- r# {+ }1 t) @2 O3 ?--使用序列产生的值作为表的主键值
6 {" C0 D% {. b, j6 y; f7 |: F$ qinsert into student_ning7(id,name)$ y" I* n( {6 A& a, ?" \
values(myseq_ning.nextval, 'amy');
& N" G5 s  Q7 y. P  b' K) ^- P: e% c% S, Y
student_ning7和序列myseq_ning的关系:2 g1 o) P3 q+ z; w( R3 |
是数据库中的独立对象( S" {8 m, g: w" X/ R$ E$ N
--表可以用序列产生的值作为主键,也可以不用% U4 ?6 n$ V' w
--序列可以为一个或多个表产生主键,也可以不用
$ C1 J- Q8 Y1 i3 minsert into student_ning7(id,name), ?8 X: r$ [% A! w, y+ H* Y
values(100,'river');0 `. Q$ v7 |* C% l9 E& t  f( G0 s
insert into dept_ning
5 A0 [; m7 C0 Qvalues(myseq_ning.nextval,'market','bj');& Y# b  A, m  h. B& }6 W

: [4 S3 }5 |/ B5 E0 O8 c--建议:一个序列为一个表产生主键
% {3 Y6 K3 l8 j
. M" N: h. z* a6 |  s希望主键值从1000开始,步进是2?
8 U+ A) I" }! g/ J9 Vcreate sequence myseq_ning1
8 U7 L, e8 ^% l( N! z, _! Astart with 1000
1 e# C; Q3 @' W) I0 e% M/ Mincrement by 2;9 u% n/ R! D/ ^/ p; ]
5 v, W9 D  a5 S) I2 h; A0 _. p
insert into student_ning7
6 z# ^$ S4 P9 Q8 ?, A- Z% ^values(myseq_ning1.nextval, 'song', null);! X2 t) F4 a6 o+ p* Q) u1 b0 D+ O

" i1 M- T8 V. ~# E  }/ k# N. }0 d; d5 ~--删除序列,对曾经产生过的数据没有任何影响。
$ B7 G7 Z% P3 S! X; A* V$ wdrop sequence myseq_ning1;. M7 j. g3 i* Z6 R

8 T% l  @$ ^) ]/ m3 Y- n6 vSQL> edit
4 |5 t6 h! l- Y6 y" F
, O( k/ t9 L. B/ E

我的日常 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与我的日常享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和我的日常的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、我的日常管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表