我的日常

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

动态微博

查看: 1623|回复: 0

Oracle增删查改 day05

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-03 21:43:49 |只看该作者 |正序浏览
复习:SQL语句" g4 H3 b/ B& |/ u
select& h( c0 M6 t8 ^
DML: insert / update / delete8 E- P; s0 g& S
$ S/ v5 n9 V. t
CRUD0 a+ b, ]" h: |0 {9 @' Y
C:Create
, `* h# b. _+ p8 G! JR: Retrive
2 X, i, Y' e8 M# ]/ E9 c- t1 AU: Update
' g" y: P8 Y" A6 Z) UD: Delete, g9 |7 X$ ~. H( B8 |
' V  A& |8 T$ e
DDL: create / drop / truncate / alter
5 Y2 V7 f! Z2 w# g( s! p) t+ g1 J: Z6 `* l& r4 a! ]
TCL: commit / rollback / savepoint
. |" s7 A: |3 Z, m: q
+ I, d/ G! x9 o9 L2 ]- B& x$ l. ]DCL: grant / revoke
) c6 T) M7 U8 Z- W$ S* Q
! N3 S. t$ B! r2 w% R9 hgrant: 赋予权限% J% j# A7 o( q2 r/ @2 v
revoke: 剥夺权限& {& ~' U4 y/ `* ]9 f: f
数据库中的用户: openlab   hr    scott9 P+ T8 S5 d" d8 N( a/ `
                 emp  w# T; s- K+ |0 X. Q

& r( U0 l" L- ^假设现在的用户是openlab, U4 w- _- U* a" M5 M0 R( p
SQL>grant select on emp to scott;' @3 Y# n/ o7 _2 @* M
SQL>revoke select on emp from scott;# `# R- `' D  N6 w) b. K
  m5 W: q' T8 j
scott的会话:4 Q( Z7 n" p+ ~. Z) ^5 z
SQL>select * from openlab.emp;  V5 B( f2 r" d5 x4 ], N
SQL>select * from emp;
9 N& j7 V9 E' [7 a' X) G9 O7 S) \% Z: q: |/ k1 K0 C( q

& h4 q1 Y' p( c) p9 lOracle数据库的用户:, ?- [6 F8 V0 D) s2 T
sys* x* n1 ?* }7 V' ~. {% |( A: m
system+ [, G6 A: k! s/ p2 V/ j+ z. e& q
. w: Q6 j+ Q" E
scott/tiger
9 [4 `$ @2 w; ]openlab/open123
. \) r" E' j# U$ D7 ~ninglj/******
: N  C( |% _% \9 h' eexam/exam123
+ ?  ?" h7 m: u
4 `( h" M- y# Z. a4 p: m* w3 kC:>sqlplus scott/tiger@192.168.0.26:1521/tarena
, D" s% S! Y- O) V+ J4 i1 iSQL>6 n" A! i0 J. K8 j

( ^0 e1 _$ `% E$ S, r; G- S% }) V) m3 `% B6 l0 Z
今天的内容:2 i! Y' y" U5 [' I1 L
1、约束条件1 H8 r, v& g3 g+ Y- t8 {1 R0 y
2、数据库的其他对象
: {$ b0 g3 j: }  Y: J
4 W" `1 q' n# M一、约束条件 Constraint3 p) }# m. _0 Z1 P  j
1。主键约束:Primary key, 简称PK
' g/ a2 |) g+ w+ D--建表时增加主键约束条件
( e0 H, k9 ?+ Y) }create table dept_ning1($ Q! t& T7 r, u) Q
deptno number(2) primary key, --列级约束条件
9 w! I9 Q3 y3 M# e( R+ x0 A$ U0 Bdname varchar2(20),7 u- X: O3 K+ p, Z
location varchar2(40)* z" j; C' A* F$ a9 h; e2 t5 p
);% i. d7 E! R! s: {6 i2 D; u! J
insert into dept_ning1 6 i* [+ Z+ Z. \! Y
values(10,'developer','beijing');
3 w4 R6 K; l& U& @4 T8 T, e/ zinsert into dept_ning1
- l4 p4 ]7 m, c  _& Fvalues(10,'market','shenzhen');* Q" q& G! ?( T6 c
--如果插入重复编码,会提示:
2 N! A/ n; H. w' vORA-00001: unique constraint (NINGLJ.SYS_C00634053) violated  ]# b6 X4 D- h3 D
其中,SYS_C00634053是数据库自定义的主键名
% A# h& j! X! r, I--约束条件如果没有显式命名,
, ~  h; F5 j( J/ |数据库给约束条件命名:SYS_C*****: a8 Z4 z8 G3 n! A) I7 o

$ G: G( m+ x) O" R# `  Z5 F! d1 C--在建表时自定义约束条件名! z: n, E! Y1 f1 ~
--建议命名规则:表名_列名_约束条件的类型
9 m* ~- l1 ]) \* hcreate table dept_ning2(
$ [/ {5 b7 {1 w0 Q: k/ Y+ n; Pdeptno number(2),
8 L8 n% S4 x* E& p/ K- \9 Ldname varchar2(20),: }0 C6 r- M$ Q. `' T7 G* V. H
location varchar2(40),
$ A1 {' G! a- m2 p; }constraint dept_ning2_deptno_pk
, z$ l) b) @" y4 a2 T, @primary key (deptno) --表级约束条件1 I- D4 |- M5 z
);, a( `! R& c$ p+ H
--当插入重复编码时,会提示具体的约束条件名字错误。
" s( C* \/ Q; B6 ^--方便定位出错的原因
9 R0 I6 f# ~: c9 Y6 [1 t+ @7 X% N4 P* ?' t  A) }
主键约束:primary key = 不能重复 + 不能为空
! f- C: f% N# l4 X  Z" O
8 F) J& Z5 Z& z2 ]! N& C2、非空约束: not null,简称NN
' X5 u  |  c$ |. K1 B9 O+ O$ r学生姓名必须提供,但是可以重复
# T4 _" M9 Y) m/ |4 _. Z2 u$ {--只能定义在列级
) [% W$ ^1 t+ |( Q, B( zcreate table student_ning(
3 z: a) l" l# Q& J! Zid number(4) primary key,
3 v( e2 A' O5 C7 d6 l" O. p! }name varchar2(10) not null,
' m) w% Z' ?" x- Tage number(2)0 Z: b2 k* z! p) k3 ?
);: b- m. z' ]! j- J  S4 j
insert into student_ning
' ^: {) c! l7 C! y# ]8 E1 u; Jvalues(1, 'zhangwei', 20);8 d! c' s. `5 Q& k
--名字可以重复/ U, _) H/ ]* x6 w* x
insert into student_ning
: U. J# D7 ]9 k# ]( I  \values(2, 'zhangwei', 19);
( Q/ B# h0 N$ T6 d--提示name列不能为NULL
$ D# ^9 n9 Y# n% b9 P, Oinsert into student_ning 3 r' k+ X2 c( d; ]
values(3, null, 18);0 k, s; H. I0 t' K1 z
, B9 j; ~0 |. x
3、唯一约束:Unique,简称UK
: S: m( a# K# D6 c$ Icreate table student_ning1(, H, I! R# c4 y- H: _5 |; R+ L
id number(4) primary key,  g+ F, \" h( \# S" S. ?. B! ^
name varchar2(10) not null,
8 a* V, a, i2 L! iemail varchar2(30) unique,
- ~, d  _" S$ p. Nage number(2)
+ n5 x& d9 q  J4 V$ Z& P);
+ e/ Y" I; L7 `% K* }4 \1 Iinsert into student_ning1 - C$ l- G, U. B3 \4 Y& R  z
values(1,'amy','amy@doctor.com', 19);3 w- ]! U( i  E7 E
--ORA-00001: 唯一约束条件被违反( T/ u  B3 q3 H& n* s3 K* B
insert into student_ning1 : ?9 `3 q0 P( H
values(2,'rory','amy@doctor.com', 19);2 e$ v5 f* M) b/ O2 V- x1 d/ {$ n

* n/ a, f3 U; n6 O--唯一约束建立在表级! d1 |( U$ G& V  l6 Y( u5 {. F0 q
--主键约束建立在表级
3 ?+ D$ o1 F+ ?6 r# x1 e/ E1 Z% ?create table student_ning2(9 [) T* `$ ?- u0 K/ E' C
id number(4),) t2 _9 v" ]( s' O# s
name varchar2(10) not null,
9 {: \* d8 ]9 S. T* Nemail varchar2(30)," f# R1 l# s. ]* k' a  n
age number(2),
& F% K2 n% w5 [  mconstraint student_ning2_id_pk
) P% T! t5 y( \- a8 wprimary key (id),
5 `9 E9 N/ |1 a" y4 jconstraint student_ning2_email_uk
$ M, ?8 W& ^7 o; G! u8 s+ A3 }unique (email)
! z( u% r& g/ p, O2 L);
4 l" e0 C; _' L' L" _( R
! r( b( B* X, K. }! d1 w$ Xinsert into student_ning2
/ m5 X' j$ O, ?7 k$ _' tvalues(1,'amy','amy@doctor.com',19);& n# u4 g  T1 ]
$ s5 j7 P  }. {3 q* y6 @/ l0 x  |
--unique约束只要求不能重复,可以为NULL9 c' K. K' t! Z. Z) v
insert into student_ning24 Q9 r' ?0 f1 P
values(2, 'rory', null, 20);; F2 c+ n; {9 ?" `, `* J% N  {( [7 r# D
" u! N7 ?' q" y% K
--不管是insert还是update,email都不能重复。8 z! X( Y3 M& l2 d5 u2 T
update student_ning2 set email = 'amy@doctor.com'
% O, b! \' m& B! q  ^  kwhere id = 2;
9 Q' ?: a4 U3 m2 j7 t8 [0 ^
! t4 e: r7 a0 _9 d; V4 L2 e8 \6 W# |4 w1 ~+ N4、检查约束 check 简称 CK! S, @8 g* G+ N4 Y( J, x! X/ w( k
create table student_ning3(
9 X0 v1 [/ ?# }id number(4),
( r5 ^3 ]5 k+ q) Iname varchar2(10) not null,
7 Q+ n! E! E5 Z) D3 v! y. V) Memail varchar2(30),% c( T1 o2 r, h% l
age number(2),5 f) b* x5 l% z8 J' Z
gender char(1), --'F':女生; 'M':男生
4 ]) U8 d, r# e# `constraint student_ning3_id_pk1 T5 \5 V) I& l. A
primary key (id)," B7 ~4 n1 Q0 j$ y9 B4 h/ Q
constraint student_ning3_email_uk
! e- U) i7 W9 j1 Yunique (email),3 k7 j1 G+ P4 d) N6 ?
constraint student_ning3_age_ck9 n: [- h5 \" A
check (age > 10),
" d# }0 b' p* _* |$ X0 G2 W: _constraint student_ning3_gender_ck3 ]( y: r8 N0 Z$ H( i) \$ H
check (gender in ('F', 'M', 'f', 'm'))
. r6 j% A2 h4 |);2 K. J0 d5 w, h9 q( ?/ Z* N
insert into student_ning3- k6 e# G; g! R' ^% X% C; N
values(1,'amy',null,19,'F');- E  J: @1 o# t+ w
insert into student_ning3
  D( K3 A. f3 W1 V4 ~values(2,'rory',null,8,'M'); --违反check约束 age > 10* j+ a5 R' L1 K" F$ b* t
insert into student_ning3 8 F7 o1 r# Q' S4 X
values(3,'doctor',null,50,'A'); --违反check约束 gender in ('F','M')
0 A1 B/ y, o. _: Y/ C) }9 _9 g
, E9 a/ d/ T3 g" bPK / NN / UK / CK / FK+ m' ~# `7 S6 }

9 R  ^; ~4 Q, J" w% f" p! G, ]5.外键. Foreign key, 简称FK
- d+ n4 e* e# o1 b% B' Fcreate table major_ning (
$ K! a( R) [3 r8 g; H1 a# [; v) qid number(2) primary key,
! H' Z& g; C5 n5 Wname char(20)
4 e7 X  V4 H5 ?2 o; ~" m/ Q);
0 I+ N* i9 j0 l  y# Einsert into major_ning values(1, 'computer');  X* k( `! c4 T* v8 @
insert into major_ning values(2, 'history');4 S: o  Q* U5 V+ t1 h1 ]# G
insert into major_ning values(3, 'music');
& D; s, F# X& ~0 N% w% T. @3 `1 `insert into major_ning values(4, 'sing');/ d6 l' g% q8 |8 F, {1 }1 f; d8 ]
commit;4 k& x3 ]& O5 T
create table student_ning4(  s3 K& [- `" O
sid number(3),
5 o4 N5 }: A" Aname varchar2(20) not null,
& ^& `. H- P# Xemail varchar2(30),! j8 H+ H! y1 H# K; r5 v
gender char(1),& I' N. G, b2 N/ T1 c, A$ J
majorid number(2),1 ?5 P, P9 f& {9 Q" c4 F( y
constraint stu_n4_sid_pk primary key(sid),: L1 e; U9 J4 {. Q; y
constraint stu_n4_email_uk unique (email),
& R! M/ C0 \& Z0 A9 a+ y  Vconstraint stu_n4_g_ck check (gender in ('F','M')),
( p, u9 p9 u+ \: ^1 q; s' pconstraint stu_n4_mid_fk foreign key " M9 A4 P- d0 |/ Z, x: g6 M
  (majorid) references major_ning(id)
4 Z; X$ Q- P4 x/ h* J);- E1 E+ k3 r' E8 O& T- t
$ |( |% Z+ X$ c+ e
insert into student_ning4: o5 ^; o: J9 n' ]
values(101,'amy',null,'F',1);. X+ \) w5 f: b; w+ P& l
--新增数据,不存在9这个专业, ]" X0 B3 G0 |: W. o( _
insert into student_ning4
6 v% Z% X& _2 w& |6 B6 {# Yvalues(102,'river',, v1 U. q% }: P/ h4 r+ r
'river@sina.com','F', 9);
. [5 \! L$ b0 h: Z8 [--提示错误:
. J! K3 L8 G! ?; P& UORA-02291: integrity constraint (NINGLJ.STU_N4_MID_FK)4 |, Q* C: h( W! T8 p) A5 f+ B! P( x3 V/ J
violated - parent key not found
8 X3 }- }* v' D* Ninsert into student_ning4
% Z) Z. H: ]  d4 q7 n2 Kvalues(102,'river',
7 i; l# G* o' t* r5 R/ a! e'river@sina.com','F', null);9 F+ I8 M$ B6 A3 l/ e2 S

7 D2 z% d& Z$ `' O6 w, K3 Z--有学生属于专业1(computer)
  U7 p9 }# G5 ?7 c. o; idelete from major_ning where id = 1;
, @5 i' l2 J. F0 ~+ U--ORA-02292: child record found
6 V2 v6 B4 C* D; M
- _; c6 ]' Y9 d0 t: ~" S* lcreate table student_ning5(
$ p/ N  y" m* o3 ?. i; f* {sid number(3),
% i$ [* M% y3 h1 h0 v, o6 Bname varchar2(20) not null,
4 s# ]0 ?0 Q2 S9 s4 w5 J0 {email varchar2(30),
6 ^. N/ p/ S7 u4 d. `" Lgender char(1),6 c; h; W# g0 \" @6 u8 ^! M2 o
majorid number(2),# y' ?0 w4 o/ o7 `5 S& U* v5 O
constraint stu_n5_sid_pk primary key(sid),6 D3 i$ C4 m  F! f/ w2 U
constraint stu_n5_email_uk unique (email),
9 y9 R! G$ I) P0 vconstraint stu_n5_g_ck check (gender in ('F','M')),
  u6 ^, e6 l- J3 hconstraint stu_n5_mid_fk foreign key $ o4 c7 T8 P3 C4 }+ B3 M
  (majorid) references major_ning(id)
& B* \, E3 }4 N  S  u8 G3 K. h  on delete set null);
# g0 x, t: ~7 l0 d* W& l+ K7 q+ J+ g! @' F
insert into student_ning5# G$ b% I. G" i$ F7 ]* y
values(101,'amy',null,'F',4); --amy是4专业的学生
  S1 W/ v& c& ~5 H$ ~--删除编码为4的专业
3 @3 l, N5 x7 j% W/ {( P6 K/ udelete from major_ning where id = 4;
$ v# Z5 _6 j, t; W: c: G--amy的专业被设置为NULL
& V4 ]5 E) X/ q9 y$ }* Bselect * from student_ning5; 9 f: N$ l% s4 q. o

" X" S( _2 `* E8 h. qcreate table student_ning6() J, h9 D* p8 W5 @2 l% R6 l
sid number(3),+ U' a* A! t3 r: `; W$ {
name varchar2(20) not null,& @# j8 q( m0 N6 S8 O$ S# P& E
email varchar2(30),2 a4 g5 [( x6 {$ O0 o+ K
gender char(1),9 Q$ _4 T; v4 }; N
majorid number(2)," U1 |6 f* w# c  p6 D# y& B
constraint stu_n6_sid_pk primary key(sid),& I! E4 r( @& a9 e
constraint stu_n6_email_uk unique (email),
; J, O" Q+ g( @! p; Nconstraint stu_n6_g_ck check (gender in ('F','M')),
. z8 K" T$ R" T  }9 Q3 Uconstraint stu_n6_mid_fk foreign key
- R0 I+ ]$ X& ?/ F# B* d% p9 K  (majorid) references major_ning(id)( H/ n' r' L! n4 w
  on delete cascade);! ~  \& b4 {" ^$ r& d- v

# C+ [  n) H1 \7 k--复制表,不复制约束条件。# `5 K2 q' K* F' z" y7 Q  g
create table 表名 as 查询语句4 g' S9 M0 J1 b! M
; P4 i$ n. N$ F# I  V- x8 n7 y
--建立约束条件的时机- N/ i7 @, t; R( i8 e; P, v
--建表同时建立约束条件:
) f, I5 ]% j% m* d  r- A, ]- rcreate table student(3 r7 I3 K8 X  d5 N: k% x8 `
id number(3),
1 G0 w2 E2 }7 l  _) i3 ~name char(20) not null,/ Y- m/ j8 a: J1 o- a
majorid number(2),
) j+ v$ Z. J9 y" c$ Fconstraint stu_id_pk primary key(id),& w$ {2 ?; e- X2 L# d* x8 E5 Q
constraint stu_mid_fk foreign key(majorid)
& O7 p7 w" j* ]   references major(id)
. k8 x* v. J: _3 E" U6 ~  @9 ~! Q) ~% Q);
0 l! d0 _+ F! a" D0 N--在创建完表以后创建约束( g, S) e5 p! c& ^. E
create table student(/ k4 O9 ~% s3 h8 Z+ D/ i% n
id number(3),- M: u: j2 H5 \  ]3 A
name char(20) not null,
# D$ P9 F/ }- p2 F2 E3 f9 xmajorid number(2));8 k  d7 l  K- a; I6 X6 M
alter table student
4 n% u+ u, F4 M+ Z0 Z6 \8 f  add constraint stu_id_pk primary key(id);
8 J) g, u4 s  J) }8 A8 ialter table student
& V& H: ^+ c  e4 k  add constraint stu_mid_fk foreign key(majorid)' Q5 _/ C- L. m" Q) N
  references major(id);# A6 E' Y) T! E/ E; i1 F
. G+ X2 K6 m' d3 a  M& Q
-----------脚本文件begin---------
4 f/ O# `8 I" P. t+ i/ p0 |& nalter table student drop constraint stu_mid_fk;7 O+ @* C' J8 Q; Q
drop table student;
  u% m' ?' G8 u# \4 ~drop table major;4 q! l( Y* W2 M' _, n) ~, [
create table major(....);2 h! |# D5 m$ B4 O- D& h
create table student(....);" O# r6 C6 T- V, p6 k, A" y8 ?/ J- V
alter table student add constraint ....: P& T' H! x+ h6 @4 v1 m& y6 P( C5 x
-----------脚本文件end------------  `! _' c# G3 v. P
9 `$ p8 t4 @4 I1 s7 K( X$ ^+ t
user_tables  :用户所有的数据表
1 Z3 q/ u* y6 D: E$ kuser_constraints:用户所有的约束条件6 J( Q# t" q/ i" Q/ H) B  b3 K
user_objects :用户所有的对象(表、视图、索引...)
7 n2 C/ b& v+ u$ x# B$ U2 m- p; w/ ~' X) M. i6 @
all_tables  :用户能访问的数据表,/ m. P# q& w, g2 G' G
             包括自己的和别的用户允许自己访问的
' ]5 n" E: E4 k$ _* ^2 _all_constraints:用户能访问的约束条件
- [6 Z7 f8 L( Jall_objects :用户能访问的对象(表、视图、索引...)' c+ J4 o+ O: Z4 g% [1 G! b
' p! Y' G1 w& u8 g6 K  n
PK / FK
* ~2 U% ]8 L* i" ~& s5 b9 |NOT NULL / UNIQUE3 R) u/ |6 r2 k3 t
CHECK
$ g9 a' Q! ]7 _% W# g. v2 w; @其中:CHECK和NOT NULL可以在程序级别控制3 ~& [3 i& A2 t. U

# V0 S2 R1 _# m+ X/ W5 n4 A5 P+ T% d二、数据库的其他对象
3 o& A, {( h" s9 X* t0 f4 }表 Table0 d  Q3 z% W- u
视图 View
+ T6 c2 J8 e4 C6 I索引 Index; Y3 X: V7 S  o. Q- o4 r
序列 Sequence
% `  H% x1 J% L1 }/ z3 ^过程 Procedure
  U2 X# g- |4 Y; o: j, A函数 Function0 A- F/ L+ @. Q
包 Package
- U! K7 t' r& p( ]: q0 S触发器 Trigger9 h" S4 b4 X5 o. Z* Z
同义词 Synonym3 N0 w6 _$ F4 g3 A
....! E3 ~0 c: L3 s8 J9 N0 W
5 y- M- [( m% ~, Q, K
1.视图View
! t0 G) T. I! a+ H: w& z) _7 Q0 icreate view v_emp_ning# k* a* p0 p9 q% r+ I$ E* e# o  e
as/ q0 [* i: V% R! T
select empno, ename, job from emp_ning
2 h) [' t6 ]( o" ~) _where deptno = 20;8 h) Y, A1 [1 T+ D7 I/ c
--使用和表相同8 v( ?% P- i9 ~! W) P, _
desc v_emp_ning
" W# K4 F) r0 C' f2 x( Sselect * from v_emp_ning;
! \1 f7 f5 l, ^# y. u--视图的好处:简化查询;隐藏数据表的列. @3 I$ D& [- L) V" V
& |' I' w8 d% W. t
create view v_emp_count9 Z: l$ G1 {% }7 M3 ]  P& H
as4 f( h- |* M7 d
select deptno, count(*) emp_num
& D8 x& h. n2 E6 C) b8 l9 M- _from emp_ning3 M8 E8 s6 m; S. f& Z, V
group by deptno;
5 D: d" p* L# y4 t--修改基表数据
3 m2 @+ B$ h" x  Z( o( x update emp_ning set deptno = 105 p5 b3 s1 U7 h8 P0 K. t
where deptno is null;
  j' {4 e# R: r" B$ ^--视图查询到的是修改后的数据。7 [) Y. ?( [: S2 G$ y9 Y
--视图不包含任何数据。是基表数据的投影。
; ?6 f2 |9 |- L6 S8 z- o9 Dselect * from v_emp_count;, y9 U2 s4 k2 v) p

' X5 D$ f1 E3 N( G3 @) i--创建或修改视图
  b: Z  ?$ h& E2 K) }; Z3 `create or replace view v_emp_count3 D9 b- K1 c3 H& \
as
/ ~1 w/ E  Z6 p$ Q- sselect deptno, count(*) emp_num,
( |- S7 Z+ u2 G$ [" vsum(salary) sum_s,
  E3 a5 U! J3 \avg(nvl(salary,0)) avg_s,! K0 T3 S2 y# z- f/ J& G5 G
max(salary) max_s,
, A6 T' g6 {& P  jmin(salary) min_s
$ Q, z1 H0 F& @3 T$ Jfrom emp_ning8 r8 }1 }- Z. H1 Q5 r( W6 _
group by deptno;
" a; @1 G9 B) W5 Y' h7 B1 L
% x2 C" a$ H% o9 y--查询视图的定义
. C4 u0 q, V7 m5 s  Oselect text from user_views' g2 j1 }' r. y% Z! Q# J6 N
where view_name = 'V_EMP_COUNT';+ l! V# ^5 }- C
--如果视图对应的sql语句显示不全
) g4 G) M/ G  A/ Jset long 1000
! M0 d7 `# a; Q6 x& `9 k  W& {3 w$ |' M. _' H$ _
2.索引 Index :用来提高查询效率的机制。2 X& K5 b( h% E- H. k5 O! Q4 S
全表扫描: Full Table Scan: 查询效率极低
  g! }" @$ R' `) p/ u, _2 k索引查询:比全表扫描快。
& o) J( X/ l) O+ W! B* Q4 P/ d% \# b/ Z7 N1 z' {* U4 ]
索引的结构:数据 + 地址# l+ i9 i: ]+ A3 j- Y
            张三 + Room2030 ?3 u9 E" {7 u5 x3 F( \8 X% D3 c
. g! G% m. v& H9 e; V7 B
对于数据变更频繁(DML操作频繁)的表,
* G) L' f5 U& C. X3 W# F( q1 ^索引会影响性能。
3 s$ J/ x1 g" s# `0 U) _+ G- V& O& \4 J, e' X
如果数据表有PK/Unique两种约束,索引自动创建
5 a$ \  W: \0 U; Z( u" y除此以外,索引必须手动创建。! |* l1 a* s# h0 _
create table student_ning7(  B' {6 k) X" c8 x+ a9 Y" }2 R" {" U
id number(4),$ V- U9 H. S: F  A# z, d
name char(20),5 k; ]. m+ ], t; a4 ]
email char(40),
  }1 H8 ?& W, B7 n/ W: A" hconstraint stu_n7_id_pk primary key(id),
& w( a# ]- g, _6 ?% Xconstraint stu_n7_email_uk unique(email)( W) p3 E# h. J/ r
);
3 V  C- G0 k7 y, s- Z; W. eselect constraint_name $ g+ l: v/ s7 P
from user_constraints
  R# y# r: q; [where table_name = 'STUDENT_NING7';
& X% _' p" \. `# p$ I* I. P# R3 d
: e- q6 V: A% C& S5 O2 G9 o--查询student_ning7表上的索引,, i/ h+ [4 f8 w* `9 S" i
和主键/唯一约束条件同名,数据库自动创建的索引。  M; D5 A/ y) F' U+ _0 E+ D
select index_name from user_indexes$ `; F3 h( K" }+ z  X7 T- E- y9 X
where table_name = 'STUDENT_NING7';
- F5 l( K* a3 c2 U3 {3 U! ]5 Y! |) ~
--凡是id或email上的查询,会使用索引7 L: ]$ t* c4 ~! X# C: p
select * from student_ning7
+ v2 K3 g9 h1 Y  jwhere id = 1001;3 u6 t. i$ L( }" B, x
+ X; l5 e; j; d# n
--这种查询用不到索引:全表扫描
* K( T' v4 f: Q  U& sselect * from student_ning7
) m# n; j9 D- d% X) e3 xwhere name = 'zhangsan';
" H+ l- s2 V# l* O5 |  f" q; Z: n3 Y, Y( n$ A- ~
--创建基于名字字段的索引,索引名自定义7 S. {% b+ E* Z1 A, l/ p8 c% t
create index 索引名 on 表名(列名);
9 M3 r# _: ~  {3 W4 }+ d; e) icreate index idx_stu7_name " I% U8 f) [) U) a) Z4 _* T
on student_ning7(name);
1 L+ i$ w5 m6 n9 P5 u' q* z- X/ U3 F6 K3 f+ u( o- ?% q
索引:
" Y2 u% N# n( ^" {9 l8 D5 {' M" ~1)了解索引的工作原理
% v2 |* i3 [+ @3 J8 Y5 {1 N2)pk/uk自动创建索引7 G& k( z7 ^+ z& _% _
3)根据查询情况决定手动创建哪些索引。) }* [, }2 e* i; A) r6 i3 q
3 s; @5 U* y: I2 F
3 ]6 z8 A5 E2 e9 N  K( `
3、序列 Sequence --Oracle独有的
* o! W/ P6 T% L% g; |! K5 G% v--产生从1开始的数字值,步进是1# ]3 {7 m7 ~9 w! n5 x4 u  I1 J
create sequence myseq_ning;6 J+ e1 x& F& v3 B- t
select myseq_ning.nextval from dual;
' H" F1 G! D* X+ `; ]4 Y% m, |8 ^* P9 D0 J9 R$ l. C
序列的特性:产生连续的不同的数字值  }6 [2 \4 i4 k
用来作为数据表的主键。
% `* v4 S5 o& i; T. ^" p) t- Z
+ ?  W8 r3 l& _5 C# r* [& w4 j3 C' j& D--使用序列产生的值作为表的主键值
; K7 ]# t4 _9 f- I% a+ c. }* _insert into student_ning7(id,name)
6 `" |: U: @  f+ g3 I. a* Nvalues(myseq_ning.nextval, 'amy');9 s9 W; z# Z; r# D! p. {. k( n

! O# X; X: U) g; W" cstudent_ning7和序列myseq_ning的关系:
7 ]2 g5 C6 m) F: j- Y8 W是数据库中的独立对象+ d8 `2 r* v+ g  q/ j
--表可以用序列产生的值作为主键,也可以不用1 T; q* ^/ P/ a; P6 u
--序列可以为一个或多个表产生主键,也可以不用4 A) Q: h( D9 f) {/ k8 [" _8 e
insert into student_ning7(id,name)" y! p# u0 T' i) P  c5 b
values(100,'river');
7 s0 k2 J. q- z! D" rinsert into dept_ning# \) E6 S* a$ L& n) U( w
values(myseq_ning.nextval,'market','bj');
" m- z0 y4 Q( S  {
7 I1 x# t- \2 C1 M--建议:一个序列为一个表产生主键
, b' q4 B- H5 X! H# }7 ~1 q, O* L/ m1 Q: H3 L6 E9 A. z5 b
希望主键值从1000开始,步进是2?
: y+ n: v- [7 _create sequence myseq_ning1
" a" ~3 X8 x3 ]0 D; a) _8 e8 Fstart with 10001 V( u: |7 a' F4 M" F" z
increment by 2;
! J! V% m6 w- m2 I8 k- K
& m' M0 q# g# M( Q3 kinsert into student_ning7
: d% z% m; p/ r% T& evalues(myseq_ning1.nextval, 'song', null);6 ~3 B( I0 b! `5 j3 Z+ f2 X( s: ?

6 b1 c1 H' Q( y! k  f$ I' }--删除序列,对曾经产生过的数据没有任何影响。
, ^% Y$ H6 r; ~4 l7 Ydrop sequence myseq_ning1;* g+ |" j0 Z/ {) F; p

5 R0 t% e$ k: f8 {SQL> edit% S; I3 c/ F4 M0 X' g- a2 S( e1 N

# ~  z  z/ A0 y( ~  s/ _

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


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

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

   

关闭

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

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