我的日常

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

动态微博

查看: 1552|回复: 0

Oracle增删查改 day05

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-03 21:43:49 |只看该作者 |倒序浏览
复习:SQL语句
, v! u9 p8 J1 Kselect
5 G* W# G- b2 H! ?' VDML: insert / update / delete
: V5 e- A2 _. P% F/ X- }9 @6 q# l  P3 W
CRUD
5 R/ L, {- F  `/ f3 hC:Create
( d6 a7 ?: ~  s2 c, O9 ?, |& JR: Retrive
6 X( \8 R/ [4 R8 q% U5 M. M0 zU: Update
* X/ Q* i& \9 G1 AD: Delete
$ F7 D2 i8 L) E7 t' Y7 s3 K
, j$ x& r; B1 E* w% h% l- SDDL: create / drop / truncate / alter1 A8 m4 Z  J: g8 I7 D+ ]0 r
+ C; \& J- Y4 `3 ]
TCL: commit / rollback / savepoint2 Z$ B2 |4 Y, f* \- F

4 H* q. y3 H5 k7 w7 e) M& |DCL: grant / revoke' P( Y, a2 {' U
, K. k  \7 O( L& ?
grant: 赋予权限& f6 Q& }+ w6 a; P+ a$ s
revoke: 剥夺权限
8 j5 v! a, g! W数据库中的用户: openlab   hr    scott. c( h! v4 P# L* j; Z' O
                 emp  w  E% w+ J2 ~
6 F3 f' z2 G5 N7 Z( U* @& X
假设现在的用户是openlab( ?5 y; f: s5 A8 \- l; k+ E
SQL>grant select on emp to scott;$ B$ ?. H) A2 c9 X  ?  R
SQL>revoke select on emp from scott;
# F1 H: R5 G3 z' ]
% W/ M+ [' L3 lscott的会话:' ]' ?# C9 ]5 J+ C. a) z, o
SQL>select * from openlab.emp;4 Q. m  J( f, P# p; O
SQL>select * from emp;+ B' g+ [& {9 X/ O: s

6 ~- R2 ]7 i: D
1 t8 Z1 W+ a6 q, W4 e# nOracle数据库的用户:
2 B# \7 [- _/ H1 A) i3 a2 ]" g% l! ^sys
" ~( ?! C- v' D0 V$ xsystem
' z/ q( V( ~3 E2 H1 T7 y9 D' |/ ?; t& E
scott/tiger
& y: x. n) S7 j" d+ sopenlab/open123
+ g5 ]4 b/ [, b8 Uninglj/******6 O( z) |" w8 \, q( y0 i! t* P1 T3 Y
exam/exam123: ]' M+ H: m8 G( F3 r) ?1 }
9 l: e$ c3 b/ @( w
C:>sqlplus scott/tiger@192.168.0.26:1521/tarena1 H7 `4 [4 f5 g
SQL>0 [4 v6 q2 v) z9 `  |
) H6 E2 C& g. T, S: N, `' k& T1 l

/ q( D' B8 ^( g今天的内容:* Q) b/ ~/ x. U3 T1 {
1、约束条件
0 k  L/ h/ q- `4 u# f* |2、数据库的其他对象! V' W! c' k3 N/ o
- |4 o% G1 w0 k5 P6 N
一、约束条件 Constraint/ v+ d& D- j, ^; S4 g5 l
1。主键约束:Primary key, 简称PK  b4 ^0 Q: c7 b, c$ j% x0 `- z7 a
--建表时增加主键约束条件9 n% l( X! r; Z$ |$ e! H
create table dept_ning1(
! C! K. Z$ I6 H( g- H  odeptno number(2) primary key, --列级约束条件
: [: ]; z6 x. S! ]1 |; kdname varchar2(20),1 ?  Z1 a7 i. X3 R& a
location varchar2(40)
3 `$ R+ p4 K* n" D1 `* P, ^);. l! ]# s( z9 m( L5 w& p; K
insert into dept_ning1 ( U4 w/ |; f4 R8 C3 b
values(10,'developer','beijing');: t" z) Q7 G- A4 }
insert into dept_ning1 7 p0 X% K+ ~; {5 W
values(10,'market','shenzhen');# ~) V1 N; j4 q
--如果插入重复编码,会提示:
' h0 i( O' p- f: I) Y8 ?ORA-00001: unique constraint (NINGLJ.SYS_C00634053) violated: K* C$ w$ v) z/ X/ a, O" U
其中,SYS_C00634053是数据库自定义的主键名
' ^# q4 j% y7 G% v4 x) I--约束条件如果没有显式命名,
1 f! F$ X% R' j' p数据库给约束条件命名:SYS_C*****
0 ]' b5 c! X% t5 g: }: J& ?  M1 |% f
--在建表时自定义约束条件名3 y( k' S: Q3 ~+ q0 `& f0 T6 j
--建议命名规则:表名_列名_约束条件的类型% ^8 `6 L( u7 V8 r
create table dept_ning2(
/ ^. T4 \  E# t3 J/ ], M3 g$ V% gdeptno number(2),
/ A0 Y+ D: ~: y& b( rdname varchar2(20),
7 d4 |) v/ T3 Z2 J8 _1 elocation varchar2(40),3 x( T  o2 F5 w1 h% i+ q: F0 {
constraint dept_ning2_deptno_pk
7 `0 E% z/ x: K& ?2 ^  ?primary key (deptno) --表级约束条件
0 J2 p# T2 Q' J" `8 p( }. [);: S  c, L; ]. u$ M& d
--当插入重复编码时,会提示具体的约束条件名字错误。7 ~) P# ]& g. f& \9 S! }1 ~% @( F
--方便定位出错的原因: Z2 n2 w7 d7 q
; S; \7 `* v  _6 g0 ~$ e
主键约束:primary key = 不能重复 + 不能为空
' ?  i# B" T- s0 O. m: W
$ |. j& Z" y& c" |+ u% W2、非空约束: not null,简称NN
( y+ }3 F$ U2 `. B4 G学生姓名必须提供,但是可以重复) Z: h: C. D% i" D- h
--只能定义在列级3 I" O7 T- j9 x4 W; l4 q: U& }+ e" e4 v  p
create table student_ning(7 G+ D" t" ^4 k7 f* q( W
id number(4) primary key,/ j. u* T- b: e' ~' F: t  g: M* f
name varchar2(10) not null,3 q9 U% I, b# i% Z4 u1 u! r
age number(2)* r! j" G* Y2 x4 R/ `
);* e8 d6 P) r# p; V6 e
insert into student_ning
0 u- M+ [. t2 n# n; s- O; \7 pvalues(1, 'zhangwei', 20);: V4 @" u4 m$ R! U" v7 f. U3 Y+ D
--名字可以重复. N+ z* C. y" X  G# F* J
insert into student_ning
6 k7 d* D- T/ t! s" [5 D/ r' \+ j' M0 @values(2, 'zhangwei', 19);7 t5 ?8 I; Q2 K
--提示name列不能为NULL% h( T  p& d) D7 }0 U/ V
insert into student_ning 9 ]: U: P& M& f7 ~
values(3, null, 18);
3 Y7 m4 q7 |/ E7 u7 _* z
, ?( J8 b) |+ j, Z( @7 K& j3、唯一约束:Unique,简称UK
  X( g$ r! T) R6 O, r" Pcreate table student_ning1(
* s2 V$ q1 b6 f. S5 x, Wid number(4) primary key,
6 b+ a. B8 C" W* |: s2 H4 a$ Z- pname varchar2(10) not null,3 F9 {, K, K: O! l% }
email varchar2(30) unique," I  z+ v8 c( A6 c$ S
age number(2)
1 R* I8 w" w6 ~9 J7 U! e);/ I/ k+ e2 t3 O
insert into student_ning1 9 n1 F& O! Q1 `( e$ M
values(1,'amy','amy@doctor.com', 19);
1 P* \& M4 E8 r--ORA-00001: 唯一约束条件被违反
& p. s3 ?) n8 E6 f; t4 |* Ninsert into student_ning1
6 X# z- b0 T2 x+ J8 }  z5 _' H: Hvalues(2,'rory','amy@doctor.com', 19);+ K$ T+ J( I1 i# d& H/ N) k- p
) }# M* o% b. g" L" r  f9 B! e
--唯一约束建立在表级
& K2 ~: @1 G' z9 f5 r4 J; ]9 q* `--主键约束建立在表级7 d3 v6 U8 c/ \- Z( v& V9 a
create table student_ning2(
1 @/ F. Z. J" {id number(4),
# y" l. a% a6 K" P& {* {4 }name varchar2(10) not null,
3 c4 j3 A! C. p  W: n3 O; Gemail varchar2(30),2 R3 b" }! X% z1 K2 T1 Y  r7 F
age number(2),
  {1 A4 R  k/ m& K) E, W( `& S, aconstraint student_ning2_id_pk
8 U8 h9 Q: \' ?7 W+ T9 S$ uprimary key (id),# Q) v; r" O3 w  X5 P3 r) C
constraint student_ning2_email_uk
; A/ c% f# t8 tunique (email)
; d1 [/ D; Q7 |2 I" K7 o  U( l);( R6 h8 b* t6 n! D  M

2 C" F/ Z4 s  T- k8 X, Binsert into student_ning2, k/ K$ u- a/ ^4 g! @9 C6 F% E( p% C
values(1,'amy','amy@doctor.com',19);
* h  L5 L2 Q1 d& ^6 Z% e% e- d+ B2 R0 v7 I# G, i. A3 ?  A
--unique约束只要求不能重复,可以为NULL1 R1 @9 E' R  Q
insert into student_ning2
% ?0 h; K/ d( L/ Nvalues(2, 'rory', null, 20);
6 K/ p) k5 i% m: k* A5 @$ V+ M( x0 W; R# Y$ c
--不管是insert还是update,email都不能重复。6 b& r& }' W( [5 o% c4 s2 {; `) G
update student_ning2 set email = 'amy@doctor.com'1 _% ?9 y8 z% j" O' ]! x
where id = 2;
7 O1 g: f) B6 D" S) m- N9 z
% k3 O# f2 c5 q5 P+ K4、检查约束 check 简称 CK
5 G: _) C  g/ `" |1 V* _7 E% gcreate table student_ning3(* Y! I# H0 p& f; S. `4 ~
id number(4),* H: {" t$ c$ ?8 {4 A# K* f
name varchar2(10) not null,
7 j  B: E0 J8 h1 s2 lemail varchar2(30),
" I4 @$ E: M3 Z/ f) T& C6 w) Eage number(2),
' T% k4 P0 p6 g: |/ g# pgender char(1), --'F':女生; 'M':男生
/ P( G$ ]6 f: D; c: {constraint student_ning3_id_pk
9 \. r* \! \& }; E# V$ Rprimary key (id),
. j0 k0 }& d$ D4 o, _+ c* T7 W1 _, Gconstraint student_ning3_email_uk" H1 a: @  l5 \; b5 _
unique (email),* v4 k+ j# j. V- R8 c& Z) b
constraint student_ning3_age_ck. F" O/ I3 E3 M1 }; R/ i" P
check (age > 10),/ j# {3 s8 `# \9 q0 h* `
constraint student_ning3_gender_ck$ H, k) ^! M6 C! k# @  G
check (gender in ('F', 'M', 'f', 'm'))7 T" J' z+ @/ ]. s0 u7 p: F
);. `! w' o7 F  g; l3 A  ^
insert into student_ning3; _2 z. p5 [# r# x  c. a* m
values(1,'amy',null,19,'F');
  \/ y' @$ g7 X6 cinsert into student_ning3
9 ]/ `% l: G) Qvalues(2,'rory',null,8,'M'); --违反check约束 age > 10
1 s1 h! u0 a, j! w# o* Dinsert into student_ning3
4 S, g$ K9 t. m5 Nvalues(3,'doctor',null,50,'A'); --违反check约束 gender in ('F','M')4 L4 K+ L* U2 H" ^7 L# R
/ ]7 d8 U! n6 j9 O, a, J) Z3 g
PK / NN / UK / CK / FK: Q3 E: L9 c9 l+ a1 ?9 Z

5 f1 q% c4 V) G7 V5.外键. Foreign key, 简称FK
7 L) N6 r  D2 Q+ Q  Xcreate table major_ning (
0 p& v8 ^% M) n7 p: [id number(2) primary key, * Y8 a: X' f( I) \- S" g5 \
name char(20)+ x# ~" h$ u- n- f" O$ h  u
);! S: N6 _- N  Y) E9 t6 D& H6 O2 P
insert into major_ning values(1, 'computer');4 i3 U* S& p0 L( i
insert into major_ning values(2, 'history');
) D) `8 `+ K3 \: U& T0 k" xinsert into major_ning values(3, 'music');
) _3 q" J6 j! ?. s) N6 w2 D: dinsert into major_ning values(4, 'sing');
; K; j( G$ N$ q, [0 o; o) `* fcommit;
% e, I# K6 x- r8 C' L; [create table student_ning4(# F/ B/ n1 S1 \. [! j4 a/ w
sid number(3),
5 [2 M7 z; g9 o) L  N' Cname varchar2(20) not null," P$ K5 a, F5 Y* r$ f; y/ T
email varchar2(30)," N- i2 u( L, g7 s
gender char(1),
0 T" _3 `5 i: J& _1 _0 mmajorid number(2),* D. s' `8 v7 i0 @* @) {6 g
constraint stu_n4_sid_pk primary key(sid),
$ o6 e* {7 `% `- }3 Hconstraint stu_n4_email_uk unique (email),
8 |0 k, v) S8 a0 c3 a( vconstraint stu_n4_g_ck check (gender in ('F','M')),( V' {3 @9 c  Y/ x4 P/ L; U
constraint stu_n4_mid_fk foreign key
! \$ J- ?9 u$ u$ `% S  (majorid) references major_ning(id); F) P, H% f& B3 r2 f/ _7 [
);
6 V  |" J3 f- e
1 I' Y. W# B' X' P/ b# ^! ]insert into student_ning4
# m1 C5 E5 m5 @- _# K. Bvalues(101,'amy',null,'F',1);
- M& [3 I7 Y# z, f$ t8 V+ Z2 b: J--新增数据,不存在9这个专业
" @7 {5 i/ P/ f( c/ Y% Q9 n7 Winsert into student_ning4/ X: @% k0 q% t- t. e
values(102,'river',. K6 O( t  ?( |3 Q! ^9 ?2 Q# J
'river@sina.com','F', 9);
6 b* }7 d& ?, S  B) H3 C& g# Z--提示错误:7 ?# _  @( E' Y0 \8 V) r
ORA-02291: integrity constraint (NINGLJ.STU_N4_MID_FK); U2 t4 j; D  [, J. \% o
violated - parent key not found
. I3 E8 H7 S/ e5 `0 Q! N& cinsert into student_ning4; M, ^2 r5 G* @8 v+ C  @% [
values(102,'river',- X. E' \" G. a( \* N! _3 ^/ @
'river@sina.com','F', null);! Q. ?2 {" h8 i5 |

/ {2 g: M4 y& y0 D: G--有学生属于专业1(computer)
1 P$ {4 r7 D# a' r' Z4 q+ }) Kdelete from major_ning where id = 1;
% m6 H3 h7 d$ o$ c, }- z, m# M, l--ORA-02292: child record found( L( ~  N1 ^4 i% q: l# h* H7 b
0 @/ @/ [6 F$ R5 c
create table student_ning5(
$ t; q; q. A6 k9 f# x: B% N$ ssid number(3),! K0 V4 o  d. D# `3 W
name varchar2(20) not null,* x. i$ x! W5 J% ]3 ]! ^1 f
email varchar2(30),1 K5 }1 B. F8 N) }  w/ s
gender char(1),
; M3 ~# E/ j$ m. M! ~majorid number(2)," f0 i% [, J) e3 m5 p8 @3 Y' x
constraint stu_n5_sid_pk primary key(sid),9 ^! [  I- R, `. L& R7 Z
constraint stu_n5_email_uk unique (email),
1 M9 P! `! O. pconstraint stu_n5_g_ck check (gender in ('F','M')),, P' v6 x. s% z1 V" ]
constraint stu_n5_mid_fk foreign key
6 |1 l* t- [/ v4 }; A  (majorid) references major_ning(id)
$ u# u3 z4 ?$ a/ `' o% G( F  on delete set null);
0 n7 @6 Z3 R8 F! s. F" H- F
6 H3 D' Z: U* v9 n" T/ M. {insert into student_ning5. z: E9 |6 J% G- k. R$ f- c
values(101,'amy',null,'F',4); --amy是4专业的学生% s+ [& p5 d8 l6 ]* @$ B, |; K" ]4 ^
--删除编码为4的专业9 ?8 c5 H* N, Z9 Z4 p7 f2 P8 v
delete from major_ning where id = 4;9 v* L- ?$ T. a8 d! K3 Z, i
--amy的专业被设置为NULL
- `/ V1 v4 N& Vselect * from student_ning5;
! }7 u) L; e/ C$ C3 E' N3 J) Y% H! L5 E/ e
create table student_ning6(
5 B, p# f0 R3 A3 C, t: \% ysid number(3),
* d1 q; ?3 ^2 C5 ~% V5 j( k7 yname varchar2(20) not null,
4 c- V. t2 m' n6 N- c. L  e# p& kemail varchar2(30),5 ?8 T4 V0 V0 K% P# d0 G% f+ m
gender char(1),
  V+ f$ `% M3 ?# F( pmajorid number(2),
: |- [5 h8 K" `, P3 T1 Econstraint stu_n6_sid_pk primary key(sid),
( E* n" o, B* J- a: T3 wconstraint stu_n6_email_uk unique (email),
" n8 d4 r$ I, {: `3 q. Zconstraint stu_n6_g_ck check (gender in ('F','M')),
9 \8 Q. s) Q) S7 @0 X5 y& \$ Nconstraint stu_n6_mid_fk foreign key
( I. `! m) ]' P6 ]3 `5 c  (majorid) references major_ning(id)
0 B5 Q% N1 D% k5 B2 O- ], s0 W3 Z5 L  on delete cascade);. J" \6 Q$ E# `( B! j- ?

8 _2 \4 G3 g4 e0 O--复制表,不复制约束条件。
; M6 }6 G& x& i/ L9 T# S& Dcreate table 表名 as 查询语句
7 @' w! [  H9 J7 a7 A! L/ z3 c# z( b8 d/ g9 Y1 E5 t% m+ A; [; x
--建立约束条件的时机
/ {( e; r+ x- x: u' F2 A. J$ ~7 k$ J--建表同时建立约束条件:8 r7 Q3 [  ?" @
create table student(
: C) Q1 Y' N4 H. _9 f/ A( Sid number(3),! B$ s% ]( ]7 G8 I" Y
name char(20) not null,
5 z. e1 w; a5 Hmajorid number(2),
& \" _9 e" m+ s6 a5 }constraint stu_id_pk primary key(id),
  g; S$ f: d9 ]/ oconstraint stu_mid_fk foreign key(majorid)
8 H1 S2 u: U( o; c- N   references major(id)$ X4 D) N# A9 @$ Q
);8 O' k; L7 W( [4 z5 T
--在创建完表以后创建约束  b' P. {7 Q6 R& `8 }: ?
create table student(
7 ?% @. s: S" g% Did number(3),
) w/ _4 p0 }: ^7 {, Q% mname char(20) not null,
2 o1 q, N, S/ z& _2 t7 ]( I* Rmajorid number(2));
' d# L& @" S+ zalter table student, Z* U+ z+ ~5 e+ j% Q
  add constraint stu_id_pk primary key(id);) D. t: B% P6 f8 d
alter table student
0 t# |, ?" F/ x% v' D  add constraint stu_mid_fk foreign key(majorid)
, ]- E: q3 W4 c  references major(id);
! C) F5 u' x# {! \3 J" @
3 M" j; n  w0 O8 X-----------脚本文件begin---------
8 X) p6 L, E+ a2 O+ F+ E4 Lalter table student drop constraint stu_mid_fk;
5 f/ X& S& f8 n9 I) P! o: G5 Fdrop table student;
' v9 L. H  a- ~* s' c% P1 Q# ]drop table major;6 f  j1 _" M0 d  n: a' O" J
create table major(....);
  s. I) k1 E- y; O( W7 P3 K! \create table student(....);
' ?& t$ }& W& p' u7 nalter table student add constraint ....
7 t/ u: b9 C. b-----------脚本文件end------------
3 R# s" |: w+ Q
: O: H  }8 X- c6 yuser_tables  :用户所有的数据表: P2 ~6 K  K. h# `+ c) `( u; g$ Y
user_constraints:用户所有的约束条件9 }5 U; g6 b- b+ r6 m
user_objects :用户所有的对象(表、视图、索引...)
* r* R+ [8 Q: @6 {0 o4 Y+ z; \( x/ m; ^+ v& t. q' |  q3 ]
all_tables  :用户能访问的数据表,
4 F5 k, Z. K' w0 I) y             包括自己的和别的用户允许自己访问的
2 v; p( r, ?0 {+ J' lall_constraints:用户能访问的约束条件
5 G8 e8 [, G( y& @5 w0 S; Y/ Aall_objects :用户能访问的对象(表、视图、索引...)
" g9 `+ }; f4 O. I2 R% k6 C( p$ z% \! o* S; }! t9 E+ i" t) G
PK / FK0 C+ y: T- g8 t& F
NOT NULL / UNIQUE
! l% U; D# y6 y2 y4 H  |5 Y% ~) \+ cCHECK* y, }3 P2 o: B4 W5 Q) A- {
其中:CHECK和NOT NULL可以在程序级别控制7 x. F, u9 ?8 q' D$ A6 d
* b+ J5 `" {2 u; ]2 c
二、数据库的其他对象
# \8 Z$ Z8 F* V" L7 [2 J& K表 Table9 e. t6 S1 Q$ U) M* t9 N
视图 View+ T8 r3 f* ^# L6 C" i# d
索引 Index) d9 ?7 B% k* q
序列 Sequence
7 K& W! W  |( G" m2 G( V9 Y) i* X过程 Procedure
4 K& _9 ^1 k( C( \函数 Function
6 ^3 L/ M* A& }+ r) u* E4 R包 Package
3 J) }) X: J; E0 Z/ I- U$ b触发器 Trigger) ?. a" s+ P( H$ m8 F/ f6 f1 \
同义词 Synonym
6 g% t7 t. ?0 R  P....  f  l' V+ C- X9 @2 C  J" E# s
  _3 o$ s/ O: Q. B
1.视图View% T! r8 }: U7 z4 J5 f& P6 W
create view v_emp_ning' g# T5 i2 O1 |  |; l
as& [2 G0 s* V  R. B" x1 I
select empno, ename, job from emp_ning( ?8 A% b% R+ b! {, F( W# J
where deptno = 20;
0 P) s; M% D) E9 k$ g--使用和表相同
2 ?0 S# N! G  T4 P* O$ I" kdesc v_emp_ning
* Y- w& T1 o8 ?) G3 U1 jselect * from v_emp_ning;
  ^) N3 _' R+ `5 B6 d--视图的好处:简化查询;隐藏数据表的列5 X) ~) p- E* ^& f* {: C/ s5 o, N/ k

; k0 }0 N; {/ s' a5 icreate view v_emp_count
# L8 a# O, ~; c% q' q- c$ X* _as
2 z2 _. H! l4 z" @/ a% ?4 kselect deptno, count(*) emp_num5 V  f: r, |* F$ I1 W8 i# N5 f( X
from emp_ning, t: S% o8 A. l9 d9 o# l( @
group by deptno;+ u. p: J$ T, |; Q: `
--修改基表数据, Z/ S9 H, p. D+ D
update emp_ning set deptno = 10
5 R4 g" A" @  f" b! } where deptno is null;' t5 Z$ e2 l. J9 F2 t9 {  `
--视图查询到的是修改后的数据。
0 v% f9 n; C0 A8 c--视图不包含任何数据。是基表数据的投影。- ^9 v' n* [! t4 ~- M
select * from v_emp_count;
. x2 j6 u; F6 l7 N  @
  w1 h# W* C; U& B% h. @* ?--创建或修改视图, @; |4 H' |. I3 n' s: d
create or replace view v_emp_count
5 {5 c9 q9 d% e; Tas
' t2 l' s3 {+ S+ {# F0 l) xselect deptno, count(*) emp_num,: M! k3 m1 s: \+ g. d1 X3 @2 m' d
sum(salary) sum_s,* J% w! T; Z. s$ V- [$ m2 M
avg(nvl(salary,0)) avg_s,
' c, D- d/ }% c' ^max(salary) max_s,9 I* H# `  O* a* i$ A3 w' Q
min(salary) min_s
4 G/ A) E  [" w) A8 ?from emp_ning
" X1 d" e/ W; B2 d4 Kgroup by deptno;
3 Z! \2 Y9 y* E5 r
  c# p7 g* a9 Z' O" b0 l3 N--查询视图的定义
. U( c, l7 F, h9 P6 l) ?select text from user_views  w" T- n; q! G: U3 Y! t, X
where view_name = 'V_EMP_COUNT';
0 t- G; ]3 n' Y--如果视图对应的sql语句显示不全% q1 u, r% x3 e) v$ A4 k
set long 1000
6 m$ v$ \! h& T1 Q( }, _5 B# E: P) M! ~* D
2.索引 Index :用来提高查询效率的机制。
. d+ e- Y" m. @: y$ X" y全表扫描: Full Table Scan: 查询效率极低/ |: }8 c$ i) E; D. T4 F
索引查询:比全表扫描快。+ q! l! K- \% E

" V7 ]- E0 |- ?7 Q索引的结构:数据 + 地址
, T' a0 K& G- D/ i7 B0 n9 w            张三 + Room203! @1 \/ X- m+ H5 [

2 f  C5 O4 P( V对于数据变更频繁(DML操作频繁)的表,
+ z* X; z, k% ^* n$ W- x索引会影响性能。
7 J& R2 Z4 A5 m8 i9 Z' R
; k# M. Q6 h$ s% k. x* a1 O如果数据表有PK/Unique两种约束,索引自动创建. }) ~9 X+ w0 D" n: I% N; k
除此以外,索引必须手动创建。
# ]/ \3 ]; L! J5 [, kcreate table student_ning7(! x- p% K: j! O! z. ~
id number(4),
+ j8 z/ [) \, k% w( ~8 g6 _! Pname char(20),8 G6 A; O% ~0 A# N9 v6 O
email char(40),
# A- t) E1 N6 Qconstraint stu_n7_id_pk primary key(id),; G: Q6 k5 L  I8 T
constraint stu_n7_email_uk unique(email)
' w) O0 m+ m* |5 G; G" v' q);  p9 |+ k" m# z; W9 g1 t
select constraint_name
; C+ D+ J, M, r' G3 C/ ^0 Bfrom user_constraints& q8 w0 y# T! S
where table_name = 'STUDENT_NING7';% r6 k* d! b% g" {8 @. B9 D

6 l: @! l; m, `) J0 B: b8 \, ~8 V--查询student_ning7表上的索引,, _2 q* [" P+ ]% M8 a" ~1 }
和主键/唯一约束条件同名,数据库自动创建的索引。) x1 K) d* J$ b! }9 G
select index_name from user_indexes
: \" L7 ~: d% p, J. d# c3 I! ~where table_name = 'STUDENT_NING7';
! t; g4 B; {, S; d; ~$ K
6 [8 K% v/ a+ H. B: o9 r( U--凡是id或email上的查询,会使用索引+ i9 E5 h1 N; z  N3 C
select * from student_ning7$ P' t" I) Y2 h5 N  y+ q) M
where id = 1001;4 _! q7 S) i- `# [. ?6 V9 a
) {/ f7 x6 s  Q8 B4 _8 }. z" \
--这种查询用不到索引:全表扫描( v& \  d) Z8 b. c( c$ p, N  h: B
select * from student_ning7
, U6 S; }6 ]7 H$ O3 h7 \where name = 'zhangsan';
6 K; W4 Z7 p1 K! w2 r/ _3 F
2 k7 H/ G( a* g# s1 p; P' M( V5 ]--创建基于名字字段的索引,索引名自定义: d: R2 f4 V& F* X2 n, D( ?
create index 索引名 on 表名(列名);
1 G- V! Z9 Z) f1 f" Tcreate index idx_stu7_name 9 g, w8 K4 T' D" Q; r: k( U+ Z
on student_ning7(name);# e- a. W* ?+ d+ U
: `- R0 r" P* G# g9 ?9 A
索引:- [) _% |+ Q4 `0 [: F
1)了解索引的工作原理! w8 _: P) y" L, J4 g* e: ]# B
2)pk/uk自动创建索引" _' s: t' ^! e4 N# m
3)根据查询情况决定手动创建哪些索引。1 y; x& S' E( w* I, U6 g$ y
1 C2 `6 F) q$ E' O" Y! S
. p$ M0 _2 K7 y: e! }6 S; h! l; R- F
3、序列 Sequence --Oracle独有的: |( @8 w, o- P7 ]0 n
--产生从1开始的数字值,步进是1/ u$ {1 D9 D. J2 C: }
create sequence myseq_ning;2 l4 z4 j: x& H$ Y3 P; S- v5 Y
select myseq_ning.nextval from dual;
/ I. k% @6 o+ C6 z( ?- f8 \2 p
6 {: q' ?& n3 I# k) p3 e# R3 ?% g6 I序列的特性:产生连续的不同的数字值
% m" x* u( j" P# h! b& o用来作为数据表的主键。: S: ?; @5 B  B1 H3 Y, V5 l: h
1 {* r% M* l+ g+ Z
--使用序列产生的值作为表的主键值2 ]+ m+ Q1 u) i; N
insert into student_ning7(id,name)% T7 [2 I) p  b' @% O2 P- Z) M
values(myseq_ning.nextval, 'amy');. `% g: _8 Q0 e0 c0 c) D

# H0 P+ b3 ?7 c9 J! |; A/ f$ o  i0 Q* istudent_ning7和序列myseq_ning的关系:1 e- u' ~0 r  F( I% ?
是数据库中的独立对象
5 ?1 J  t! z6 }9 h--表可以用序列产生的值作为主键,也可以不用
8 M/ B+ t$ V1 t& T/ Z' b--序列可以为一个或多个表产生主键,也可以不用
* g) j' x) c& M* L1 Iinsert into student_ning7(id,name)3 W) p7 D7 n' Q1 ?& r
values(100,'river');
3 O) X3 H' P# f9 j5 n. W1 M0 ^0 ~9 einsert into dept_ning
& z9 E, j9 r' Gvalues(myseq_ning.nextval,'market','bj');# U+ R1 b/ k2 |( X

& x' n" s$ p4 @% o9 c/ `--建议:一个序列为一个表产生主键) ?6 x/ g6 C/ F* Y4 S+ H- K2 L% D* ^
- X" {% s" g' f4 j9 G+ K, ~9 T
希望主键值从1000开始,步进是2?. v* ]7 ]7 l5 v# {1 @
create sequence myseq_ning1
* E' ?) o; N" i0 v) G/ D4 @+ L& M! `start with 1000. s7 x& J$ S/ s/ h" r) U% K
increment by 2;
+ p% ^4 ~( v' c1 F# q
7 _) F/ w: A8 ~8 Oinsert into student_ning7( z  u1 Y: A. I5 h* T$ ?1 ]# m8 I1 ^  {
values(myseq_ning1.nextval, 'song', null);
# D7 v" ?% x. b, e
7 E# E6 B2 Z, z9 d) }--删除序列,对曾经产生过的数据没有任何影响。
2 S8 d1 T" {$ M/ J; Bdrop sequence myseq_ning1;
+ C8 {5 n" P- |- w5 l2 k% i
1 q" t/ j# f3 |9 x; F" Q$ w; dSQL> edit
/ n9 @: Z0 N! W# \' S' D' T! w  P# G; l# d

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


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

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

   

关闭

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

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