我的日常

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

动态微博

查看: 1597|回复: 0

Oracle增删查改 day05

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-03 21:43:49 |只看该作者 |倒序浏览
复习:SQL语句
5 v. S0 J% m( b1 d; pselect
3 G. F5 K5 \8 D2 U6 [1 z7 MDML: insert / update / delete
" c! a; b/ g! E1 n- I3 r2 [0 p; e2 O% L" g/ x. k3 q
CRUD/ o! k7 S7 s( u" d+ B! x& z/ J
C:Create6 H+ f5 U, k; Y7 g  {: q
R: Retrive2 X# j- u; ^7 D/ m7 m% f
U: Update4 h4 H- r! b0 W9 F3 R  }1 o% T
D: Delete3 ^6 T3 L5 T* p* I
9 @* a( Q/ [8 _( p$ @7 t! ]
DDL: create / drop / truncate / alter
( G4 ~2 i/ [" n" T, |
, ^* Y1 i+ Z9 Y) ETCL: commit / rollback / savepoint( z" J5 ~. X( h

; o  e' l& @8 hDCL: grant / revoke( ?, x/ d  }" Y
; Y, K/ \* d# R- `7 h. E
grant: 赋予权限
) R( t. s6 p& f- E: _' L# F# {revoke: 剥夺权限
) y4 z% F- W3 B5 p数据库中的用户: openlab   hr    scott4 g& w- a, ~, R4 f" m7 u
                 emp1 ?" M2 L9 j( o
3 _7 R6 o# N; y+ ]7 ?
假设现在的用户是openlab$ f1 ?5 G9 m0 Q) p7 M3 i0 B. ~0 G
SQL>grant select on emp to scott;! `7 f0 s3 q# P/ a$ A" p7 L
SQL>revoke select on emp from scott;; P$ X& {' I" E5 S; e6 t
. u- ]9 y2 _$ @2 {
scott的会话:
3 j& v, J3 e: v& N6 W3 C  ]* ISQL>select * from openlab.emp;! l6 F' o8 h, h" Z; d6 ]
SQL>select * from emp;5 t, b' w( F3 s8 `/ v! M+ ~! J
" u' X2 Z3 Y2 e$ `

" u/ Z% M8 m2 U7 y5 SOracle数据库的用户:
# R7 M/ {$ I" x. M% Jsys7 F  \& R' h  W2 c. H  u; i
system
9 l- c/ G$ b, i, o" m) B7 g  z$ t( j$ h& ^) O
scott/tiger
( O1 A2 t  Y. Ropenlab/open123
" Q7 X9 e3 `" @& I$ \. _  wninglj/******
* l; J8 K7 @* @" i% ^; L% sexam/exam123! B5 O; Z$ s8 L0 o/ k
: y+ W7 V1 {, B/ v3 ?9 M) w# V) ~
C:>sqlplus scott/tiger@192.168.0.26:1521/tarena0 y6 _8 T8 x% p, p
SQL>4 B$ ?4 M2 ?) L7 P
- e, s+ k1 C& M

) o5 ~. [3 m( M7 f6 T& u2 g今天的内容:
( b0 ^& w' D0 i, L5 T1、约束条件, s, L# k9 _( d( b4 W
2、数据库的其他对象
! {4 v# i. O. E
5 ], S3 g3 o+ c8 ]一、约束条件 Constraint
  g' d5 b7 m' W) f# n, A" F7 |& X1。主键约束:Primary key, 简称PK
2 Z8 k2 I4 Z, R8 w--建表时增加主键约束条件4 @1 a* |8 y8 V1 N, T7 ^& W
create table dept_ning1(
: _8 W  V4 }% r2 U" d/ l6 Z6 Ydeptno number(2) primary key, --列级约束条件. |( T& @# N. N6 U. v7 j3 U
dname varchar2(20),: W7 i" j" z7 ~& `
location varchar2(40)
: ~+ j) a$ {% J6 D* ^! b1 E);5 s. A9 t$ v6 N4 ~3 F6 V/ V
insert into dept_ning1 7 M% l+ X, Z, n" A+ v. ^
values(10,'developer','beijing');
7 |2 @: D0 ]5 t2 hinsert into dept_ning1
7 {, r0 c: y3 `. B+ _" nvalues(10,'market','shenzhen');- l7 K* X  h0 j% r0 E
--如果插入重复编码,会提示:
4 p' _2 B, a, F8 Y& J6 f1 SORA-00001: unique constraint (NINGLJ.SYS_C00634053) violated
( ^" [% w0 e# V3 r其中,SYS_C00634053是数据库自定义的主键名
5 `% u3 b* G0 @* c. i--约束条件如果没有显式命名,
8 W( ~, ~& ?0 `% Z' W0 V数据库给约束条件命名:SYS_C*****: I$ m5 t" R8 ^1 d, `; R% `

* l* ~+ u: `1 S4 U+ G--在建表时自定义约束条件名$ V5 ^& B- X" G( }
--建议命名规则:表名_列名_约束条件的类型/ D  f1 r( `7 I6 n- j  c
create table dept_ning2(
5 M" ?3 _- D9 \& C0 vdeptno number(2),
. r6 z! r: C" C! l0 F% Pdname varchar2(20),
1 U. V; f& C- [  n. }9 Hlocation varchar2(40),
% t7 ]  Q5 X, D# Q1 i/ i* qconstraint dept_ning2_deptno_pk & r9 |7 {7 x) {# O: ~
primary key (deptno) --表级约束条件
. z, d% [( S8 _2 E  P5 j. R6 u);. [1 w' _$ P1 E$ ^- O7 z4 Z9 @8 c) v
--当插入重复编码时,会提示具体的约束条件名字错误。. t/ ?; @8 D  i0 k0 d" f/ n
--方便定位出错的原因
6 s3 R) y; h# d4 c2 Q: H! ?$ j8 d  I4 o: k$ _: s0 H; T
主键约束:primary key = 不能重复 + 不能为空! I, g8 W7 \  F6 ^* o' E

, ]: \- a8 C0 u1 ~1 _$ z' u" p  A2 Y2 ?9 K2、非空约束: not null,简称NN
/ L3 R3 U+ Y2 y9 k) w学生姓名必须提供,但是可以重复# }% H& |3 g2 I% M. u% T# D3 G+ s) G
--只能定义在列级
% z* X* f" w; r8 [) |9 G: {9 zcreate table student_ning(
+ h. U, Q6 W+ R' t" y+ ?id number(4) primary key,3 g3 H, ~) B) b" ^
name varchar2(10) not null,/ \5 A* v$ L! f: K3 r3 F
age number(2)
( O+ Z6 {9 u" L);
0 m( a3 m% |' m/ Q1 E* Jinsert into student_ning ' \4 t: N, O/ l  e2 Q. x
values(1, 'zhangwei', 20);. X! u# D1 B& Z( |8 {, P
--名字可以重复
; Z: O- X( F' finsert into student_ning
* p! o( L  ]# v+ n/ d+ Tvalues(2, 'zhangwei', 19);4 a# U3 z% o* z+ ~% c! V5 P* o, R3 N
--提示name列不能为NULL
7 B# M$ b$ T( V8 ]) I; y6 l& Ninsert into student_ning
$ f( I6 {$ I# M1 Y& Fvalues(3, null, 18);
) K  j7 v. s- Q9 W' ~
" e  b# r: {2 \5 S6 k! ^) F3、唯一约束:Unique,简称UK
# E. W$ _4 V( t, |: Screate table student_ning1(
6 u* B& R5 N) E( C4 E; _# Uid number(4) primary key,
. I2 ^' F# O1 I' q5 nname varchar2(10) not null,
9 C3 L3 h3 e; Z  yemail varchar2(30) unique,- N1 J/ W$ f: S* I+ ~0 g# u9 S+ `3 X6 |
age number(2)' U6 H; I' D% W- |* o1 M5 C9 G
);; x  A1 v: J$ o$ R) e" {& s2 V7 u
insert into student_ning1
0 c* d4 z, x0 }/ ivalues(1,'amy','amy@doctor.com', 19);7 k5 S- _; }( F3 F- t# I+ w# {
--ORA-00001: 唯一约束条件被违反/ D4 t  v( d9 V9 E: o
insert into student_ning1
2 ]# ^7 g8 S, X1 d2 ^) ovalues(2,'rory','amy@doctor.com', 19);
# q" N+ {# z* e0 I- n- h& V+ q( c  }; B: g) J* i
--唯一约束建立在表级( J: l' |0 Z. \- J/ K' P6 h
--主键约束建立在表级1 T# M- O5 `9 ?% Q
create table student_ning2(" C; c- i! X" z, f* s* a$ Z
id number(4),
! d  x4 h) v# @+ L$ i* ?name varchar2(10) not null,
/ x8 Q; v! b' d8 v. Y6 Lemail varchar2(30),/ n9 a) {4 {7 D( [) m7 r
age number(2),
4 J0 d; K  n+ W5 tconstraint student_ning2_id_pk# B% \8 ~% k9 Y7 O( `7 i+ |
primary key (id),
0 @  l) _, {/ T9 G9 m2 xconstraint student_ning2_email_uk1 l, w( i/ _! J. r: d$ R9 {# A& ?
unique (email)3 i, q% }1 m: f7 x
);
1 q% N+ o, g, K' ]* x, s& m0 f  M$ r" n! l
insert into student_ning2" @( c( h8 q+ A- A, d( b
values(1,'amy','amy@doctor.com',19);
' c& \! C  J  b" \0 z
' ]3 d- M* Y) `5 s0 \3 l# d--unique约束只要求不能重复,可以为NULL7 B. M( y1 s. S, L1 o7 L
insert into student_ning28 J. }/ h- K) i4 o; `. g
values(2, 'rory', null, 20);
' n8 p% ]* X9 N  R1 E
( d. y( ^/ o, |% l--不管是insert还是update,email都不能重复。3 M5 p+ n  l" i2 c
update student_ning2 set email = 'amy@doctor.com'3 C! H3 ]$ F$ Y
where id = 2;
: i! A3 e5 `8 x9 P# I) ^  O  N" n( I! O
4、检查约束 check 简称 CK1 c0 ]: h. \( }" c8 A0 ~
create table student_ning3(5 i2 }+ G2 }3 h/ B0 U$ \
id number(4),
$ _5 ~" K3 q7 w" c. cname varchar2(10) not null," r$ Q" N( T6 z, y" p5 ?7 D/ |- |
email varchar2(30),; G! K8 U& a, u' B* S1 U
age number(2),
* e7 q$ [8 h7 n  s& Rgender char(1), --'F':女生; 'M':男生
. h3 T1 B' ]% E' b) \constraint student_ning3_id_pk
/ D  b% I7 A7 Z/ p+ Gprimary key (id),
* A  s! }& b$ g: X0 ?  Z% Cconstraint student_ning3_email_uk* d/ D5 E7 E5 ^- v
unique (email),
4 F. I1 B& m- e- D3 Bconstraint student_ning3_age_ck7 x, j1 X5 ?8 p2 |0 q9 F; U& a, \
check (age > 10),
5 p3 H$ A; c7 uconstraint student_ning3_gender_ck
2 Y! F! s' Z1 x' _$ e- J' y4 X! _; ?check (gender in ('F', 'M', 'f', 'm'))
- V5 \$ \6 L# G# F);* c: k7 H  ]+ Z  @/ T! u, J
insert into student_ning3) l5 ~: b: u0 I9 i- Q2 B
values(1,'amy',null,19,'F');$ X% f& H  t4 S
insert into student_ning3
) m' S  ~$ z0 q( ], p  f. u3 I( Ovalues(2,'rory',null,8,'M'); --违反check约束 age > 10
' j/ a" ]( n9 t# Minsert into student_ning3 ! b$ o# Z* g- u! ?' e
values(3,'doctor',null,50,'A'); --违反check约束 gender in ('F','M'). S* f* J8 {4 s2 s- r4 ^3 Z
! h! l8 |+ g% \$ b
PK / NN / UK / CK / FK
4 j2 n7 l2 j* |& ]4 h, c& S
: n/ J1 J6 Z6 u) q3 b/ c8 V5.外键. Foreign key, 简称FK; z. ^3 a9 F7 a7 K7 A  R4 L
create table major_ning (- j# e2 A2 D: C+ I, s- ?
id number(2) primary key,
; V* H! ]0 V7 S( W% P: b8 t: Bname char(20)
! R9 f' z- ~7 T" J);
+ m" E2 H9 M) [: J. F8 K5 ~insert into major_ning values(1, 'computer');
4 R4 B/ Y& o) |4 d6 H8 x# ainsert into major_ning values(2, 'history');
, K/ y& Y6 c  O# x! Rinsert into major_ning values(3, 'music');- y1 b7 T5 t) H, b, }3 T1 U4 Q
insert into major_ning values(4, 'sing');$ O; {2 M; d4 l# W; z% F
commit;
% f  R2 m, ~2 ^' Y7 |% h( ~create table student_ning4(- w8 W( O6 o$ {! r4 P4 z
sid number(3),
- o4 b5 z/ i4 Wname varchar2(20) not null,
* `* z8 v* v, m% y' g. bemail varchar2(30),
" s; T! G2 V2 [; M  e% _0 Pgender char(1),
9 E( y0 [- J1 W8 ^5 c. F2 Cmajorid number(2),
% I# [/ V0 w1 Nconstraint stu_n4_sid_pk primary key(sid),$ d" I2 e; r# _' H
constraint stu_n4_email_uk unique (email),  F5 n2 v/ y  s6 r% U; n
constraint stu_n4_g_ck check (gender in ('F','M')),1 |2 R1 R4 V5 {, x" T9 A3 X
constraint stu_n4_mid_fk foreign key
$ h, v; J5 g3 p; u$ I# G5 @+ j  (majorid) references major_ning(id)
3 M7 o% J0 g7 T$ n) _/ @);4 H' H: I) V) H/ A' q

: r0 `8 m) H8 T9 J' Dinsert into student_ning4. c2 y, G$ O4 e2 C, O
values(101,'amy',null,'F',1);
1 |. z" }" i) Q. w' V- W7 {4 T--新增数据,不存在9这个专业8 p4 T( P" Q( H5 F0 o
insert into student_ning4% u) t3 N5 ?& A+ E
values(102,'river',
2 \4 k# X. u1 o, x; }'river@sina.com','F', 9);
' W( v9 ?0 U2 D: _--提示错误:% H4 j/ L; n  E8 ~$ |  w2 O
ORA-02291: integrity constraint (NINGLJ.STU_N4_MID_FK)
* W6 _6 [0 C% Y% H% f+ S2 `7 G violated - parent key not found. w1 L5 u  v% w5 u7 V& M( Q
insert into student_ning45 U8 x+ c  |# A# b) T
values(102,'river',: R% p+ Q/ Y6 r  K4 K0 o
'river@sina.com','F', null);. o" @; Y6 l/ Q$ o# H" X- c! h
- I) z4 e; T/ N7 g+ H- e
--有学生属于专业1(computer)- {: f) V1 B8 v2 @
delete from major_ning where id = 1;* d8 _: \1 [7 k0 C
--ORA-02292: child record found
* b2 Z* n0 M. k  p+ A: d8 G' @, V& ?
create table student_ning5(, h, n7 j7 A4 \# u5 {
sid number(3),
7 m$ ?8 u8 P: y$ Dname varchar2(20) not null,0 o' z+ [0 k3 A  u
email varchar2(30),3 ?& R5 H6 x( h  Q
gender char(1),
& D" M1 J* ~& r# Xmajorid number(2),
* A8 ^& l- A' X$ {$ B. R  Oconstraint stu_n5_sid_pk primary key(sid),
, |1 _" X0 ~7 |0 cconstraint stu_n5_email_uk unique (email),+ J6 ~5 G) O7 A3 E
constraint stu_n5_g_ck check (gender in ('F','M')),
, \. A; R: y( g8 Vconstraint stu_n5_mid_fk foreign key ) I8 ~: N$ G/ E; [$ ?
  (majorid) references major_ning(id)) Q% S) n; G& _3 H5 M
  on delete set null);& m/ }+ o0 O/ \4 r) v
8 v6 H  b- h- z8 _- Y; i
insert into student_ning57 ?6 Q# p: k; k& A6 Q  O% }
values(101,'amy',null,'F',4); --amy是4专业的学生
- I& E) G, d( O; W  {# c--删除编码为4的专业
0 j  s6 P5 j) P( x! B+ T9 ^delete from major_ning where id = 4;
' I' g. B; ]( t7 {  D4 `6 J( y--amy的专业被设置为NULL) V0 K* T$ |& L7 y( O$ R
select * from student_ning5;
# s6 b# d! ^) t
# u' R/ \# d1 G1 i5 h5 hcreate table student_ning6(. H- f7 _0 [' V
sid number(3),
; \3 V5 J  b7 w8 S1 S# h3 }2 ]9 W; sname varchar2(20) not null,
+ E2 E" R7 j+ a  E* Cemail varchar2(30),5 }, J2 K$ O2 v
gender char(1),* V" P% z! p5 z
majorid number(2),
4 |1 O3 g. Q! Z" O5 ~constraint stu_n6_sid_pk primary key(sid),& _, R- P; ~4 q4 x9 S7 q
constraint stu_n6_email_uk unique (email),
4 F9 |; u" Z- M+ b( {constraint stu_n6_g_ck check (gender in ('F','M')),
# w& ^& |) A) }constraint stu_n6_mid_fk foreign key
( y2 w  @# y6 S$ i  (majorid) references major_ning(id)  a; _- D3 n9 {5 h5 }2 n: z
  on delete cascade);
  @  }; l" ^5 O0 y  g5 a! k/ n3 C3 M: l' _2 M  I" h
--复制表,不复制约束条件。& o- N( J" H5 ~3 g. b+ C# Q3 _6 t
create table 表名 as 查询语句
' g" K5 g* b, B- o- m/ J1 b& w$ B: {" f, ~
--建立约束条件的时机/ o2 f% O4 Q4 L# ?& a6 ]
--建表同时建立约束条件:
1 q. A; U: u  s- u0 R3 j/ F7 K7 @( dcreate table student(+ B4 X7 E$ L% o' D
id number(3),( J. c9 Y2 a! h2 o% d; W: I
name char(20) not null,
1 T4 ^! I4 q/ y' Amajorid number(2),) a  {3 u% l, I
constraint stu_id_pk primary key(id),9 s/ m$ g5 b/ f% `
constraint stu_mid_fk foreign key(majorid)0 a' y+ q* L4 I) r5 H
   references major(id)
- Q8 \1 h9 |2 `9 [( p);
* b' L: q3 _. X8 ?--在创建完表以后创建约束/ ]- A7 P" t0 o  `- H
create table student(2 l8 w$ D: w% F& o5 X% K" a
id number(3),
- I0 F' h' x) I4 U+ ]name char(20) not null,# L* }: f2 |9 X9 ~3 e
majorid number(2));( D0 _/ L; G/ Y3 f7 W4 ?4 H
alter table student# Q; p: r4 B. P. t; H
  add constraint stu_id_pk primary key(id);# A: i0 y) T6 |4 j$ V  ~& x' {+ n1 o
alter table student: N: e8 |3 z$ w2 t! ~) A4 I
  add constraint stu_mid_fk foreign key(majorid)
' w5 j! L" k" b! u& E7 C) p, N) w) K  references major(id);+ n; N( U& c8 _; ?- Z& ]/ V* l
: H1 O$ Y& \7 g& C5 w
-----------脚本文件begin---------1 @* D: ]  L! }9 Q0 w
alter table student drop constraint stu_mid_fk;2 ?% H0 m+ D( v8 F* Y
drop table student;
. H6 ?4 W" j& u$ n9 c! _* C2 hdrop table major;/ J  S& i$ \* t4 I' d& a
create table major(....);
/ p+ `: O; }* D2 A( P8 e! @create table student(....);6 L9 L# h  I3 F9 C6 S
alter table student add constraint ....# E# w" `* f+ I1 Z
-----------脚本文件end------------
; p2 }" `) G/ R( R# q% ]0 [" u1 Y8 X( X+ d9 q) l( x
user_tables  :用户所有的数据表0 r8 _- b; \- t7 z
user_constraints:用户所有的约束条件- ~) ^$ R: X& e& M/ a
user_objects :用户所有的对象(表、视图、索引...)
1 R. f- G! d! Y% D) H. [
: K5 ]9 A% }% T: i4 o" o3 K" P$ qall_tables  :用户能访问的数据表,
9 J- g# s8 i+ u1 V             包括自己的和别的用户允许自己访问的
) P$ ~. V' v9 k; x1 P6 }all_constraints:用户能访问的约束条件. Y' {+ h# Z0 j$ }) e4 L6 v
all_objects :用户能访问的对象(表、视图、索引...)
8 f: ?- v7 n+ `8 N$ w9 f, s0 I* R% Z1 i9 c$ G* z; f3 c+ F. ]: Y
PK / FK
* z) s! k' ], p1 y) KNOT NULL / UNIQUE! e. L0 m" ^; `
CHECK0 D; G0 s0 H% R# f- R
其中:CHECK和NOT NULL可以在程序级别控制
% E5 e& h8 }/ s" I7 R
, g, W" @& M1 m9 N7 o# u, c二、数据库的其他对象  U# Y1 d; _, Y7 X/ u' b
表 Table) w8 B7 A/ ~  G9 P( \
视图 View
( p4 q( `" T- [索引 Index
7 l) S3 U9 ?! O- y1 m序列 Sequence
6 @0 \+ g! b1 T7 V过程 Procedure
$ r3 a6 X7 x$ X函数 Function
5 k0 }! w. }4 g, s, H5 D包 Package
- s1 l) \- C; U4 Q" ]! s: }触发器 Trigger
9 z* P' F9 E  ^! {9 f$ E同义词 Synonym
/ u3 `: L" l9 Z# ]7 O# h" \% M+ ^....
  S" w" V6 s( Z* r# k
# f9 K. ^5 @* {  Z1.视图View& b3 ^& G% b0 x: r6 O4 u
create view v_emp_ning
/ U. M) D; X! _+ b& V1 Aas
. H! v( W8 U9 w1 wselect empno, ename, job from emp_ning6 ]  g0 r; t7 P6 g4 J% O
where deptno = 20;  d  E0 C. z9 T, R4 G8 |- w+ n% V" o
--使用和表相同
; t% j' i  ^& _6 a' @) M% `! Bdesc v_emp_ning1 ]; z$ K* Y- w' j9 x
select * from v_emp_ning;. [1 \) I, z! _7 n9 m
--视图的好处:简化查询;隐藏数据表的列1 o# t, A0 I. u! a8 \: i' x7 z
6 O) ^/ S9 s" U
create view v_emp_count
6 k" D( X- ?4 ?: O: r  T, [+ o5 ras
" C# ^& W0 g$ k5 u3 wselect deptno, count(*) emp_num6 E0 v& ^2 V" Y: h( b# p
from emp_ning
; ^% R4 p4 s# vgroup by deptno;1 k( P! R! ^' @1 Z- |3 p
--修改基表数据$ G" N0 K5 A/ r0 N0 Z  F5 B
update emp_ning set deptno = 10, j9 |1 x2 {* [9 o* ?( f9 G
where deptno is null;: t$ J. R8 o7 r" U4 c3 B. m
--视图查询到的是修改后的数据。
4 [/ U9 ^  h1 [/ O--视图不包含任何数据。是基表数据的投影。
: y. d. s2 \& z- P" e3 K, u! |select * from v_emp_count;& Q  m* o4 Y& _9 Y+ ]) m
1 N5 H' l2 ^, W- F
--创建或修改视图4 j. J" |2 F) ]/ `3 j
create or replace view v_emp_count
' y- f% U9 F5 F6 k6 c2 s2 v% v3 Eas2 I8 h' j9 F6 H
select deptno, count(*) emp_num,1 Q9 L6 ^2 B  c: I" G; V1 G3 r4 ?5 H; U
sum(salary) sum_s,7 z0 ~0 y, O' Q  D
avg(nvl(salary,0)) avg_s,5 G" K0 b, C2 L% b9 z
max(salary) max_s,
* G  t) N1 E3 j- ~* J2 [9 [2 p. Cmin(salary) min_s3 X" r2 J0 @( J/ v1 D2 S' B1 W
from emp_ning+ m% N* B( P. i2 x
group by deptno;
3 E2 P& }2 d1 e2 |0 b7 \. h. l- i, v! o, t0 R
--查询视图的定义; H7 l* q6 R8 J* N
select text from user_views) [* C6 J  [' h! n+ y9 @% i; j
where view_name = 'V_EMP_COUNT';
1 ]) v/ r$ c0 T* K3 Z; O4 ?: V% J--如果视图对应的sql语句显示不全7 h' `) G# p9 v; z' f% F/ \/ U2 g
set long 1000
4 u9 z' {7 E7 I9 R2 d* [; e) @' s; ]& s7 P; j
2.索引 Index :用来提高查询效率的机制。. u( J4 U0 L  s9 y5 `1 m
全表扫描: Full Table Scan: 查询效率极低
6 Q& z6 B  I/ K$ g! n. c1 ]' v% m" T索引查询:比全表扫描快。
) c! x8 Q+ l* |+ y; \( d% }
; m' [2 R! A4 X索引的结构:数据 + 地址3 d4 w$ d" M9 o; o
            张三 + Room203
1 w" f" [1 S6 a) V  W7 d4 C0 V
, ]9 j9 \) t; g7 y6 p4 X. U对于数据变更频繁(DML操作频繁)的表,9 _/ Q* B3 D1 y& V* Z) m/ O' f$ Y( k
索引会影响性能。
2 e4 z8 s& Y6 F! M0 @  w
% F6 G% m% e9 s( i: o( P6 [; n如果数据表有PK/Unique两种约束,索引自动创建* P2 \9 {# H2 v+ U' z
除此以外,索引必须手动创建。  Z- `8 _, G' B( o
create table student_ning7(
* e8 Z" U( ^' e% f2 w0 Wid number(4),
9 a6 L8 z- V( W+ e& h: h! q2 Ename char(20),
! h" M& d( a% ]email char(40),7 C: d" K5 G/ }" T% x) O
constraint stu_n7_id_pk primary key(id),
. p3 ~* V$ e; E( Y6 r+ |constraint stu_n7_email_uk unique(email)  H# e" B7 J6 B) z2 _1 l0 [( m9 ]5 E
);, B3 j( Y: B8 {" L" V4 B2 s
select constraint_name
* V; F; u- `/ `' A& ^from user_constraints9 t8 v; w5 P3 x7 N/ F5 n5 Y
where table_name = 'STUDENT_NING7';
' n; p! d( ?  r. L8 J) R8 {, [/ u* V: N
--查询student_ning7表上的索引,5 Q! f# q$ N9 d5 Y4 q: F
和主键/唯一约束条件同名,数据库自动创建的索引。
8 M* D9 g! g, H" ]7 |2 A& iselect index_name from user_indexes
- c$ N9 _& A; ~8 p7 Lwhere table_name = 'STUDENT_NING7';
+ G" q- S: s7 m" C2 I/ Q2 T8 o) ?! w1 V' }' U1 t
--凡是id或email上的查询,会使用索引% G, K) L* w; B9 V8 D
select * from student_ning7
1 G8 K/ c6 r; s2 y8 W& z0 bwhere id = 1001;
3 P8 C& \6 J7 E9 \# M9 |
/ S& z$ |5 b, E1 O! Q--这种查询用不到索引:全表扫描
; x' s* |2 S1 m; dselect * from student_ning7
5 o& p* O+ L9 X* o3 owhere name = 'zhangsan';- u2 X+ h% I! E+ d5 ]4 J

9 ^# ?! _) o1 b- ^& X$ q--创建基于名字字段的索引,索引名自定义9 x% P. `+ H2 Z: ]6 b% i- Z
create index 索引名 on 表名(列名);
# L; F" ]1 L2 H5 ncreate index idx_stu7_name / Q+ Z1 ?1 j. `9 F) g
on student_ning7(name);
6 t) j+ l' ~. D4 [4 P6 V3 v
. k/ |8 O( D) ^/ h, A) L: \- M7 B( i$ Q索引:) g5 j5 ?! l7 e) b0 [( j& p
1)了解索引的工作原理" v, E* h) z) j4 A) {2 h
2)pk/uk自动创建索引9 F3 o4 \4 ~6 r
3)根据查询情况决定手动创建哪些索引。
  }. r: @! s" S+ |) }9 r- v! C$ n6 A6 x' G

! P" i6 i. |* j6 q; H& x3、序列 Sequence --Oracle独有的
( a$ X% p5 n0 L' m" s9 m" b* B& V--产生从1开始的数字值,步进是1
4 x: A# _3 G0 |! I/ h: `create sequence myseq_ning;: G  S: F4 \. E5 {1 ]+ a# n
select myseq_ning.nextval from dual;
- S$ _0 h; r6 A% v( u
/ m  b& F" S7 g, g- d& I3 I  x% U序列的特性:产生连续的不同的数字值
# C; J( x! h5 S3 o2 c用来作为数据表的主键。  I$ F* p; {4 x+ J; S/ P

$ `* ?- K+ E* `, A--使用序列产生的值作为表的主键值
' @$ M2 q/ p( j+ Y( P7 t1 i. p4 }& L" rinsert into student_ning7(id,name)
$ P& {3 V5 ]2 R7 A" ]3 R1 cvalues(myseq_ning.nextval, 'amy');$ R" T: ~6 A7 O: M

( ?# D( @4 `8 v9 v( B3 F( Ystudent_ning7和序列myseq_ning的关系:# p' H, ?8 A! [0 b
是数据库中的独立对象
+ \0 ^* o$ q4 M--表可以用序列产生的值作为主键,也可以不用6 M! n! u# [4 k6 ]  E4 Q. O8 ?* K  m
--序列可以为一个或多个表产生主键,也可以不用
$ X1 u+ ^1 p) u  P% q# _# @insert into student_ning7(id,name)
5 C# J0 }" E8 Z3 u: Q  kvalues(100,'river');
. V7 W5 s! {/ E- v, t* dinsert into dept_ning
5 s4 e4 Q7 j2 |7 c% `values(myseq_ning.nextval,'market','bj');
5 i6 l' H6 V5 M9 |* ]+ j; c) e. v; {$ `0 L% O( H& t) O
--建议:一个序列为一个表产生主键5 ?+ f7 j5 c$ v) ]! E
9 U( }% v: \! l$ a$ E. h' S% U
希望主键值从1000开始,步进是2?
; ~; m7 q- ~/ J) [$ |, a; {create sequence myseq_ning1' U/ U! P- f0 x8 N6 w( x) Q
start with 1000* X/ q7 |) h+ \9 t/ K3 P* L
increment by 2;
# F4 G9 e1 L1 F% R$ ^  D1 W: G1 V/ ?' l) J& T, U
insert into student_ning77 q2 n+ [. x0 f" P% |
values(myseq_ning1.nextval, 'song', null);: h# m8 t% ^' Q! C

3 U& R8 P1 U5 w3 [! @--删除序列,对曾经产生过的数据没有任何影响。
4 }8 b4 o$ V" \drop sequence myseq_ning1;
6 R' c; B; d) r  l. M& }0 l) q7 m
SQL> edit
4 L6 M( t8 {; J+ l
# V' i& h' _2 i1 L) |

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


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

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

   

关闭

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

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