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