我的日常

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

动态微博

查看: 1619|回复: 0

Oracle增删查改 day05

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-03 21:43:49 |只看该作者 |倒序浏览
复习:SQL语句
% d/ L' T& f& p2 {+ kselect3 K1 K! l5 b$ @8 a, ]
DML: insert / update / delete
: u& r% j5 ^; N9 H9 p7 p- E" s4 _$ S, L. j# ~! W' b! r5 ~
CRUD
  O' w/ [- q1 X9 L5 t/ {- ^% ?C:Create1 U6 W# _; o! q! L6 d
R: Retrive
2 j; j; t0 E; W" p4 HU: Update
( e2 ]3 d; R. V1 b$ QD: Delete
1 {5 ?. t8 c+ L1 U
7 h) z, T! M$ G; ^5 ^/ h3 IDDL: create / drop / truncate / alter1 k  ^0 e. _# b" B. A! n
) T! o: _. @6 y/ T8 ~
TCL: commit / rollback / savepoint% B4 C; m; s. J. @* |

' a8 @  W; z: U' a7 z' ]* }DCL: grant / revoke( D( Q. I& o% N2 y5 I7 G
) _) d& d: d+ B+ s
grant: 赋予权限
+ b8 _9 ?3 F( d( W; [, Erevoke: 剥夺权限( e- H1 k# a( |9 I
数据库中的用户: openlab   hr    scott2 A4 Q8 U. Y  W0 f3 X0 X& Y! Z
                 emp
& B0 Q; `; I' N& K( s8 A- s; g! L9 R1 f9 g4 d
假设现在的用户是openlab  b3 H' s8 Z/ J# |8 q6 J" ~/ j- \0 V
SQL>grant select on emp to scott;
9 @: e8 ]* b: W1 m# A4 d& Z7 YSQL>revoke select on emp from scott;
/ p9 |& l2 K5 F) G4 a$ v2 K6 K# ^' g9 s- t% g) \# x+ E+ c% a% j
scott的会话:
. Y3 E4 k0 c6 L( u% PSQL>select * from openlab.emp;
4 U" B" D: F. r; U" Q: q6 vSQL>select * from emp;, Q: Q+ L4 w9 @: X3 }9 d- G, {3 a

3 F/ t/ S1 K' `# v* ^% k0 ~* Q0 N2 d$ F" X$ V
Oracle数据库的用户:
& I2 s; _* e8 S, p3 ~! Nsys
( {$ W, s' k) [8 osystem3 ~8 |! Q' ~& g

) I& _9 K6 a6 R- Xscott/tiger$ u! s1 B, \; q& b2 c6 F
openlab/open123$ @; |. H3 S% p! @7 W: F
ninglj/******1 g) h! [, \( d- |; t
exam/exam123
* n4 ^% w1 A% _6 B, X. Y# a! D. `5 h# \9 l) h' V; z  H
C:>sqlplus scott/tiger@192.168.0.26:1521/tarena
( K4 ?' S2 |9 r4 N: SSQL>
( {  q8 d1 Q2 v7 A' {% s  D4 W1 u3 O3 i6 J& i4 s- F* |
  o: e: _' Z6 _% x+ q8 I4 H
今天的内容:
3 i/ j1 K0 [$ Y1、约束条件, z* h  `  I* J5 E3 ^
2、数据库的其他对象
/ s7 ~4 W8 Y! x/ S, s3 z/ p  F; r8 m% b! q2 U8 w" p: N
一、约束条件 Constraint
. S! i8 r6 f8 r9 ]1 L1。主键约束:Primary key, 简称PK
8 E& O) L2 e6 [5 Y2 e! D--建表时增加主键约束条件
" s; z! a  k( fcreate table dept_ning1(* ^; b0 f- j5 }
deptno number(2) primary key, --列级约束条件+ c& q8 @- T9 N! h
dname varchar2(20),# ]7 y! z9 C" Y! \+ ?
location varchar2(40)
3 k  f$ n+ v' s% U# H. A);
/ j' e* h/ U1 y# Linsert into dept_ning1 $ ]+ t5 p$ |( O$ f% p
values(10,'developer','beijing');' E, i; e0 L) V* C, A$ W
insert into dept_ning1
( t+ b" W9 a6 u1 kvalues(10,'market','shenzhen');
- T' x/ P; ~! j1 H& f--如果插入重复编码,会提示:5 u: h3 D5 _" G5 [7 v! X  G
ORA-00001: unique constraint (NINGLJ.SYS_C00634053) violated
) y) G* w# c& Z1 J8 i. E* s5 V; n其中,SYS_C00634053是数据库自定义的主键名
1 b3 w2 S& |" l: T# V--约束条件如果没有显式命名,
5 ^' l6 x( Y5 T6 A7 G数据库给约束条件命名:SYS_C*****" Q$ m) q+ v0 w7 l8 ]

; f4 d# p/ H2 Q7 v" L  Y- v--在建表时自定义约束条件名& t; m% p. e) _8 Y4 Y( \/ N
--建议命名规则:表名_列名_约束条件的类型
2 E1 Q# p5 i5 u2 z1 v5 A! W2 ycreate table dept_ning2(
7 K$ L9 y% k! \/ ?deptno number(2),
. Y* {' A5 m& c) |! [dname varchar2(20),% u* I* ?) D+ _7 N8 E- X+ h
location varchar2(40),/ s* s8 I" t3 e! P6 k1 H( S8 V9 n/ }
constraint dept_ning2_deptno_pk * k7 X8 y; d5 ^+ o5 u: \: A
primary key (deptno) --表级约束条件0 `( P! U  a3 N% C+ o5 ?  \' A
);& X$ U' h) U8 C4 o
--当插入重复编码时,会提示具体的约束条件名字错误。% F  a5 s4 e7 F" C, i1 }8 S
--方便定位出错的原因. Y2 R; j, E) |) b1 Y  N
* ~% J  E. |2 }# \$ B4 R% I, H
主键约束:primary key = 不能重复 + 不能为空# w+ d: }1 s7 Q" e% g5 H
# H" h! [5 ?6 d0 {  e
2、非空约束: not null,简称NN& _. y' d  e$ @' o/ C0 V
学生姓名必须提供,但是可以重复! _1 \# P* g1 O. e& ]8 s' A; E
--只能定义在列级
( @% g; ]6 U% J+ j% W* |: v5 `6 Mcreate table student_ning(
/ A$ C' ~* f7 C+ Q. Sid number(4) primary key,0 `* d6 D8 w; C, K
name varchar2(10) not null,9 Y" ^3 ~- A' S
age number(2)# z' \7 T+ F5 C5 m
);
$ J( h0 j  N  Z: d4 Oinsert into student_ning
/ E5 ~/ f& ]  L! q4 [values(1, 'zhangwei', 20);$ h( T* O& z. A. E: t6 [7 }0 G8 D
--名字可以重复
# ^2 Z/ d1 t. q5 B& xinsert into student_ning
* E/ i" y/ q0 Gvalues(2, 'zhangwei', 19);
6 o+ U6 q. G7 @; E--提示name列不能为NULL
" ^! K6 o! U9 _# f1 Ninsert into student_ning   w  b" E0 A6 y7 y1 _: a. y
values(3, null, 18);& }. d. v- r/ |4 B  {" A% H
' D% |9 S) f" C% r3 q) h
3、唯一约束:Unique,简称UK% a% n3 e4 h  U  D" j" N
create table student_ning1(
0 s' Z1 U. h3 Q  M1 Z) {/ lid number(4) primary key,
& Z3 X, j6 P, H" |2 O8 Qname varchar2(10) not null,
' k2 |; H& o7 }' ]. r3 D) T; Lemail varchar2(30) unique,
& g0 c' W- Y- u" Yage number(2)
2 w6 H7 Y$ x" z* G);
. M* ~6 a, E% ^. m# winsert into student_ning1 7 T- Y" q+ j& @# [' j
values(1,'amy','amy@doctor.com', 19);& o4 N* b1 M+ m# ~9 J4 O
--ORA-00001: 唯一约束条件被违反6 F/ X6 }0 D; d! v! Y4 g
insert into student_ning1 9 i9 I( C9 _( E
values(2,'rory','amy@doctor.com', 19);
7 z/ ?; w9 o$ _( t1 u% x; H+ X+ K' k1 r+ |" F/ Y
--唯一约束建立在表级# U! J0 @. U5 N2 f
--主键约束建立在表级4 a! R" R" j" G) M
create table student_ning2(; ~2 _6 V% [$ d8 H
id number(4),
9 G# [& k, m3 U4 C5 g% Q  T& ]name varchar2(10) not null,
$ ^) s! W, C+ M% S' semail varchar2(30),
6 w5 ]+ \: e6 [" M: e$ eage number(2),9 X) Y8 B6 X# e4 U+ G( Y
constraint student_ning2_id_pk
% u, P& q9 g/ ]) ]primary key (id),
7 |- R6 a7 S0 w. G0 lconstraint student_ning2_email_uk
" R/ p: D& n, w1 z- i1 F7 Lunique (email)+ \' |  @! ?/ @$ ~9 R8 P7 ]0 @5 D4 h$ w
);* n, ]* C5 t3 C  z( @
+ G# j; O* c9 N0 |( B
insert into student_ning2% ]: N' K, E4 }
values(1,'amy','amy@doctor.com',19);% w* O1 g; w% {& k* L
( B5 S  x# p$ O# t" W
--unique约束只要求不能重复,可以为NULL: C% p3 Y7 j# j" T1 q8 w
insert into student_ning2
: B8 u& ~- U; v6 L( Kvalues(2, 'rory', null, 20);+ v& c- F. g' p

  b/ o3 f; u. m7 ]' F--不管是insert还是update,email都不能重复。$ l. ?1 |& S3 M2 f% L& U  Y
update student_ning2 set email = 'amy@doctor.com'. O' T3 ?4 @" y( l  z
where id = 2;
4 v8 Y3 |. }2 @3 ^
$ j$ r  {5 r6 W- `+ l4、检查约束 check 简称 CK& z+ d3 A" a0 @' w4 [  T0 g, t
create table student_ning3(
5 X+ p* I9 _* xid number(4),
, o1 F" l/ Q# i3 k& `# `+ Fname varchar2(10) not null,0 [' O" ~0 a  d! b; q0 R
email varchar2(30),
6 V9 n+ p8 l3 C2 \" j: _6 aage number(2),
0 P- T8 N% D) r3 F4 _: i% vgender char(1), --'F':女生; 'M':男生9 w; }- x5 T; e1 r, }
constraint student_ning3_id_pk
4 u0 d* c2 v4 {7 B0 d& @1 Sprimary key (id),
1 J5 X2 A, \! `. w) }$ g7 ~constraint student_ning3_email_uk
$ ~9 \1 T" x  d3 lunique (email),
5 m2 w( h9 M1 A( xconstraint student_ning3_age_ck
+ H; B: i' D* q5 D1 m% C- [8 @check (age > 10),
8 X" {2 \- F2 q  X4 n( ^constraint student_ning3_gender_ck
+ @0 y0 C+ ~/ H1 e+ mcheck (gender in ('F', 'M', 'f', 'm'))
$ d( r6 p' D! P7 c# B0 l- u0 ^);
: ~! A+ M, [4 L8 B) dinsert into student_ning3" v! B3 }% A9 M) s4 m" N
values(1,'amy',null,19,'F');! K. n& r* a( d1 I6 l4 p) b: D+ G3 N
insert into student_ning3% y6 |3 g7 P. e. N
values(2,'rory',null,8,'M'); --违反check约束 age > 10  P- j- k! j. z7 P1 O
insert into student_ning3 % ?( R3 A4 ?( `
values(3,'doctor',null,50,'A'); --违反check约束 gender in ('F','M')1 e# L, Q, _" e& D
! s+ @" O8 }: p
PK / NN / UK / CK / FK
3 p; i5 m  U3 D$ |1 n, B0 [& x6 _% X) |4 Y7 j
5.外键. Foreign key, 简称FK. Z8 T, [- P# ^
create table major_ning (
- o% ^$ O6 r% l( E1 L6 pid number(2) primary key,
9 @, n3 y: I6 zname char(20)+ C/ T$ v/ p  S1 \
);
7 C, t( J, h0 Linsert into major_ning values(1, 'computer');: e1 s: ]$ B3 c' N: p9 Z- L- R
insert into major_ning values(2, 'history');
( b$ U+ p& Z4 i6 a8 o0 x9 yinsert into major_ning values(3, 'music');% M# b6 L6 h. m; }" }0 @* g
insert into major_ning values(4, 'sing');% A) @0 u' k3 R, }  o
commit;% J. H; v( x2 I# Q
create table student_ning4(
, d  B5 x! f1 |2 i; W! w2 [& Osid number(3),8 J: ?$ Z9 J2 {) w: H, d  x6 c
name varchar2(20) not null,
4 K3 q6 a8 L' [, _. }' pemail varchar2(30),
& f. Z8 F, T+ V( q5 ~9 F/ E: Ygender char(1),
/ }- l* M1 [' z. C" s( mmajorid number(2),( Z: e( `# q1 ~+ U
constraint stu_n4_sid_pk primary key(sid),
4 k  o1 R$ s" Yconstraint stu_n4_email_uk unique (email),
1 D) N3 L7 W4 x; c/ g* P/ Q! wconstraint stu_n4_g_ck check (gender in ('F','M')),2 b, `- {5 C, T* A) q; g! y
constraint stu_n4_mid_fk foreign key
" K5 j. M! ?* d  (majorid) references major_ning(id)
% w" R6 Q/ ?: v. u& g6 B( D8 z( X" \2 C);
5 `* A4 k) i4 w+ }6 _
4 D' b# y& U* tinsert into student_ning4
! p" T1 u# t8 Zvalues(101,'amy',null,'F',1);! Y; o! H$ b; ^% ]: r+ Q' S4 Q
--新增数据,不存在9这个专业
" j* g( I: ^" a. x5 I' s6 Xinsert into student_ning4* m* K5 Y5 B! h* E, e8 @( p, F
values(102,'river',
5 {4 z/ N. I" R3 Y'river@sina.com','F', 9);4 H8 _- _) K) _% K, x. m
--提示错误:2 g# [3 l/ |/ s$ J$ b5 `; q% ]/ T
ORA-02291: integrity constraint (NINGLJ.STU_N4_MID_FK)4 O0 ?: J. j0 h( ?
violated - parent key not found+ }0 `  }/ ?' F# F0 S+ t$ E1 r0 m' n
insert into student_ning4
6 x5 y+ H. E' R( O3 }values(102,'river',
' ]& w& S5 T% N" ]'river@sina.com','F', null);
! q" D7 m% c& {7 e. z; W
5 E' V6 T7 F8 l6 W6 f: R--有学生属于专业1(computer)1 D- o. K+ z4 o5 B5 Y
delete from major_ning where id = 1;6 w4 ]* \% S6 o1 h$ L% _
--ORA-02292: child record found
: `  i7 a6 R. q1 R$ V2 S9 ^: W2 r6 ?$ p8 V; |. S* k( E
create table student_ning5(6 Y5 I) j8 ~! Y8 V: ]0 H0 |
sid number(3),9 a9 M$ O' n5 Q; I- M, U
name varchar2(20) not null,
7 F* r# N) a. U+ c$ C* W9 qemail varchar2(30),$ u" z/ B; A0 r& A5 z4 P
gender char(1),, R; z9 C# `, \5 a9 v) ?
majorid number(2),3 H7 l3 P9 a5 E. n" j
constraint stu_n5_sid_pk primary key(sid),
& _7 ]3 f4 e: t' n3 ?constraint stu_n5_email_uk unique (email),9 f: m2 p1 g2 i  J% O
constraint stu_n5_g_ck check (gender in ('F','M')),4 V$ Y2 [, v+ n& P3 b9 a% O. p
constraint stu_n5_mid_fk foreign key . J7 y% T/ `5 c( O' W& n
  (majorid) references major_ning(id)
8 P# M! T2 z/ J  on delete set null);, K( b3 K; g' u4 k
% h# L/ h7 r1 `$ ~' T! P
insert into student_ning5
# }$ r" s( @" uvalues(101,'amy',null,'F',4); --amy是4专业的学生% c+ D% p; |2 w3 O; t
--删除编码为4的专业* Q2 c( j3 Y5 f8 ?- L$ ]2 h; N( R* @
delete from major_ning where id = 4;6 C: n& L! \) a9 D* \7 B2 `
--amy的专业被设置为NULL
) p" W2 @0 z2 E0 a, Zselect * from student_ning5; & ?0 J, M8 J* S5 J- D. b

- T/ g/ u4 W& P1 v. |# k. G: hcreate table student_ning6(1 ]# O9 ]  V9 u# E* t5 S
sid number(3),
) E! _! D3 x4 X. t: e8 h+ N1 kname varchar2(20) not null,/ U8 I5 r) r( `0 w/ J8 N& ~
email varchar2(30),
; G0 }9 s8 D* K" X7 I+ Ngender char(1),$ v' m2 o# f4 {' F' C
majorid number(2),, y- x4 P. _, m1 f' ?
constraint stu_n6_sid_pk primary key(sid),
. H2 {1 E7 a* H  Bconstraint stu_n6_email_uk unique (email),
" R$ W; G3 E. V4 }- A( G$ \$ |constraint stu_n6_g_ck check (gender in ('F','M')),. N, ?0 {# d4 ]4 }/ T3 H( a
constraint stu_n6_mid_fk foreign key
' u7 k& l* i7 u4 C4 r2 E  (majorid) references major_ning(id)! }) @6 O% w6 v2 I/ T, Z
  on delete cascade);
6 A$ C+ M8 ?* d$ e. `+ G0 @! H5 e; O  z* x
--复制表,不复制约束条件。
9 Z( L( A) e( {( B, Qcreate table 表名 as 查询语句2 y1 [6 o4 _: J4 ~
( j# i) ?5 q  b( F  E
--建立约束条件的时机
5 y6 _8 y& ?( i9 v: {' m--建表同时建立约束条件:: b* B% Z5 ?5 p$ c5 W) c/ W- [
create table student(
: z; J5 P5 c5 o$ a, Hid number(3),
$ J# \0 m- A) x2 {name char(20) not null,
3 m- P) @" U& b$ \majorid number(2),- w6 I0 H9 S5 x! \0 Q5 m, ]
constraint stu_id_pk primary key(id),
9 Y' z  ^* v. y, J3 Qconstraint stu_mid_fk foreign key(majorid)' \9 }# r  z, r. |& c- @
   references major(id). n: V/ ?# _4 n$ ^
);
1 k% F5 D0 a: R, W--在创建完表以后创建约束
' f; S* ~& Q5 l! N' j6 O% ycreate table student(
, l, x2 g( p/ Oid number(3),( u$ [% s% l7 }4 [6 v3 O$ _
name char(20) not null,
# k2 |4 T6 D6 T2 c$ \* \* ?majorid number(2));
. R% G6 p; L) x; X5 i' |4 jalter table student
' Y. B% _* [* P9 A  add constraint stu_id_pk primary key(id);
4 |4 L0 j( d  L, Ualter table student
: O" }9 k0 ]) m3 o: v0 Q- X% g( F3 }" z  add constraint stu_mid_fk foreign key(majorid)
1 k4 u1 m/ N/ \( [0 N- u$ `% C$ g3 m  references major(id);. O9 `- I8 E1 {; Z3 @+ P
$ p+ I" r5 x8 o9 q. C. G. P, i) t
-----------脚本文件begin---------
/ H. `1 Y( x' O$ h- T' B, t+ E! ~" Galter table student drop constraint stu_mid_fk;
- l3 B2 g: v3 u* v' p* N) Adrop table student;
, G2 k4 ^& p7 Jdrop table major;
( ?* h) E+ R. o+ {6 W1 D. e7 ]create table major(....);
& c: ]7 ^1 Z- z& P, i# Rcreate table student(....);
# Z! o- h/ |- y1 T2 ealter table student add constraint ....( l1 N- @: K% L, `6 ]$ `: _2 T
-----------脚本文件end------------! s8 |+ y8 h  [0 o

5 g8 |2 H0 e0 {( t8 ]! [% Quser_tables  :用户所有的数据表
# v3 k' S6 p; tuser_constraints:用户所有的约束条件$ E# x7 l+ d1 s
user_objects :用户所有的对象(表、视图、索引...)
& R1 v# K- l+ H9 z4 F/ m% _& d* t
( @9 b! I9 _' W/ |4 rall_tables  :用户能访问的数据表,
6 k& Q. p& B5 o0 s" _             包括自己的和别的用户允许自己访问的
# b1 u6 Z% ?" {+ L& @% nall_constraints:用户能访问的约束条件# w$ @% ~: ^6 @7 Y
all_objects :用户能访问的对象(表、视图、索引...)( ~9 G: p; z9 ?2 z9 d
/ s' V- {: _; M  X
PK / FK6 Q7 n& s0 r. p$ z3 z
NOT NULL / UNIQUE
: G9 V  i  U3 \. K: pCHECK
; y' i- `& y3 k6 H4 _其中:CHECK和NOT NULL可以在程序级别控制& a8 A2 l6 p6 d1 }6 J: F
" }9 ^) I' ?) z' `; N3 ~
二、数据库的其他对象5 @. G0 j0 t8 J- j# b
表 Table: p: L0 v! L$ h
视图 View
1 Y* ?2 I; A# ?" m8 u1 S$ ?  H4 F索引 Index
5 a9 @1 P3 `. z  ~# L序列 Sequence
/ r) G6 t! e) \& \* x+ ~4 E过程 Procedure
" R+ }7 a* O7 D* E函数 Function/ m; E/ I* }8 x
包 Package" D% x: H/ X' _% p
触发器 Trigger
0 U" x% l4 ~2 S7 a. H! J" f同义词 Synonym7 a% F1 X- i' d9 w  B
....  _  W2 V; r3 ?! d; L- u$ U
. Y- s+ }/ z9 \( I
1.视图View
6 Z! k! V/ @2 X5 f, lcreate view v_emp_ning
( \. p; g' K: oas: Z9 x2 |3 e# L/ j. t/ Y/ M9 {- ^, _1 a
select empno, ename, job from emp_ning
/ M8 h8 A! l! B% X: Iwhere deptno = 20;
6 w! ^5 t8 @* @--使用和表相同) P3 f: r2 i+ d! z
desc v_emp_ning
/ C0 M* M. R; \2 a9 Vselect * from v_emp_ning;
5 C# z; i5 O% E% }7 l! ]  S& I--视图的好处:简化查询;隐藏数据表的列/ J* @1 k9 U+ |0 q& L1 w

4 f6 p1 m+ _. k4 a1 X- `. r, icreate view v_emp_count
& [) w3 P' d6 z! u) K$ Y; e1 xas0 U) `2 g1 @9 G+ U1 S; L
select deptno, count(*) emp_num4 l3 @: i" a( k/ K2 _
from emp_ning
# C" G5 ]' L" Ggroup by deptno;  J6 _: B% M4 G
--修改基表数据; E2 M, o4 q0 k' X% T1 |
update emp_ning set deptno = 10. M% t# H' r- E
where deptno is null;; `; Y4 e) h$ |* |5 r3 p" W: F! T! [
--视图查询到的是修改后的数据。
' ], w, N  \, S--视图不包含任何数据。是基表数据的投影。- y8 n% g4 Q6 @: \+ `$ C
select * from v_emp_count;2 E/ V% {8 \  D4 Y7 y5 z

3 {' @8 ?, ~4 M1 r--创建或修改视图# A: T8 l9 y* o& i$ K& I; X
create or replace view v_emp_count  |: \, F- o2 w$ i0 f7 u
as
/ ^+ X% u! }; v" Y3 p6 xselect deptno, count(*) emp_num,& q( U1 X) N4 q' I8 [; m' l+ j
sum(salary) sum_s,: g6 V! c/ Q" ?# {
avg(nvl(salary,0)) avg_s,2 \. H8 }/ A# c! K; e
max(salary) max_s,
# ?4 r  T- F  N( Emin(salary) min_s
) R# V& ?( z, O% |' `5 bfrom emp_ning1 a  ]& y+ z0 Q: f
group by deptno;5 n$ G# c" J3 n2 Q

4 Z; I8 y, Q  D% s--查询视图的定义
+ s- M3 ?* K$ q: p! ?- Z+ uselect text from user_views  F4 x! g3 G( t! d  H8 l, w$ e# }7 [
where view_name = 'V_EMP_COUNT';7 u- C3 S6 M" K+ i7 o
--如果视图对应的sql语句显示不全% o/ S% H- D1 {- L
set long 10008 ?: h. ^: Y) |. c# x0 r6 K9 B/ \# B: q

0 e! j% g, J$ v$ |# r. `6 T* U4 s2.索引 Index :用来提高查询效率的机制。3 ]# E* B9 g; S3 G
全表扫描: Full Table Scan: 查询效率极低
6 S9 ~1 f: F# t/ m2 I索引查询:比全表扫描快。
: L0 k9 b7 U$ ~
  m) n; X8 W+ k& d, j索引的结构:数据 + 地址9 w1 ]9 r! y# X! ?0 y1 U
            张三 + Room203+ O6 @5 O: u2 z$ N

  j( n# m0 g/ `8 _' T2 k7 O对于数据变更频繁(DML操作频繁)的表,/ C2 I* n( |7 G7 |1 w1 a7 r* M
索引会影响性能。
- W7 P5 G1 g( s( e( _9 Q# l: m
, z8 @* t. ?* ^3 V1 b9 P如果数据表有PK/Unique两种约束,索引自动创建+ n# v4 P4 s  A8 n% R0 A1 z6 C
除此以外,索引必须手动创建。" |/ w+ @/ n* S7 ~" I/ R) O
create table student_ning7(1 V1 X  i" g  I, e: O
id number(4),
1 H" N* U8 W# F8 x. O) bname char(20),
! B6 [. y- v3 z6 x; m/ {+ Vemail char(40),
9 ^3 z5 g! [9 v) u( econstraint stu_n7_id_pk primary key(id),. j% e% Q( \) P# ?! j+ y0 C  \
constraint stu_n7_email_uk unique(email)
0 Q) B: E  r3 C+ c  }- w);- I9 l* D7 m# c- Z6 v% T
select constraint_name
3 O$ r  V: }% f/ wfrom user_constraints4 ]( F- I7 H, V1 t1 w: P
where table_name = 'STUDENT_NING7';
9 R8 x+ {# O4 U; z4 Y: r6 {4 x- W9 k8 [! \, P( f, c' [* _
--查询student_ning7表上的索引,+ p8 ]) O: c" K3 f3 o* u1 E. I' r1 `
和主键/唯一约束条件同名,数据库自动创建的索引。
) d) d0 m* y, z" K2 zselect index_name from user_indexes
" }! q! }3 g: Q6 t; X7 }$ s2 \where table_name = 'STUDENT_NING7';
0 R( o! t# |9 H! c9 N6 F% h0 _  z( z6 z# c  p% U
--凡是id或email上的查询,会使用索引2 D* x+ [/ ^( H# ~' H
select * from student_ning7
! n7 C' w( i& H" d: Awhere id = 1001;8 P) u. s5 W& @& N; C9 @
4 h0 j! |) h/ a5 V# O4 R
--这种查询用不到索引:全表扫描
, ~0 s5 b: ]8 u# I5 ?select * from student_ning7: l0 ~3 p' ]5 l/ n, h4 j2 f; Q
where name = 'zhangsan';
# k8 c6 K( N" e1 _; V! U1 h9 q7 p0 _: e9 l. Q! j7 W7 ?
--创建基于名字字段的索引,索引名自定义
7 `+ S6 m1 u: u5 t$ }% i' g: y$ jcreate index 索引名 on 表名(列名);8 d, N  V& [+ b1 B& }
create index idx_stu7_name * a: l( P& I# g& a5 `, p
on student_ning7(name);( [4 v% p  ~& N6 p# V5 t# P# G

$ _: f# W, b0 p" S+ q( x9 Y索引:, t/ w. g3 x% I% I( `4 d
1)了解索引的工作原理
! ^' i! p) ]8 ]2 a# M' h9 u! Q2)pk/uk自动创建索引
/ m: [  I, l3 x3 ~7 `# r3)根据查询情况决定手动创建哪些索引。
+ w2 ~) Q" i4 h4 ]8 J
* b* b/ }. ~8 s( D9 f
  g% a- h, {% v( e3 ^/ q0 R3、序列 Sequence --Oracle独有的. a, N% c* H) b0 l
--产生从1开始的数字值,步进是1! F6 d' l2 f' F/ t- ~% O
create sequence myseq_ning;$ ~" u7 j! H( }4 c  ~' {
select myseq_ning.nextval from dual;
( U1 P: l. d* C2 H/ ~5 s, L9 O8 k! e1 N0 `
序列的特性:产生连续的不同的数字值- |( M+ D: ^( E" S7 G
用来作为数据表的主键。
+ @% e8 G. G# N, k; C9 u5 }; ]* T% m( H; R* a
--使用序列产生的值作为表的主键值8 l- Q: r9 }$ ~' P9 |
insert into student_ning7(id,name)5 I6 @8 o  h7 w" I2 L/ [" \6 e
values(myseq_ning.nextval, 'amy');' H4 O* G( G6 ~* _3 r% C

: j2 X/ `, D9 {" vstudent_ning7和序列myseq_ning的关系:  F6 X3 q5 q6 r+ V' J6 q
是数据库中的独立对象- A1 [4 J6 Z' i6 W8 r: p2 ^
--表可以用序列产生的值作为主键,也可以不用
/ Y9 F; @. B, o& Z0 D--序列可以为一个或多个表产生主键,也可以不用! D8 v7 a; Z( j& D
insert into student_ning7(id,name)
. p; q/ L+ N. @0 @6 l: ivalues(100,'river');
! Q( ]% ?  `" }. E& ?  Ginsert into dept_ning7 u; d! h# t+ Z! s& j4 C: q) P
values(myseq_ning.nextval,'market','bj');: `" v9 e3 h4 t
( j9 P/ r5 W, l$ q
--建议:一个序列为一个表产生主键% s/ k) K/ R, g1 Q! e$ `0 W

7 M. _3 s& N7 Q0 j# ~/ |% D( F希望主键值从1000开始,步进是2?
2 j( E4 h" _0 l- s9 Z! ccreate sequence myseq_ning1
) Q  |. {/ `  P7 y4 Cstart with 1000
2 x% x/ y! f3 I" u1 C" n8 f& qincrement by 2;
2 M/ P: g, L; C$ t
  x. W& R0 d$ b# m# _& ?insert into student_ning76 a5 O% H) K: s# x0 n& p9 P
values(myseq_ning1.nextval, 'song', null);
. O8 \/ I9 V7 M
# y/ k- ?/ W! {  C5 b1 ^--删除序列,对曾经产生过的数据没有任何影响。
3 _  [" o# r9 p4 ]- D: P! xdrop sequence myseq_ning1;
% D2 B5 j1 S4 X/ @$ N1 U1 Q
3 l7 O' z8 ^7 u8 l- PSQL> edit
5 A  ~8 W2 j* Y7 B+ B( P) d/ G4 q% g, H( Y& c

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


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

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

   

关闭

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

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