sql优化的几种方式第⼆部分:SQL语句⼆维表管理⽂章⽬录
Oracle数据库字段类型参考⽂章:
Oracle的⼆维表管理
Oracle数据库表的字段类型说明
Oracle常⽤的数据类型主要有
数据类型参数描述
char(n)
n=1 to
2000字节
定长字符串,n字节长,如果不指定长度,缺省的话为1个字节长(⼀个汉字是连个字节)
varchar2(n)
n=1 to
4000字节
可变长的字符串,具体定义时指明最⼤长度n
number(m,n)
m=1 to
38 n=-84
to 127
可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是⼩数点之后的位数,如果实际位数超出了位数限制就会被截取多余的位数
date⽆从公元前4712年1⽉1⽇到公元4712年12⽉31⽇的所有合法⽇期
long⽆可变长字符列,最⼤长度限制是2GB,⽤于不需要作字符串搜索的长串数据,如果要进⾏字符搜索就要⽤varchar2类型。
raw(n)n=1 to
2000
可变长⼆进制数据,在具体定义字段的时候必须指明最⼤长度n,Oracle 8i⽤这种格式来保存较⼩的图形⽂件或带格式的⽂本⽂件,如Miceosoft Word⽂档。
blob clob nclob ⽆
三种⼤型对象(LOB),⽤来保存较⼤的图形⽂件或带格式的⽂本⽂件,如Miceosoft Word⽂档,以及⾳频、视频等⾮⽂本⽂件,最⼤长度是4GB。LOB有⼏种类型,取决于你使⽤的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。可以执⾏读取、存储、写⼊等特殊操作。
bfile⽆在数据库外部保存的⼤型⼆进制对象⽂件,最⼤长度是4GB。这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进⾏的。Oracle 8i可以读取、查询BFILE,但是不能写⼊。⼤⼩由操作系统决定
char和varchar2的⽐较
varchar2类型(底层需要做⼀次判断):varchar2(ln) ln表⽰字符最⼤长度实际存储内存长度是根据字符⼤⼩来分配,但是最⼤不能超过ln
char类型(底层不需要判断):char(ln) 不管字符数据⼤⼩是多⼤,直接开辟ln⼤⼩的空间存储数据
总结:varchar2的特点是:动态分配内存空间,节省空间,char的特点是:存储效率⾼于 varchar2,所以⼩型数据可以选择 char,⽐较⼤型的数据建议使⽤ varchar2
Oracle⼆维表的创建
创建⼆维表,下⾯给了⼀个最简单的⽆任何约束的创建数据库表的⽰例
create table student(
sno number(10,2),      -- sno 数值类型只有 number 最多10位⼩数占2位
sname varchar2(100),
sage number(3),
ssex char(4),    -- char varchar2 都代表是string的类型
sfav varchar2(500),
sbirth date
)
在了解了简单数据库表的创建之后,接下来学习数据库表的多种约束,在下⾯列出来的种种约束的创建都是可以通过SQL以及PL/SQL两种⽅式来完成的,⾸先介绍SQL命令⽅式,之后再补充简单的PL/SQL的操作
主键约束
主键:在数据库表中唯⼀⾮空的字段便可以定义为主键,在⼀张表中可以定义为主键的字段是唯⼀的,接下来介绍三种添加主键以及⼀种删除主键的⽅式
1. 直接在创建表的时候添加主键约束,具体如下
create table student(
sno number(10,2) primary key,      -- 注意是添加在逗号前⾯
sname varchar2(100),
sage number(3),
ssex char(4),
sfav varchar2(500),
sqq varchar2(30)                    -- 最后⼀⾏没有逗号
)
2. 在声明数据库表格结构的最后⼀⾏声明主键约束,具体如下
语法: constraints  约束名称  primary key(主键名称)
注意:在这⾥的约束名称当执⾏SQL有问题时会被提⽰出来,⼀般约束名称的命名规则是约束类型的简写(pk,ck,un)_数据表名_字段名
create table student(
sno number(10,2) ,
sname varchar2(100),
sage number(3),
ssex char(4),
sfav varchar2(500),
sqq varchar2(30),                  --注意此时应该加上逗号
constraints pk_student_sno primary key(sno)
)
3. 在创建表之后使⽤ alter table语句给对应表设置约束,具体如下
alter table student add constraints pk_student_sno primary key(sno);
4. 删除主键约束,这⾥同样使⽤ 具体如下
alter table student drop constraints pk_student_sno;
⾮空约束
⾮空约束是指对于数据库表中的特定字段,应该不能输⼊空值,添加⾮空约束同样也是可以三种⽅式以及⼀种⽅式的删除约束
1. 直接在创建表的时候添加⾮空约束
sname varchar2(100) not null,          ----添加⾮空约束
2. 在声明数据库表格结构的最后⼀⾏声明⾮空约束,具体如下
constraints ck_student_sname check(sname is not null)
3. 在创建表之后使⽤ alter table语句给对应表设置约束,具体如下
alter table student add constraints ck_student_cname check(sname is not null)
4. 删除主键约束,这⾥同样使⽤ 具体如下,具体如下
alter table student drop constraints ck_student_cname;
检查约束
检查约束只要是指给特定字段添加限制,⽐如年龄必须是在特定范围内,性别只能是男⼥等
1. 直接在创建表的时候添加⾮空约束,具体如下
sage number(3) check(sage>0 and sage<150),
ssex char(4) check(ssex='男' or ssex='⼥'),
2. 在声明数据库表格结构的最后⼀⾏声明主键约束,具体如下
constraints ck_student_sage check(sage>0 and sage <200),
constraints  ck_student_ssex check(ssex='男' or ssex='⼥'),
3. 在创建表之后使⽤ alter table语句给对应表设置约束,具体如下
alter table student add constraints ck_student_sage checkcheck(sage>0 and sage<150);
alter table student add constraints ck_student_sex check(ssex='男' or ssex='⼥')
4. 删除主键约束,这⾥同样使⽤ 具体如下,具体如下
alter table student drop constraints ck_student_sage
alter table student drop constraints ck_student_sex;
唯⼀约束
唯⼀约束是指在这个字段中,每个值都应该是互不相同的
1. 直接在创建表的时候添加⾮空约束,具体如下
sqq varchar2(30) unique,
2. 在声明数据库表格结构的最后⼀⾏声明主键约束,具体如下
constraints un_student_qq unqiue(qq)
3. 在创建表之后使⽤ alter table语句给对应表设置约束,具体如下
alter table student add constraints un_student_qq unique(qq)
4. 删除主键约束,这⾥同样使⽤ 具体如下,具体如下
alter table student drop constraints un_student_qq
外键约束
外键的概念:当⼀张表的某个字段的值需要依赖另外⼀张某个表的某个字段的值,则使⽤外键约束,其中主动依赖的表称为⼦表,被依赖的表称为⽗表,外键加在⼦表中。例如如下两张表格,学⽣表中需要课程表的课程号,且不能添加不存在的课程号信息到学⽣表中,这种情况便可以设置外键约束。
--创建学⽣表(⼦表)
create table student(
sno number(10) primary key,
sname varchar2(100) not null,
sage number(3) check(sage>0 and sage<150),
ssex char(4) check(ssex='男' or ssex='⼥'),
sfav varchar(500),
sqq varchar2(30) unique,
cno number(10)
)
--创建班级表格(⽗表)
create table class(
cno number(10) primary key,
cname varchar2(100) not null,
cdesc varchar2(300)
)
其中⼀般选取⽗表的主键作为⼦表的外键,且外键与主键名称不必相同
1. 直接在创建表的时候添加⾮空约束,具体如下
cno number(10) references class(cno),
2. 在声明数据库表格结构的最后⼀⾏声明主键约束,具体如下
constraints fk_student_cid foreign key(cid) references class(cno)
3. 在创建表之后使⽤ alter table语句给对应表设置约束,具体如下
alter table student add constraints fk_student_cid foreign key(cno) references class(cno)
4. 删除主键约束,这⾥同样使⽤ 具体如下,具体如下
alter table student drop constraints  fk_student_cid
外键约束优化
有外键约束的数据表在删除时会因为存在外键约束导致数据删除失败,这时需要优化数据表的外键设置
1. 使⽤ on delete cascade关键字 级联删除,缺点是级联删除会将有关联的数据⼀起删除,⽐如完成如下设置以后,假如删除 class表
中的1班级,student表中的班级号为1的也将全部删除
alter table student add constraints fk_student_cid foreign key(cno) references class(cno) on delete c
ascade;
2. 使⽤ on delete set null关键字,删除⽗表数据时 将⼦表中的依赖字段的值设置为null,因此⼦表依赖的字段不能设置⾮空约束
alter table student add constraints fk_student_cid foreign key(cno) references class(cno) on delete set null;
总结
这⼀篇博客的主要内容是了解Oracle主要数据类型的含义以及添加约束的三种⽅法,重点了解约束类型:主键约束,⾮空约束,检查约束,唯⼀约束以及数据表中中外键的设置。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。