科帮网-Java论坛、Java社区、JavaWeb毕业设计

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

动态微博

查看: 1487|回复: 0

Oracle增删查改 day05

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-03 21:43:49 |只看该作者 |倒序浏览
复习:SQL语句5 v; V& X& W4 a4 ^- n" i' i0 H: |
select$ {- i# q( h  ]9 k" |
DML: insert / update / delete( ~+ ]& n7 A  E" c+ Z' \

' r9 U! Q2 e$ U7 q9 lCRUD
* X  y5 P: T. ?C:Create
+ v2 G7 X  K; T! v4 Y- RR: Retrive
5 n  S9 f- |2 t! {" ^( RU: Update
* L% Q4 N- ~; T6 {2 {7 H7 X7 CD: Delete0 F7 P8 s2 u- i, P* ~6 B# M

% x" E. I/ `7 {( b' VDDL: create / drop / truncate / alter$ N8 w0 r/ t* J2 k$ l9 D
/ r# h, w% X9 \: w, y
TCL: commit / rollback / savepoint, R. {$ |  L, I+ W  ^6 u1 r# e* i- H
2 }4 m& m. f& H/ H4 _
DCL: grant / revoke
% j6 \1 Q7 S! j$ N
& r' R9 F6 n  M# b7 igrant: 赋予权限. \" M! H4 d! [$ y. a, B
revoke: 剥夺权限# o5 e9 I& K1 l" T
数据库中的用户: openlab   hr    scott
2 P5 @$ e9 v8 h. I9 [8 R( A) v* K                 emp
6 F+ z* I! H3 z1 x0 {0 b5 T" F
- |0 s- v( K! E. n4 \+ K假设现在的用户是openlab
, T  J8 ?: P; J. b: JSQL>grant select on emp to scott;* P. @( g6 |; m+ Q: |
SQL>revoke select on emp from scott;2 z4 l* h5 t- R% I3 m6 |' K* c

1 d) f* z& m9 q7 wscott的会话:- e8 o6 W1 R' ?* i9 N: f. E
SQL>select * from openlab.emp;
* d3 ~7 f; K: aSQL>select * from emp;. t; T0 y8 p$ \
! `4 a0 }; I# i+ H
: P( y$ e! n6 n6 W( Z: y
Oracle数据库的用户:  k2 m2 z9 h3 y) `
sys
9 d( f# q. K& qsystem
4 t# s7 `- Y6 e& i  Y) e% n
6 Y  G1 @: m- Q* R: Vscott/tiger
$ {4 Z- `7 b+ ^9 r. wopenlab/open123# h. K3 B3 R) R; M5 B
ninglj/******
- ^- r' W" w$ p& t3 [# N( iexam/exam123
+ p, j. K3 O: P+ l+ y: r& E, d: l- [) C8 n% o, y
C:>sqlplus scott/tiger@192.168.0.26:1521/tarena
$ F2 A2 P+ s- sSQL>
, s3 T2 w6 |, T: e
/ U7 J$ X" X4 u2 T- j8 Y9 w" c4 ?7 s, P5 H3 k( q* E
今天的内容:8 i+ X5 K! |/ H3 M
1、约束条件1 B* _9 l- Z! ?! Z+ X- t* z) ^
2、数据库的其他对象5 V7 b, l, ~/ o7 ]: b

3 @  n# x; J) @9 L( R$ G$ f一、约束条件 Constraint( w+ ?' t& G% N; X  E
1。主键约束:Primary key, 简称PK
+ {" L: _6 ^# r6 h! l/ ?3 v# a! M--建表时增加主键约束条件
+ w( N8 h/ @$ p& Dcreate table dept_ning1(
9 I9 b3 |! B7 m& g- Kdeptno number(2) primary key, --列级约束条件) a  d: p& j$ I# |5 H+ {
dname varchar2(20),
/ R5 O2 S. u3 M8 k9 K* k, mlocation varchar2(40)/ G  A: S, T/ U9 |( U3 o
);4 D- Q: ]" h7 D
insert into dept_ning1 5 E" c$ X9 Y6 I' J
values(10,'developer','beijing');2 c; O$ \- y$ f$ |1 `: l- l9 H2 F
insert into dept_ning1 ' D& z+ m! G/ e* V: ]1 B3 P; l
values(10,'market','shenzhen');
- i. a& f  W; r8 |" H0 |--如果插入重复编码,会提示:
/ N% @+ q3 @6 I( j( LORA-00001: unique constraint (NINGLJ.SYS_C00634053) violated
1 x" _' C$ t0 v其中,SYS_C00634053是数据库自定义的主键名
5 N8 d/ g+ ~, y--约束条件如果没有显式命名,1 }/ w8 x0 H( \& D
数据库给约束条件命名:SYS_C*****
' M7 X9 ^: B% r. I! R8 W2 h" s  n( a" S2 {6 |
--在建表时自定义约束条件名
" {6 V" b9 v# w; \* |% b3 ^8 X) W--建议命名规则:表名_列名_约束条件的类型, a' g! i  o! o5 \. C
create table dept_ning2(# {+ H9 }8 D% u3 b) O8 M5 n; J/ N
deptno number(2),7 E2 l5 u  m% T- e! |- J+ B- I& D
dname varchar2(20),4 }# P5 }1 I) x# f: Y8 t3 C# X9 w
location varchar2(40),; G$ d  y1 a+ l: e) {1 c) j; @
constraint dept_ning2_deptno_pk
: S: J1 y# H1 m) U! Jprimary key (deptno) --表级约束条件
' M2 o5 o# L4 M6 J; S4 s# |+ Z* f& K);$ l: k8 d% v/ M, r
--当插入重复编码时,会提示具体的约束条件名字错误。8 X+ v4 d. |& j2 R
--方便定位出错的原因
8 K+ N8 Q. D! R! E! L+ L9 V2 N, [/ W8 [6 m$ c
主键约束:primary key = 不能重复 + 不能为空
# b( X" k8 v. B/ X5 [8 Y0 m7 q( }6 T, g; h6 W( Q
2、非空约束: not null,简称NN
0 D& ~3 R8 x' R9 p& q学生姓名必须提供,但是可以重复/ Z) o, }% ^9 _
--只能定义在列级
- I2 ~" n0 O0 @- h+ Hcreate table student_ning(
+ i8 C7 p0 A8 {" {0 O9 _id number(4) primary key,
. M1 f% ^5 s% C8 B9 T$ pname varchar2(10) not null,& d4 v5 p& F! X* H# R1 k' m4 w4 |
age number(2)
- H( B- A4 E: U);
; q( H' d" n' z/ T, }: Vinsert into student_ning
9 I$ _2 R* h5 N; avalues(1, 'zhangwei', 20);
6 e5 o) W7 V* e# a* E--名字可以重复! E/ _- O( x- u% ~: Q) n
insert into student_ning : N' h- d& J4 K' p: Z& |" P
values(2, 'zhangwei', 19);  }4 e* h5 ?% D6 t+ N
--提示name列不能为NULL
3 T: [0 M* t- S7 x/ H& `5 |9 s- Cinsert into student_ning ' o: S2 B: p( B
values(3, null, 18);- h, |  ^# k3 q# K/ ~# d$ j: s1 U8 \

# i* Q6 i  f  v& ]3、唯一约束:Unique,简称UK
" c; f* {$ B/ t4 [. N  v# hcreate table student_ning1(  W6 D: ~, g7 v
id number(4) primary key,
2 V# X' N, g0 Y: f6 Qname varchar2(10) not null,- r: d, T( N2 p/ L" \  z- f& n
email varchar2(30) unique,0 v2 j4 [6 R: u2 ^
age number(2)
$ E% F# D; a- F: ^, H);
  v) D* A3 \2 _9 {7 G. n9 finsert into student_ning1
% f9 `7 K* I( N1 U! I& f" Y' Wvalues(1,'amy','amy@doctor.com', 19);7 Z( b8 ]9 c, l$ Z! o* r- B
--ORA-00001: 唯一约束条件被违反3 `. B) W% _7 {$ m. a
insert into student_ning1
$ Q6 L  ]5 r2 S/ n. \' w0 Bvalues(2,'rory','amy@doctor.com', 19);; F  G) y  P( z5 M3 o
2 ^1 e- L; v$ L# P1 M0 A
--唯一约束建立在表级* l' ~! j5 }: Y. P
--主键约束建立在表级$ e2 z% H! x. D
create table student_ning2(( K+ f2 y% p6 Y: Z& n7 B; s  w
id number(4),
& D1 r& y0 x% Nname varchar2(10) not null,
+ A7 p$ J# R+ S+ [: {email varchar2(30),$ Y/ ~+ w5 I1 O% C
age number(2),
* p, s8 R) o3 F# t. z) Bconstraint student_ning2_id_pk  T" d2 l3 w2 A+ P! J0 u) U( I
primary key (id),( D; B% u- H' a: ]$ P. a% a
constraint student_ning2_email_uk
1 \3 S! s7 `+ J5 Wunique (email)( S3 |1 p; L/ N& u" V
);
2 u, z) U+ Y( g* j3 D  w) ^* R& x
* H- c4 X. L1 n% Linsert into student_ning2
- T! U. I+ m% w+ rvalues(1,'amy','amy@doctor.com',19);1 g& q7 \2 w  e8 I% L; Y1 V
% \4 K1 m0 f7 T. O8 v
--unique约束只要求不能重复,可以为NULL
& x+ b! w6 h3 xinsert into student_ning2$ C) @; i$ W9 l2 {. Y4 R
values(2, 'rory', null, 20);7 u7 [( `2 ]5 Q2 _3 H

( b( c5 `/ h7 H5 x# S--不管是insert还是update,email都不能重复。  [% X  X, [4 n/ Q; `' b" ]
update student_ning2 set email = 'amy@doctor.com'" x  C5 v$ o  C6 [+ f( s; {
where id = 2;9 S% G% x8 Y. o8 T/ E( Q: Q
, a* ?( `% N+ \6 q; i
4、检查约束 check 简称 CK
# ]0 {+ y& x; X+ j1 V- }8 Fcreate table student_ning3(9 ?5 |0 n9 {" D: w5 _
id number(4),
1 a  s2 D- E6 U9 g" ^name varchar2(10) not null,) b( }4 L7 N' l1 t
email varchar2(30),
. [+ O$ W  l$ zage number(2),0 C# W0 ]% F2 r5 n7 o$ _% {* a
gender char(1), --'F':女生; 'M':男生  h! I% z6 G. c; z4 Y9 P' Y" w
constraint student_ning3_id_pk
. z$ Z0 @1 t6 Xprimary key (id),
; x2 H# H" u5 w+ d$ R* D" Q# @constraint student_ning3_email_uk
* v- F! M# H9 g" ^9 J) c/ @; cunique (email),
& x0 T0 ~/ @5 J6 |5 {* Kconstraint student_ning3_age_ck: f* f. [8 r9 y7 C/ V+ m
check (age > 10),( Q* ?8 d( F! b
constraint student_ning3_gender_ck
7 s0 v  l# j( X# n* Rcheck (gender in ('F', 'M', 'f', 'm'))0 s) R( q4 I$ W
);: u$ Q1 K9 P6 w7 ]% J3 I
insert into student_ning3$ I  v, e4 k% O9 e. m
values(1,'amy',null,19,'F');
$ I$ p" ]. Z# Iinsert into student_ning3
7 P) k: p4 |# e7 xvalues(2,'rory',null,8,'M'); --违反check约束 age > 10
3 _" |. ]4 d2 D. O5 E7 o' G' `insert into student_ning3 . l+ z6 H  @& z" q4 e6 d& M8 u
values(3,'doctor',null,50,'A'); --违反check约束 gender in ('F','M')5 S. d* |/ G/ Z( w

, v# c2 N) a- C6 P0 u+ p4 \3 fPK / NN / UK / CK / FK3 y( @' [7 L. }1 l  e/ B

* q! w2 b* s+ Q+ [, H5.外键. Foreign key, 简称FK
3 s" }7 M& t! A1 k9 t4 q7 |create table major_ning (
+ N$ @, e5 n, [2 z/ E0 g. wid number(2) primary key,
& \* r  ~( _% O  \; z( Gname char(20)
. }7 k) Y8 p( N5 e4 H  u! i. U);& V" l/ e4 f( F2 E
insert into major_ning values(1, 'computer');8 k) m. ^. Q8 I+ K( v
insert into major_ning values(2, 'history');2 ~* Z/ w8 t/ \2 V/ q
insert into major_ning values(3, 'music');
6 s6 f- Q8 t/ O' Z9 \0 H* `5 m  uinsert into major_ning values(4, 'sing');; U% q' {9 @; K
commit;
3 v- l1 Q; B8 X4 R6 ~, I' Dcreate table student_ning4(
" Q! c. U% a' b! k* Rsid number(3),
* `" w  s& W5 B; Z; g0 \  w- m5 Oname varchar2(20) not null,9 }7 E- Q5 W# g2 I
email varchar2(30),. w& `% J: R" v
gender char(1),$ J5 V2 o) `: N1 L. o
majorid number(2),& {2 o1 _/ ~( c! {% X
constraint stu_n4_sid_pk primary key(sid),
3 U8 v0 }/ T% _constraint stu_n4_email_uk unique (email),
) e# A9 R9 [8 A& k' d& f# O2 Z0 Wconstraint stu_n4_g_ck check (gender in ('F','M')),
  F& C$ t: Z3 a! pconstraint stu_n4_mid_fk foreign key , [8 K- O5 ?# b. f
  (majorid) references major_ning(id)
+ @& [$ |& g7 P& [9 h0 I! p  m);
) @) e9 S6 K# w# D# o2 [9 z1 F3 j) D: K9 `5 H9 V2 s
insert into student_ning40 `6 H% w6 q1 o/ H* n1 |8 x
values(101,'amy',null,'F',1);  h+ N8 n: c- F4 k# Y$ L' j1 z2 m" X
--新增数据,不存在9这个专业
* U# ^  g$ [1 ], X  Sinsert into student_ning4
& b1 P  X9 D5 U$ X' [# \% A7 @values(102,'river',+ A$ X" B: f, J) T% V
'river@sina.com','F', 9);
3 u* \* F" X) s4 b  X--提示错误:( |6 u; N" q% u/ \
ORA-02291: integrity constraint (NINGLJ.STU_N4_MID_FK)" y9 J6 w  u2 y" Y/ o; B
violated - parent key not found( D& W5 ]6 K- z; H; A) z
insert into student_ning4
+ B# A9 J( f1 M! {& evalues(102,'river',$ C$ h  x  m, W+ _+ y0 s5 W! a
'river@sina.com','F', null);" d2 N9 N+ j6 Q/ C
& ~: y! \5 \, i9 W9 N8 x
--有学生属于专业1(computer), p2 O' N+ ~& o. e. g6 J( A
delete from major_ning where id = 1;6 Y# N3 |# l  g  a: F! c  r
--ORA-02292: child record found! k0 H( H' ^+ _+ z7 ^5 _

/ T' v; H: e$ q( O0 p/ }7 Pcreate table student_ning5(
; k. ~, V' E# Isid number(3),
" V( G+ v& ?9 @& q8 Nname varchar2(20) not null,' F: n' R$ g0 a& L, i
email varchar2(30),0 H3 D( P9 \0 I- d
gender char(1),
4 f7 r# U4 R. ]) Q) Mmajorid number(2),8 I# F" U" f2 C' v3 Z
constraint stu_n5_sid_pk primary key(sid),
' y+ F) S+ `: j( zconstraint stu_n5_email_uk unique (email),
# f- T' ^; T. C* V% q! L* _constraint stu_n5_g_ck check (gender in ('F','M')),  A" T1 |7 v7 t% X% _1 d
constraint stu_n5_mid_fk foreign key
! B4 N7 ?2 x5 J$ g/ f/ h" D2 S3 t& ^  (majorid) references major_ning(id)
$ T# G" |) z  J. L  on delete set null);
: n- R8 p$ J3 U" B# Z
+ ^. }" I" D( E; v5 E4 b" T& w! Y0 oinsert into student_ning5
0 _( [2 Y$ F' rvalues(101,'amy',null,'F',4); --amy是4专业的学生
9 c) {$ [" V' |5 ^8 \6 `--删除编码为4的专业- p; _/ o# X$ i2 U0 F
delete from major_ning where id = 4;# A2 m) S) `+ T1 k0 [
--amy的专业被设置为NULL! C0 ~6 @" x6 y2 C# E
select * from student_ning5;
' y- }6 T6 W) u8 `) c
3 D: Q* G8 n0 Tcreate table student_ning6(
' [- v8 Q' `/ K  V9 E9 gsid number(3),
8 {" F! x' f& q! B2 ]4 a" ~' Tname varchar2(20) not null,0 \  u2 \8 e% B$ J3 m. O$ s2 w
email varchar2(30),
  n0 h4 t6 C4 }8 m9 `% Fgender char(1),
' Y2 y% c5 D! Z4 G# \4 K* [majorid number(2),% g6 T) c4 o$ ?0 M) A! \
constraint stu_n6_sid_pk primary key(sid),! _. [! _5 ~, W" q
constraint stu_n6_email_uk unique (email),2 l# Z  d) M  h0 _
constraint stu_n6_g_ck check (gender in ('F','M')),
  G* k9 W& t& s! {constraint stu_n6_mid_fk foreign key / z2 Z) E9 m* i
  (majorid) references major_ning(id)2 b! o% A+ ]# d  y3 a
  on delete cascade);
  S8 G* j) i- e. s4 \8 o8 `, ^; B7 }7 i# R
--复制表,不复制约束条件。; p& u0 ]  \/ m5 a! W
create table 表名 as 查询语句
( L1 H5 n; ^- B( Q! l3 t  P2 M( I% d7 t9 ^8 S0 V5 ^# l" Q
--建立约束条件的时机
2 k1 D* X3 J. X8 S4 \1 ~; s--建表同时建立约束条件:: Q/ @5 @/ F( k, ^1 Y
create table student(
9 D) S, J# y2 A4 g+ Jid number(3),
" a" c. c( c0 O* s0 `7 K3 Vname char(20) not null,; d7 m3 k6 Q9 ^! U& `' }
majorid number(2),
0 @7 _$ [- ~  tconstraint stu_id_pk primary key(id),
8 U% C) H  R$ f: ^8 b) Lconstraint stu_mid_fk foreign key(majorid)
: }) C1 j) c# c8 m3 ]% `   references major(id)) }( Q" h$ L  v' \0 f
);
) m- Q2 w0 [- V  l$ u7 A* y+ ?--在创建完表以后创建约束' Z  T7 n% T, `8 N# W7 a
create table student(
1 J/ \5 M; @# S5 q- iid number(3),& s# I4 G0 u9 M( ]6 Z6 N  b& F
name char(20) not null,
. q2 G, E5 @; Q# {majorid number(2));& n3 `/ m; |# m: ]4 N# _
alter table student
6 q# F) O' P% d9 K# P  add constraint stu_id_pk primary key(id);
9 j9 p6 ]2 P4 talter table student1 x2 ]) A8 o' @8 l) n4 O& V
  add constraint stu_mid_fk foreign key(majorid)
6 ]4 z$ c1 B8 I! c: V1 t: ~  references major(id);1 C& C- H6 R- V
/ Q: m" r* A2 x4 A
-----------脚本文件begin---------
5 x& A. M2 m6 k& k1 Salter table student drop constraint stu_mid_fk;  w$ ?' i! \; h
drop table student;
( l8 O+ d# v& f/ T; o$ }& r' k7 zdrop table major;! N& |$ D4 @* n, G5 q2 e+ k7 ~
create table major(....);
0 n! [# w7 J+ ~1 j: x" H/ p+ c% ocreate table student(....);8 [$ I9 G0 j6 f: @( `0 D
alter table student add constraint ....* N0 c4 s! t: G1 x7 ]0 d3 G
-----------脚本文件end------------
6 a! Q* w/ H  D7 e) m$ m5 U& [3 I+ X' _: L4 u6 M1 Q6 Y
user_tables  :用户所有的数据表- d6 q& a# n9 D9 S
user_constraints:用户所有的约束条件% h7 C5 T+ }9 G; ^( [. V( _
user_objects :用户所有的对象(表、视图、索引...)1 Q  ]2 u# a. ~" n' F" z- A7 ?

, v3 G. r) p4 S3 r# Oall_tables  :用户能访问的数据表,1 Y/ q" {- B/ K* u" r! p
             包括自己的和别的用户允许自己访问的
2 m+ _6 T5 ~; s2 `9 Q" jall_constraints:用户能访问的约束条件
# h9 X3 V5 [8 K* I" c) wall_objects :用户能访问的对象(表、视图、索引...)+ B  X* C4 M2 E6 k& Q! L

5 G6 f/ y* S3 f# xPK / FK4 V& I2 A' p8 `: ?% u3 ~: ?
NOT NULL / UNIQUE7 Q2 p7 s$ M& q/ q" u3 u0 A
CHECK
/ K. f; R+ [" R& e) g其中:CHECK和NOT NULL可以在程序级别控制
/ e3 C- Y2 W  B& R- U' d, j: `; U# C! ]* o+ Y) E
二、数据库的其他对象; \# x4 W0 N. X; s/ P% n  p- q8 c% E
表 Table4 x! L+ L; j. R: J$ S
视图 View. C5 J; q. {% n' U) }" w( _
索引 Index9 H( L! R- P* `$ E9 C
序列 Sequence
# d, {, c4 d) }! f3 {过程 Procedure) F) Z5 F! b( ^3 x
函数 Function
* ^" t$ v. z+ t6 L% ?包 Package6 ^1 Y& f; C( R  v  j
触发器 Trigger
/ b! e( `8 x+ R+ N  K同义词 Synonym( v/ S% S2 O) A; r! _, }
....' E- _5 v  g5 ~5 p

" N& {+ [* F8 x, J  N$ w1.视图View
/ f* P+ F  h: M) S7 N. Tcreate view v_emp_ning
1 j+ M; {) I$ |1 u# Vas
  r% V) f0 G5 I; k  rselect empno, ename, job from emp_ning+ ?. z7 l& o9 v$ E
where deptno = 20;
4 d7 C) I" }0 B6 _( {--使用和表相同
1 y1 L5 n9 d& \4 v6 adesc v_emp_ning
1 Y' x9 ~1 Z, l4 [% hselect * from v_emp_ning;% ]+ _( w( U4 h' C( q9 o
--视图的好处:简化查询;隐藏数据表的列- p/ f/ k9 O, U# L

! Z+ j/ l! e% _/ ^$ _create view v_emp_count* N! V/ r! j$ J* Y
as
, Z! j- T. D( p4 F7 c; A. g" Sselect deptno, count(*) emp_num+ J! `! T2 e4 ~
from emp_ning
+ S' Y( v5 @0 c, s/ ]: z& A) zgroup by deptno;; R4 ?, W1 B: K/ J! h
--修改基表数据: l! F4 z, }4 W0 z% d2 c# q$ Z, W7 ~
update emp_ning set deptno = 10
% u) j  g4 {2 a. q where deptno is null;' a4 k1 P0 k! G& `  E8 F
--视图查询到的是修改后的数据。3 }3 r1 ?2 C8 k4 \6 M0 r
--视图不包含任何数据。是基表数据的投影。
% U  \; r/ w7 E4 `select * from v_emp_count;
0 ~" q# n2 z9 E. _& M; q! o. s7 U1 @* B
--创建或修改视图
, k1 z) b! P" F" q0 acreate or replace view v_emp_count9 \4 q+ |# A( x" M
as
9 _4 E$ ?. m- d3 ~select deptno, count(*) emp_num,, _9 U" W/ W: p8 Y7 ?
sum(salary) sum_s," o4 d" ], f- O% U! W
avg(nvl(salary,0)) avg_s,
# Q2 m, G, o' Smax(salary) max_s,* @" @' w) X6 d
min(salary) min_s
4 y6 D) [) K1 S0 i/ ?from emp_ning2 u& A" W8 J* ?: F/ G! p- C
group by deptno;) Q( q3 O( F# E) Q, [

! b! D3 K2 S, B--查询视图的定义, b9 R/ b4 T# D* u0 v7 P
select text from user_views
7 A9 T7 c* O  m! i. O' I$ wwhere view_name = 'V_EMP_COUNT';' k6 G$ r. z' T( c6 G+ P
--如果视图对应的sql语句显示不全, r, |3 g3 m" J  X+ W
set long 1000
* F5 Z4 |5 e9 w3 R- q( s
6 z4 j  O5 F- X2.索引 Index :用来提高查询效率的机制。6 N) _# N& U! X: s8 z1 i3 t
全表扫描: Full Table Scan: 查询效率极低" R# {  t' K; b% G2 e0 v% S5 M
索引查询:比全表扫描快。1 D" X, Q$ E5 `& k* @) T. ^/ X
7 I/ P4 b9 q" v; a( T5 `
索引的结构:数据 + 地址
! @+ B) R) G6 [2 t' ?4 g5 t            张三 + Room203! m0 D% ^- r/ d3 w! O3 ?  Q
1 b4 N$ L; B  r4 Q3 L: z
对于数据变更频繁(DML操作频繁)的表,) I9 `: L4 N2 c: B
索引会影响性能。
- S1 W6 ^1 p& A, K. n( L* i1 o
0 G" U6 A6 z* B* h: S) |; Q如果数据表有PK/Unique两种约束,索引自动创建
. A- w$ l& A9 p% s) X) j除此以外,索引必须手动创建。/ a0 l' ~, e7 ^& f9 v
create table student_ning7(! V/ v4 ~% h, z. n) I. X
id number(4),8 h' B. S/ D, F2 Q8 `
name char(20),
+ v5 L7 b4 o) a# |& Iemail char(40),
4 z+ W) s( I8 _7 d+ Hconstraint stu_n7_id_pk primary key(id),5 P) I; ]; A% J+ I0 Q+ R/ d3 n
constraint stu_n7_email_uk unique(email)# W7 B  Z- \# \) z! Z& E
);3 w  _- G9 `' c' `* l$ n
select constraint_name
8 Q; v7 V0 D* S( o$ Y" hfrom user_constraints" q# }* A" z" d9 X* ~5 T
where table_name = 'STUDENT_NING7';2 M# I$ m5 Y" w; ^* x. |; U. W* |
4 K1 [7 E2 H6 W$ L2 T/ P
--查询student_ning7表上的索引,
* h( M$ J  w4 b# p7 V& t9 k和主键/唯一约束条件同名,数据库自动创建的索引。' l# z7 i5 I1 ^7 W6 D; C1 Q
select index_name from user_indexes* M8 i* W' o6 l8 e8 O
where table_name = 'STUDENT_NING7';
3 R& {" C& W$ e9 ~0 g; x- K
  l/ y% A$ T1 [; H& C$ i  W--凡是id或email上的查询,会使用索引8 L# X  \3 Y4 O! G3 Z5 C% h" {% v
select * from student_ning7
0 G2 n9 `' y4 w; l3 B8 K1 H# Cwhere id = 1001;
$ |0 b6 W: \: ?: P8 y7 P
- P% c- k/ c0 {: S--这种查询用不到索引:全表扫描. z* U, h4 L$ j1 T4 m' N8 d3 u
select * from student_ning77 N# o, \) i1 N
where name = 'zhangsan';$ g' T4 u& G( f  j1 Q+ q1 E, M
4 Y) G% J  T  C/ ^+ _
--创建基于名字字段的索引,索引名自定义3 U( j' W& [6 w; U
create index 索引名 on 表名(列名);3 ^: _) O+ D% d& f: t; m; a
create index idx_stu7_name - h9 p& C0 h) A. L% X
on student_ning7(name);
; ]( ?1 N) |* ^, w# C4 T
) _6 N( Y! h4 Y4 {% R% n索引:0 F* {; r; I/ d8 a, w' m" Z
1)了解索引的工作原理
5 u* p; K6 \; h* R( w2 r& |2)pk/uk自动创建索引
3 o5 j4 H4 l4 o7 T/ A3)根据查询情况决定手动创建哪些索引。
  f& u' L! N, C% L& M7 v" N! ?; Z& z& d5 i. ?. B

, Y: f9 Y1 u& y9 S, \) T3、序列 Sequence --Oracle独有的
, t- [" c8 I. g+ J--产生从1开始的数字值,步进是14 @% L; D: ]/ n; d4 _  z# D# O7 Q
create sequence myseq_ning;
, B1 B, a3 g8 [! p8 eselect myseq_ning.nextval from dual;
2 b3 U+ b# h" ]; _0 p+ j
4 p8 x/ y6 }. d5 v: E6 n$ b序列的特性:产生连续的不同的数字值
0 K& M- j* ]1 }" a' [4 C; d3 \  Z用来作为数据表的主键。
1 z3 o& u: F- @- C- n& ?- y3 v: y. B, Y3 p
--使用序列产生的值作为表的主键值5 S. P* i# I$ \5 _. N; ]2 M0 m+ l
insert into student_ning7(id,name)
, p3 l2 r3 N; [, I; q2 P$ n  I# {values(myseq_ning.nextval, 'amy');8 i! `4 t) R* x6 w5 q& Y

% O/ ]* f" r8 ustudent_ning7和序列myseq_ning的关系:
$ g- W7 U+ G! ]$ }5 g是数据库中的独立对象
7 A( H# g: k- n/ ~5 a  e7 c--表可以用序列产生的值作为主键,也可以不用
6 ^& q2 X" x- E; O5 n1 N, t* Z9 ^+ ]" M. p--序列可以为一个或多个表产生主键,也可以不用5 Y1 E1 J. B1 U. Q# J  ?, @% r+ W# D
insert into student_ning7(id,name)3 q, o( T! c8 S! y' H
values(100,'river');
, b- {! F3 y0 L' Y1 f8 L9 Zinsert into dept_ning
% K  `9 K3 c4 H* E/ Uvalues(myseq_ning.nextval,'market','bj');
; X' O4 R4 L+ H6 [3 V% p: F  g+ C' p# W1 D" w
--建议:一个序列为一个表产生主键
. t* Z% g: r0 d$ {( a3 r3 X# [5 A# J' e. J" b1 f: e, H
希望主键值从1000开始,步进是2?, ~$ y* W  b/ F! q) _8 E+ P# ~
create sequence myseq_ning1
( n" b2 ]# f+ h, n& Z- s6 ?; }- tstart with 1000
! A3 J  K' [/ F& a4 r+ Gincrement by 2;
2 |" ?  G* J1 p' U" D/ v5 g* |/ X! j. {6 h) U
insert into student_ning7. E% L0 t$ ]9 o$ ^1 u" _
values(myseq_ning1.nextval, 'song', null);
3 k+ E+ S, s0 ]; d: O4 M8 ^! q" M: s# D% @4 ~
--删除序列,对曾经产生过的数据没有任何影响。
, D  [( i, L7 h8 x. j- [" Ndrop sequence myseq_ning1;
' _5 A' p  S9 n5 M, y0 p& \- T7 @0 J
SQL> edit9 b5 z, f/ e4 P& c  Q% I) n) m

4 Y3 i) @) l- u/ Z

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


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

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

   

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