我的日常

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

动态微博

查看: 1598|回复: 0

Oracle增删查改 day05

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-03 21:43:49 |只看该作者 |倒序浏览
复习:SQL语句8 @1 N7 O' `4 y1 H0 M* Z( X& a9 U* V
select" G1 z5 I' u% C3 W; u2 f5 g
DML: insert / update / delete
$ S) P* u3 o4 J2 A9 G3 D' V9 l) V! j! o% }. j
CRUD
  y  N& f1 O3 wC:Create8 v+ T2 `6 U3 d; B$ D
R: Retrive9 n+ {4 z2 }' }& W
U: Update
. X3 M5 X% |" \. ^; n5 nD: Delete
) I9 w! A3 O7 B$ E6 c1 m
9 ]6 x2 A: B/ L6 {0 q8 @3 I0 j9 @' bDDL: create / drop / truncate / alter
: u+ O; V, ^$ C8 R) X
) j* J: z' n# M* F) J! vTCL: commit / rollback / savepoint/ h" |+ l& e$ [( y' H1 P7 |" V

' M4 N% r. ~  L) iDCL: grant / revoke& }* Q: }7 c2 A& G0 _
, \1 }1 H# M+ @7 d: L! x
grant: 赋予权限, Y7 v1 ^/ ?8 j
revoke: 剥夺权限
" b4 i  Y, y7 G# L数据库中的用户: openlab   hr    scott
4 H: x/ ]4 V# U$ O' M                 emp9 m5 Y5 E" l8 M# f3 q
3 H; {2 U2 `- M2 c
假设现在的用户是openlab. c. a1 i1 N5 K3 L; l2 I
SQL>grant select on emp to scott;7 L9 o+ _. U) ^" d; v6 ?* E* _
SQL>revoke select on emp from scott;
2 x9 Y0 _3 M# @: U& ?& d
/ I4 S/ V$ I% K" nscott的会话:
$ c# r" Q2 J5 X2 w; P, cSQL>select * from openlab.emp;/ f( i0 N. y& ~- O+ E; {# |; {
SQL>select * from emp;  M: b4 e8 R( Q2 m- ]
- B1 J5 e" {( X

' V/ S- [  b: r, _3 }, JOracle数据库的用户:
, N/ \4 t" R3 `; x  R! \/ Psys3 A+ m. O8 N5 H7 F. I. h
system
6 v$ V# j: p4 c. }
" m2 ]% ?8 w# C9 q2 Zscott/tiger; {& W0 x! `7 [) U5 F
openlab/open1235 t9 p) p, p7 |7 D/ [/ [
ninglj/******
+ T5 O1 a. a# Qexam/exam123! A, l: ^5 X9 |
/ Z3 y/ Z! C9 l* n; |
C:>sqlplus scott/tiger@192.168.0.26:1521/tarena
  p0 I; F% t8 P8 A3 V" T! gSQL>2 d4 ^+ \# V! }6 ^, q
& ?1 t+ o8 e* z- w5 \

3 E" ?9 Q' O5 J今天的内容:
+ B! b. J( _. y4 @5 b1、约束条件1 r6 s6 @$ z* T
2、数据库的其他对象. E  D+ b4 C/ M

' s, d6 g$ I' b9 R) y" \7 i一、约束条件 Constraint3 \$ @4 X) d) u# Q+ v8 G% {" q+ P
1。主键约束:Primary key, 简称PK# Z  F4 h* R  X3 o  F8 ?
--建表时增加主键约束条件
) x  L- ^) l: O4 ]; C" dcreate table dept_ning1(
! {) J" S) |2 ]) S+ Rdeptno number(2) primary key, --列级约束条件) h/ i8 ?) B( U6 v, E3 g8 ]
dname varchar2(20),
7 V& F" K9 v0 T  x" e1 a0 j* v6 Rlocation varchar2(40)- i: L/ T  k7 W" a$ @: J
);
& [2 V5 c% o7 l! v( C, B: W5 `insert into dept_ning1 + ]4 ]! K( t5 n9 m, ~1 }3 V  }( e
values(10,'developer','beijing');5 t4 ]/ B( K. E- J& m2 d
insert into dept_ning1
( L6 j& @! X3 v3 D' ^) ~+ Avalues(10,'market','shenzhen');( u( B% G2 x: i# C% p
--如果插入重复编码,会提示:1 `' b% z, E2 M
ORA-00001: unique constraint (NINGLJ.SYS_C00634053) violated
; h5 T7 V6 C1 M/ r其中,SYS_C00634053是数据库自定义的主键名
& X  w& y' i) k. u: S% l6 y5 w--约束条件如果没有显式命名,
' @5 h9 C) c# R1 X& ?1 ^6 q数据库给约束条件命名:SYS_C*****, i! R) @. z5 N8 x" N9 @

* k2 [7 s0 O0 G/ K/ `$ x--在建表时自定义约束条件名' h% ^% {% A7 m0 l& k/ E
--建议命名规则:表名_列名_约束条件的类型
" n/ K5 }+ t! b, ?% Ccreate table dept_ning2(- @0 j4 p( m# T( ^  H
deptno number(2),
6 Y( \% i0 S" a+ B! q5 Ndname varchar2(20),% F) [8 i! V% v; g0 j3 {, q
location varchar2(40),
* Y. k+ P0 d8 O. |: e  {( O  pconstraint dept_ning2_deptno_pk
' ]$ Y" C: }( |primary key (deptno) --表级约束条件  L5 X. V; `. s( N) ?' e; `
);( D' l7 {1 ^1 {4 I+ y9 q
--当插入重复编码时,会提示具体的约束条件名字错误。# T% ~9 `, o/ a/ `! n' P
--方便定位出错的原因
8 J! k2 i  E! U) M* v2 q/ E5 @
4 k4 C" @. p0 y/ W主键约束:primary key = 不能重复 + 不能为空
  c' w, d0 A9 @; W! a2 d7 Z
: M7 I5 g% p3 \% K9 b. B' `2、非空约束: not null,简称NN& J8 T& ]# v6 U$ n; k/ [
学生姓名必须提供,但是可以重复# a* O: S& f/ ?! c. Z
--只能定义在列级  c7 c% Z6 i  {* r, t  P
create table student_ning(  u) J& J" D  B2 i7 [. r
id number(4) primary key,+ g; E- |8 N2 J9 o3 U& ?( z+ u
name varchar2(10) not null,+ d; v( P# G' ~# W$ q
age number(2)+ ?8 u- ^1 n6 j- P
);
6 {6 G; d  e4 V8 [7 v" K; x. x0 A4 rinsert into student_ning - U3 O3 K# O% u; E4 p! r
values(1, 'zhangwei', 20);# I) _6 F4 p+ n, |" V% M( n
--名字可以重复
4 P. n# V( ], F4 l6 Zinsert into student_ning # r. v) f: ?4 _$ G# U' O1 p
values(2, 'zhangwei', 19);
  y$ v& u* M. f: v0 z; w" V8 A3 ~--提示name列不能为NULL) l8 {& F0 }* h( ]
insert into student_ning : [$ W7 F" d  s3 K
values(3, null, 18);1 ^4 W( x6 w/ _9 m& o
, q, l& f6 E0 ?6 o3 o
3、唯一约束:Unique,简称UK2 W: K4 c8 m( o2 L8 J% L
create table student_ning1(
0 d4 ~  B0 s( a# H$ O! _; uid number(4) primary key,
$ L8 \- w2 Y) Fname varchar2(10) not null,% k# R" a( G/ K
email varchar2(30) unique,) C. K* Y3 J4 U3 J" E# W
age number(2)
( e1 N4 W" l& O: D& F' o' {);3 e+ f+ Z- z! h# E4 j" N/ q7 u
insert into student_ning1 5 O. `7 l8 e* n
values(1,'amy','amy@doctor.com', 19);
- g2 L5 ]+ q7 {5 i- b: f- i) l5 Z' c--ORA-00001: 唯一约束条件被违反. k7 P5 i) X: C) H( e
insert into student_ning1 3 v/ W. [! ^8 z( c) H* {
values(2,'rory','amy@doctor.com', 19);9 ?+ _3 S/ j0 U% G

; m% S3 J! L, n6 [* V* Y' `--唯一约束建立在表级
5 C! ]1 r& ]4 ~+ j& F--主键约束建立在表级7 N/ e( B/ ~) r- _9 m
create table student_ning2(! I3 w+ f% h3 l* ?* L2 i* I) q9 U
id number(4),/ D; n4 |7 U$ a/ I
name varchar2(10) not null,
9 x8 |+ Q  N. S# d2 [1 ]9 _email varchar2(30),6 @' u) j# d# d) r
age number(2),6 K, m+ X& U+ a5 G/ L$ L' H
constraint student_ning2_id_pk* a7 }) G$ y% `' R) r
primary key (id),
4 \# x2 w1 S( L5 d: Sconstraint student_ning2_email_uk
1 U; u% s* i! ]unique (email)8 d6 u* w  \9 o  t
);# b# {! y3 a4 L3 e

) C7 g0 X. @% A& uinsert into student_ning25 C9 r. r1 d) e  Q. g4 ]
values(1,'amy','amy@doctor.com',19);3 y; K- I( `% i) R
$ P( @: B+ A# M. v% Y% P/ u: R
--unique约束只要求不能重复,可以为NULL' U+ E- x+ O! u: l
insert into student_ning2; ~2 }2 T7 g; n( s* ^% K9 S6 j, B
values(2, 'rory', null, 20);
+ C$ w/ T2 O. N4 J2 s) I! @
. r, N& ~' l0 D: R--不管是insert还是update,email都不能重复。/ ~+ M0 ^* G, f* s$ j. {. x1 q7 P' u
update student_ning2 set email = 'amy@doctor.com'
, W" z$ L* Q8 d) f9 ?where id = 2;
) S! k8 [5 ^. [/ Y8 v9 ~! J# i7 d6 G; M
- Q, c! v+ ^% `" A" j, F; {% @* J8 |) f; M4、检查约束 check 简称 CK
) t2 o4 S' K- }+ a+ {1 P' Screate table student_ning3(
3 h4 P; {: G9 z1 j4 d0 v  K# J/ @id number(4),
, Y7 i5 N6 R* R) j% f8 C4 i! Gname varchar2(10) not null,% j' O& x& v$ A. k/ ^: I6 j- ^; p
email varchar2(30),
7 c' c/ B, I# H/ T) t. `9 i: xage number(2),
) Z4 {$ Y! Z& H5 v3 S) Qgender char(1), --'F':女生; 'M':男生, M# n+ V  h4 g: A) s5 g, l
constraint student_ning3_id_pk
" _8 n) m' V$ N4 H- g3 J& o( h6 tprimary key (id),
$ ?/ r7 k# j5 w2 b, F+ ?$ qconstraint student_ning3_email_uk
; ~& K( \& E- |( {unique (email),
) {6 x) N& _2 K) S  Qconstraint student_ning3_age_ck7 H1 E- k" Q& L5 A7 w1 q+ ~5 j
check (age > 10),
8 O9 ?4 @  z. R. Pconstraint student_ning3_gender_ck
/ Y) ?) q" I2 z9 X- f1 L1 ncheck (gender in ('F', 'M', 'f', 'm'))% C" {4 a8 |6 ^) K/ V+ c
);4 t4 R; `: N1 g
insert into student_ning3' p' N2 }8 g, c$ A1 ~" s8 G
values(1,'amy',null,19,'F');/ |7 H2 e$ h. Y0 N# k& H# ?
insert into student_ning3
# R% G0 `* E/ `values(2,'rory',null,8,'M'); --违反check约束 age > 10
! c0 C8 {+ {) Linsert into student_ning3 % f8 a" q1 |+ Z" `. J
values(3,'doctor',null,50,'A'); --违反check约束 gender in ('F','M')1 K9 ?' l9 k' c" D' N8 W
' g9 S4 ~7 Q! S. K! `
PK / NN / UK / CK / FK
! @3 N* A, f% e+ w9 ?# N6 J8 P# [
8 B. ~8 w9 S7 j7 E0 B) i5.外键. Foreign key, 简称FK
# C1 l, ^( ^( O  }create table major_ning (2 I# N/ ^8 {# Y/ N! H. B
id number(2) primary key,
2 U- g, V5 G1 k! w/ Wname char(20)
5 c2 Q1 \1 G9 ~; ~% [4 \);6 ?1 U( K  ]6 a) M3 M5 Z
insert into major_ning values(1, 'computer');; u" P0 r7 L) l9 f2 r/ q) U
insert into major_ning values(2, 'history');
+ c5 x, G) U0 V5 a) Kinsert into major_ning values(3, 'music');) d4 y7 b% U* Q" y0 b
insert into major_ning values(4, 'sing');- |; z2 M; O2 i% N& s- B
commit;
8 t2 Z5 D* x2 H3 R) d% k* N- `create table student_ning4(! ]( f! d) |9 c: A6 `
sid number(3),  Q, g1 o/ z0 n/ e- ]3 v: q
name varchar2(20) not null,9 Z6 n4 [# s( H+ X! f0 q6 P3 E
email varchar2(30),
$ U2 J$ R* g$ t3 mgender char(1)," |$ P: e& S$ A& B8 D0 T  s* G
majorid number(2),' d* Q8 c) ]5 w8 [5 n+ i
constraint stu_n4_sid_pk primary key(sid),
2 g4 E: g. H' m, k+ I3 i7 bconstraint stu_n4_email_uk unique (email),+ [" P5 @- N& D1 d
constraint stu_n4_g_ck check (gender in ('F','M')),
0 T6 A4 {; E% @7 M( \% hconstraint stu_n4_mid_fk foreign key   e$ \/ V+ h4 `  M' r
  (majorid) references major_ning(id)
- `; s' H2 [+ v1 l% g);; H* ~* C: E* _" @
( d. g: J6 r) h# j
insert into student_ning4
3 E# N9 n' J# G3 m# u# _# Hvalues(101,'amy',null,'F',1);
, \5 Q4 u0 F/ d7 ]9 k--新增数据,不存在9这个专业  K* s$ E: M4 {# |& T; ^
insert into student_ning4  k4 L8 r% e: k4 H
values(102,'river',
" y; E7 |3 s, u0 g! C* s6 f9 \'river@sina.com','F', 9);& d5 W. l* t/ V
--提示错误:4 `2 b. k; v. ^9 B
ORA-02291: integrity constraint (NINGLJ.STU_N4_MID_FK)
: g$ r0 K) Y6 H4 t; p' S violated - parent key not found
8 L. A- B/ g3 D8 X3 O* ]% Vinsert into student_ning4/ h$ T0 M4 S& \5 s) a1 O
values(102,'river',) X, b+ N: J5 Z4 N* ^
'river@sina.com','F', null);  S9 N1 p$ X$ L/ y0 M7 n% n

1 ]8 g8 x- S9 _9 X1 {0 h/ `5 p--有学生属于专业1(computer)6 V- {/ O# W3 i( ]& B% L) D! `
delete from major_ning where id = 1;1 |" \4 R/ [4 _$ h
--ORA-02292: child record found
- }6 X9 Y: L8 O$ r+ g' ~4 j$ H* Z; E( e6 x
create table student_ning5(
, H" T; F+ F1 Y, J, P! rsid number(3),( J) ?9 b( i7 f& t) k1 M, _
name varchar2(20) not null,
% }% }& t8 `0 zemail varchar2(30),5 k8 h) @' t( i) {1 m* i" m
gender char(1),& o0 w5 \9 c: d$ g/ x$ z7 X
majorid number(2),
" G$ `9 ]; s4 }% J  c) tconstraint stu_n5_sid_pk primary key(sid),' l& d) c( u" ^8 y' T
constraint stu_n5_email_uk unique (email),
+ M8 x; A7 ^/ y% [; U+ Aconstraint stu_n5_g_ck check (gender in ('F','M')),0 q7 E" R5 G5 p5 I% s
constraint stu_n5_mid_fk foreign key
/ g( I9 E5 E+ J: J, q7 V  (majorid) references major_ning(id)/ x8 E, _7 q! @# X3 y+ P- {$ p
  on delete set null);
7 k8 G+ H0 C8 S- ^  w2 \2 t
/ C8 P2 x6 ?8 N1 k/ N  h4 P& @4 S/ ainsert into student_ning5
: a+ k' o; v$ xvalues(101,'amy',null,'F',4); --amy是4专业的学生$ B2 l! a8 {0 n; F) A
--删除编码为4的专业& N( }# a7 g' N. l. y, e
delete from major_ning where id = 4;, j: o. {( L6 _. ]1 e1 W
--amy的专业被设置为NULL% f! I# B7 f3 O4 }4 g) q; X9 W
select * from student_ning5; 9 ?; |4 Z/ d% T* V" y4 @- I0 a4 l
( v, ^0 ^, T* H+ a4 v" N
create table student_ning6(
  \7 R$ {- ^4 K; Y1 O0 Msid number(3),- T; `% r) L; Y! G! U  u' d
name varchar2(20) not null,6 t$ z6 Q. x; c: b: c: y0 O/ l3 ^  A
email varchar2(30),; V2 P# U/ D9 `- N+ o/ w
gender char(1),
  N. i# O( ^' c$ \& O: jmajorid number(2),1 f; ?* J  i/ ]8 i
constraint stu_n6_sid_pk primary key(sid),# q0 Z1 d) Q0 m7 _% f1 x
constraint stu_n6_email_uk unique (email),+ {! L3 p/ p- ]9 T6 t! }# F
constraint stu_n6_g_ck check (gender in ('F','M')),
0 c- L8 n# E0 t0 P7 [$ jconstraint stu_n6_mid_fk foreign key * f; T+ ]% w8 D1 o
  (majorid) references major_ning(id)
% C& M, _2 }  X9 F& J  on delete cascade);
; X) |0 B# U8 ^, `4 ~, r1 m: L7 S0 c
9 z6 V/ P% M' T  ?; `, n2 w  _" Y--复制表,不复制约束条件。- |+ E8 \/ R2 ~% W
create table 表名 as 查询语句
1 O1 k  O! E5 T2 {, e4 L: u
' i. a( n; e7 e$ w0 a--建立约束条件的时机
3 V, ]4 j* l6 V' V) j/ j--建表同时建立约束条件:: k9 ^1 y4 l5 t5 }- r! ?
create table student(7 M, s& Q2 R. B, B
id number(3),
. S0 n6 _( p( B/ Z1 C7 Fname char(20) not null,( K$ p1 ^& R0 ~3 ^
majorid number(2),
, X5 ]* N* q9 W# Zconstraint stu_id_pk primary key(id),/ p- W+ P* |1 y
constraint stu_mid_fk foreign key(majorid)' G1 z1 v: {( b* U, X
   references major(id)
5 _$ \6 k3 @* e" ^! g/ e# W5 ?);
2 j! K% y" t2 G# m--在创建完表以后创建约束# X* t4 w+ z! p4 H+ z, E! s9 B& C
create table student(7 G; D! z6 B' K& p5 G
id number(3),
, B, V8 b: U6 X: fname char(20) not null,
% B3 `9 }3 T. d5 ~majorid number(2));
) n  {+ N) Y7 [) balter table student
) Z8 S( R' |& g0 U# {$ ?' T( j  add constraint stu_id_pk primary key(id);2 I  T7 `/ Y0 |3 k4 K
alter table student
. u( O( m6 R, ^# F2 y( j, Z  add constraint stu_mid_fk foreign key(majorid)  @1 T# D2 y1 ?2 u/ E  X! o
  references major(id);
8 T5 E% \( N% @; w  U/ t* c7 M/ R6 V1 T* z
-----------脚本文件begin---------
! @4 `; e$ j( y7 j2 g; Z- V) ^# Q2 P$ qalter table student drop constraint stu_mid_fk;6 Z/ D9 u! E# S% D; q7 }
drop table student;' p$ R9 Z- n# V0 i, p
drop table major;4 i0 T; O# n' S& i2 O/ ^
create table major(....);/ f) J6 ?, J4 O9 M
create table student(....);, ]9 ~1 A/ f; B
alter table student add constraint ....
9 d' B, Z6 |$ t+ ^) b$ `-----------脚本文件end------------
" R8 u# w2 e+ Z- ]' d* X
) F1 w2 L% K& d: J( h( yuser_tables  :用户所有的数据表* s4 `- `# @+ U8 j1 P  }6 d
user_constraints:用户所有的约束条件: y6 l! k3 n+ q$ |2 B
user_objects :用户所有的对象(表、视图、索引...)
% r9 q2 j% m. x5 Y+ t( z3 U) e7 e/ E* U" O
all_tables  :用户能访问的数据表,0 l! Z4 S( P5 Q* v
             包括自己的和别的用户允许自己访问的% a1 r' b1 Z+ f8 v
all_constraints:用户能访问的约束条件
* f, r1 f) q- |all_objects :用户能访问的对象(表、视图、索引...)% l- C) Y5 L0 N( ~
  K" ]+ Y, T* ?# }# V: G
PK / FK
( P: L5 i1 A8 }+ r6 [. wNOT NULL / UNIQUE' N- N+ g! x: v, D& [
CHECK0 W# a; W& R5 k) t
其中:CHECK和NOT NULL可以在程序级别控制
8 i6 d3 M5 A) J5 G( i% Z
& j. E. R* e( Y- H2 i  K" @+ U二、数据库的其他对象
( }; s/ s% n6 `4 m+ W9 X表 Table2 @& K* K0 w0 H* E9 {" k" A8 x4 n
视图 View
# C7 w9 [+ c/ ?/ x) O0 Q索引 Index
* ^& U5 b2 T& n+ H2 L序列 Sequence
$ H- ~6 |% _( q1 U$ f# S过程 Procedure
& L  z4 F0 L2 X! P# ^0 C6 P函数 Function* M% n( b# ^9 i$ e. [
包 Package, ?4 q! V2 ~5 X
触发器 Trigger
" C3 n  P$ `, ^% e0 t" ]1 o* l同义词 Synonym3 O% q6 p* E3 |1 e. P
....
9 e$ Z$ d( w) z4 k1 e" L% M  _
( q1 l  T! S2 y: j/ ~3 m1.视图View
& J1 W/ T) m( J9 `  g. j; ~# O7 K0 Dcreate view v_emp_ning
6 z7 |$ a- d* E. Xas' D9 `" k" I9 q! l* N% n, L$ S
select empno, ename, job from emp_ning
# l* Z* }. ]" Rwhere deptno = 20;
' C( E7 P6 f+ \8 {--使用和表相同' u3 ?, N0 s2 t7 a' Y
desc v_emp_ning, K' H1 e! I! T$ v
select * from v_emp_ning;
$ Q8 n$ |' Y, @; y- I--视图的好处:简化查询;隐藏数据表的列$ u" {6 G. A# \( p0 m
3 K, k/ W, ~( M
create view v_emp_count
7 R; C6 o& o* r) k- ]/ a( U( X% [as5 e% x" c/ m) J  U
select deptno, count(*) emp_num
! Y5 D, ~, P" o, }3 Pfrom emp_ning
: [) v9 L7 L6 m/ jgroup by deptno;
- \$ V1 B1 e' k4 d0 G--修改基表数据5 F  C. [$ ]/ u
update emp_ning set deptno = 10
* P* v0 ?) K* O* J0 _) k3 B# Z9 X where deptno is null;
; g- x1 x; w7 O--视图查询到的是修改后的数据。
/ b% ?9 a$ |  z5 t' u* V4 ~0 S--视图不包含任何数据。是基表数据的投影。  E) Y, x& K' d3 N+ b* s
select * from v_emp_count;
" ]7 @# E1 Q2 u9 B  y
) `8 h1 o$ H; u) B0 P6 m--创建或修改视图! f1 i- E, z9 i' Z: J1 _' B
create or replace view v_emp_count
  K# E! O% {/ n1 V* Xas( q' h  V, u' I" k. ?2 _; l
select deptno, count(*) emp_num,
3 b' ^: |& _* T2 X! j9 Bsum(salary) sum_s,
7 I# X' ]2 R8 D" _2 q1 iavg(nvl(salary,0)) avg_s,* X% g) Z" g1 k' a( S
max(salary) max_s,
9 I2 ^8 k7 \% M1 @min(salary) min_s
- p& ]# {0 U' Y/ Ufrom emp_ning5 s' D& k- B8 P- g. a. k1 @( d7 w- ]7 R
group by deptno;* N- h8 p0 `( V% @8 h6 H
0 P8 R$ G. d; C$ Y; R8 O) i* k
--查询视图的定义
( N9 l9 l! N& L; _/ qselect text from user_views% v/ [: l6 E2 E% ~9 V
where view_name = 'V_EMP_COUNT';
1 x' {8 u7 \/ }6 ?8 v--如果视图对应的sql语句显示不全9 v4 V8 P! y# x. L1 o% k
set long 1000
4 x% S9 u/ c' w
4 w  E( E2 s+ l* T/ ~. s2.索引 Index :用来提高查询效率的机制。
+ T7 g( t! X( f1 T+ y0 R全表扫描: Full Table Scan: 查询效率极低
' U+ N) [+ S7 R8 z索引查询:比全表扫描快。
- v: U4 s) B# G9 ~# W
- Y/ f7 w6 N2 Q) D5 |: B索引的结构:数据 + 地址1 i+ i1 H/ _/ s0 w6 Z9 ]* z" U9 i- w
            张三 + Room203/ z6 f, E- g; m% l4 s. h$ i& x: }
2 l- ]; F8 |0 B0 o- V2 Y+ P
对于数据变更频繁(DML操作频繁)的表,
7 A, _) U# ~) l& O索引会影响性能。/ h% v; d4 N& b/ t; I  t8 r& w6 {

- H0 T( l; ]  W  n# p如果数据表有PK/Unique两种约束,索引自动创建
. ]1 F8 S0 Y+ ~7 D6 e, U7 R* Y除此以外,索引必须手动创建。! o6 {5 I- q7 G  c& g. H
create table student_ning7(
5 _( b+ X: M& K8 c0 ~  A$ t( Sid number(4),  }6 u0 X# {, N3 V2 [: Z
name char(20),
8 L% Z, e+ q- E4 O% Wemail char(40),0 |2 m$ ^' f; R" k4 E
constraint stu_n7_id_pk primary key(id),; f' J7 @6 ]+ n$ a
constraint stu_n7_email_uk unique(email)0 d9 r! X. Z# A, F
);- C, X$ i6 q5 u# \" Z7 v
select constraint_name . J# f# C+ `& J0 @. f. A* M+ l2 M
from user_constraints
2 Y  X* Y& h. E# i- K0 Rwhere table_name = 'STUDENT_NING7';# K1 w7 v2 K  X! g; z( I- V

( Z' R* e5 F' e2 p, H--查询student_ning7表上的索引,
  W/ Y1 g8 E+ I- h$ f  G和主键/唯一约束条件同名,数据库自动创建的索引。4 N" n+ i9 [& j. k$ _4 S
select index_name from user_indexes) \) w$ ^$ N1 Y( ~+ W& G" Y
where table_name = 'STUDENT_NING7';3 P. p: M  F$ D8 c0 ~8 g

6 N6 Z: n$ G/ b--凡是id或email上的查询,会使用索引  Q! X6 x! n- c
select * from student_ning7
" F* r2 E5 s, |+ Hwhere id = 1001;
5 A% R( e# w1 V5 L" V: P) b7 |# |# X" V3 M" x9 O
--这种查询用不到索引:全表扫描# V, m  c' i# D6 {' R  w# |3 l
select * from student_ning76 \9 ?& g" A' v% m8 A/ i; ~
where name = 'zhangsan';
/ e  f7 X: _' |+ S3 c
; n: s" r% f( B# H/ {8 E' ~1 i--创建基于名字字段的索引,索引名自定义4 U1 i0 ^9 [* T' O9 R+ K; r
create index 索引名 on 表名(列名);& {2 R. I7 f/ P' r
create index idx_stu7_name
( s# p" K: i9 I$ q) J8 @* qon student_ning7(name);
. K1 t! z) R, R% I. b
4 g$ F: u$ v) Y+ W  ]7 o+ P6 ^( m索引:) d- ~0 {4 X2 Z8 D9 J
1)了解索引的工作原理
/ C7 z4 @. x6 U! [6 a4 C2)pk/uk自动创建索引
/ \- a: V0 r1 r" {3)根据查询情况决定手动创建哪些索引。
. X* L. f) m0 M. s0 |, d  i- @" X5 Y* ^

, V; H, l' Y* u3、序列 Sequence --Oracle独有的& J* Z: `/ d, @7 g
--产生从1开始的数字值,步进是1
3 a* Z, G$ P4 Q8 Z1 Xcreate sequence myseq_ning;+ r2 s$ F2 j4 M6 i
select myseq_ning.nextval from dual;4 W  t# i5 i- s" x6 |
6 ^: n8 r: e! ^8 K
序列的特性:产生连续的不同的数字值( H: L( k, e' t9 V/ _
用来作为数据表的主键。' B" C1 D/ M3 V# f/ s

4 \/ s& }6 O2 j9 n--使用序列产生的值作为表的主键值0 y5 x0 _! c9 k7 H: ?8 B
insert into student_ning7(id,name)' R7 \! P9 e& i1 g2 X! m. `) j) F
values(myseq_ning.nextval, 'amy');
  O! l3 H  Q6 e* ~. p7 S4 s$ o% P+ g: [- q! \
student_ning7和序列myseq_ning的关系:
2 c/ v* @# K! v2 Q) w. _4 }是数据库中的独立对象
4 i  [& i7 d" g& T& G--表可以用序列产生的值作为主键,也可以不用8 r: S  h  _. r7 b
--序列可以为一个或多个表产生主键,也可以不用
) ^5 h6 {2 {, ?. W7 W. x: t  h: uinsert into student_ning7(id,name): ]: J, @0 ^$ |! ^: }: C! a
values(100,'river');  {( v3 Y0 e% v6 t1 w
insert into dept_ning4 o- W/ v+ _& Q) I% D
values(myseq_ning.nextval,'market','bj');
7 K/ N! E6 V3 e' Y7 E: S5 t4 y8 C" b9 k0 `* G( X9 S( U& t5 R
--建议:一个序列为一个表产生主键+ W- _/ \0 e: ]+ i7 _; @, O7 B6 Y
/ x4 c) r# s" A4 A
希望主键值从1000开始,步进是2?
' m9 \6 L3 U, Wcreate sequence myseq_ning15 X: H+ K* N8 q0 R2 g! q, C. R
start with 1000
! |: c7 _% z% p" d0 Mincrement by 2;. ?5 _5 P0 N2 b# B
7 R7 C2 U% D- _+ A9 J, d
insert into student_ning78 ~5 T; ?3 ^+ Z
values(myseq_ning1.nextval, 'song', null);+ `1 h' c. p" o$ p6 ?) [

" b/ e5 @  E. U+ }--删除序列,对曾经产生过的数据没有任何影响。: N. H; H) q( g* F8 N" r+ a
drop sequence myseq_ning1;8 m5 [5 Q7 w2 c/ j$ Z' X# K
9 Y! k! O* A; P' T5 g9 f
SQL> edit! a& N$ Y9 Y# ^+ m4 u9 g
, g' s5 f) k9 O

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


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

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

   

关闭

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

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