《数据库学习数据库类型篇精.ppt》由会员分享,可在线阅读,更多相关《数据库学习数据库类型篇精.ppt(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库学习数据库数据库学习数据库类型篇类型篇北京久其软件股份有限公司2022年11月30日第1页,本讲稿共36页北京久其软件股份有限公司2022年11月30日数据库地位数据库地位支撑当代计算机应用最基本的四大支柱支撑当代计算机应用最基本的四大支柱:操作系统网络技术 计算机语言 数据库 第2页,本讲稿共36页北京久其软件股份有限公司2022年11月30日数据库地位数据库地位l数据库技术产生于六十年代末,是数据管理的最新技术,是计算机科学的重要分支l数据库技术是信息系统的核心和基础,它的出现极大地促进了计算机应用向各行各业的渗透l数据库的建设规模、数据库信息量的大小和使用频度已成为衡量一个国家信息
2、化程度的重要标志第3页,本讲稿共36页北京久其软件股份有限公司2022年11月30日数据库系统概述数据库系统概述数据库是数据管理的最新技术,是计算机科学的重要分支。常用术语-数据数据-数据库-数据库管理系统-数据库系统数据库管理技术的产生和发展数据库系统的特点第4页,本讲稿共36页北京久其软件股份有限公司2022年11月30日数据库数据类型介绍数据库数据类型介绍Oracle的数据类型可以分为四类,分别是标量类型、复合类型、引用类型和LOB类型。标量类型没有内部组件;而复合类型包含了能够被单独操作的内部组件;引用类型类似于3G语言中的指针,能够引用一个值;LOB类型就是一个lob定位器,能够指出
3、大对象的存储位置。1、标量(Scalar)2、复合(composite)3、引用(reference)4、LOB第5页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1、标量(、标量(Scalar)1.1 数字型1.2 字符型1.3 行型1.4 日期型1.5 行标识型1.6 布尔型1.7 可信型第6页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.1数字型数字型数字型可以存储整数、定点和浮点,可以表示数值的大小,参与计算。l1.1.1 NUMBERl1.1.2 PLS_INTEGERl1.1.3 BINARY_INTEGER第7页,本讲稿共36页北京久其软件股份
4、有限公司2022年11月30日1.1.1NUMBERNUMBER我们可以使用NUMBER数据类型来存储定点和浮点数。它的取值范围是1E-130至10E125。如果表达式的值超过这个范围,我们就会得到溢出错误。我们可以为要存储的数字指定精度,包括数字的全长和小数位。NUMBER(p,s)P为Precision(p=38),意为数值的最大位数(十进制)S为Scale,意为小数点后的最多位数。范围(-84127之间)如果S为负数,表示精确到小数点前若干位P,S可以省略NUMBER表示使用默认值,即等同于NUMBER(5)第8页,本讲稿共36页北京久其软件股份有限公司2022年11月30日NUMBER
5、子类型子类型为了能和ANSI/ISO和IBM类型兼容或是想使用一个更加具有描述意义的名字,我们可以使用下面的MUNBER子类型:1.DEC2.DECIMAL3.DOUBLE PRECISION4.FLOAT5.INTEGER6.INT7.NUMERIC8.REAL9.SMALLINT使用DEC、DECIMAL和NUMERIC可以声明最大精度为38位十进制的定点数字。而使用DOUBLE PERCISION和FLOAT可以声明最大精度为126为二进制的浮点数字,大约相当于38位十进制数字。或是使用REAL声明最大精度为63位二进制的浮点数字,大约相当于18位二进制数字。INTEGER、INT、和S
6、MALLINT可以声明最大精度为38位十进制数字的整数。第9页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.1.2 PLS_INTEGERPLS_INTEGER 我们可以使用PLS_INTEGER数据类型来存储有符号整数。它的取值范围在-231至231之间。PLS_INTEGER所需要的存储空间要比NUMBER少,运算的速度要高于NUMBER和BINARY_INTEGER。虽然PLS_INTEGER和BINARY_INTEGER取值范围一样,但它们不完全兼容。PLS_INTEGER在运算时如果有溢出,则会有异常抛出,而BINARY_INTEGER发生溢出时,如果结果是要赋给
7、一个NUMBER类型的变量时,就不会有异常抛出。为了考虑兼容性,我们仍可以在旧的应用程序中使用BINARY_INTEGER,按在新的应用程序中,PLS_INTEGER会带来更好的性能。第10页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.1.3 BINARY_INTEGER BINARY_INTEGER可以描述不存储在数据库中,但是需要用来计算的带符号的整数值。以2的补码二进制形式表述。循环计数器常使用此类型。我们可以使用BINARY_INTEGER数据类型来存储有符号整数。它的范围是-2*31至2*31。跟PLS_INTEGER一样,BINARY_INTEGER所需要的存
8、储空间也小于NUMBER。但是,大多数的BINARY_INTEGER操作比PLS_INTEGER操作慢。第11页,本讲稿共36页北京久其软件股份有限公司2022年11月30日BINARY_INTEGER子类型子类型BINARY_INTEGER子类型所谓的基类型,就是子类型继承于它。子类型在基类型的基础上添加一些约束限制,也可能重新定义数值范围。为了使用方便,PL/SQL预定义了下面的几个BINARY_INTEGER的子类1.NATURAL2.NATURALN3.POSITIVE4.POSITIVEN5.SIGNTYPE子类型NATURAL和POSITIVE能让我们将一个整型变量的取值范围分别限
9、制在非负数和正整数之内。NATURALN和POSITIVEN不允许为整数类型变量赋空值。SIGNTYPE把正说的取值范围限定在-1,0,1,在编程中很适合三态逻辑(tri-state logic)第12页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.2 字符型字符型字符类型可以存放字符和数字混合的数据,表现词和文章,操作字符串1.2.1 CHAR1.2.2 VARCHAR21.2.3 LONG1.2.4 NCHAR 1.2.5 NVARCHAR2第13页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.2.1 CHAR定长类型CHAR我们可以使用CHAR类型
10、来存储定长的字符数据。但该数据的内部表现形式是取决于数据库字符集的。CHAR类型有一个用于指定最大长度的可选参数,长度范围在1到32767字节之间,我们可以采用字节或字符的形式来设置该参数。具体语法如下:CHAR(maximum_sizeCHAR|BYTE )Maximum_size不能是常量或者变量,只能是范围在1至32767之间的整数文字。CHAR(1)1为字符串长度,缺省值为1,作为变量最大长度32767个字符,作为数据存储在Oracle中最大为2000 长度固定,填充空格性能稍好,适合固定长度的编号等第14页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.2.2 VA
11、RCHAR2 变长类型VARCHAR2我们可以使用VARCHAR2类型来存储变长的字符数据。至于数据在数据空中的内部表现形式要取决于数据区的字符集。语法如下:VARCHAR2(maximum_sizeCHAR|BYTE)我们不能使用常量或变量来指定maxinum_size值,maximum_size值的有效范围在1到32767之间。对于长度不同的VARCHAR2类型数据,PL/SQL对它们的处理方式也不相同。截止点:2000字节=2000 效率优先,动态分配空间VARCHAR2(n),最大4000第15页,本讲稿共36页北京久其软件股份有限公司2022年11月30日VARCAHR2子类型子类型
12、下面VARCHAR2的子类型的范围与VARCHAR2完全相同,它们只是VARCHAR2的一个别名而已。1.STRING2.VARCHAR我们可以使用这些子类型来与ANSI/ISO和IBM类型兼容。注意:目前VARCHAR和VARCHAR2有着相同的意义,但是在以后的PL/SQL版本中,为了符合SQL标准,VARCHAR有可能会作为一个单独的类型出现。所以最好使用VARCHAR2,而不是VARCHAR。第16页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.2.3 LongLONG我们可以使用LONG类型来存储变长的字符串。在数据库存储中可以保存2GB数据;作为变量最大可表示3
13、2760字节的可变字符串 LONG类型和VARCHAR2很像。注意:在SQL语句中,PL/SQL会将LONG类型的值绑定成VARCHAR2类型,而不是LONG。但是,如果被绑定的VARCHAR2值超过4000个字节,Oracle会自动地将绑定类型转换成LONG,但LONG并不能应用在SQL函数中,所以,这时我们就会得到一个错误消息。第17页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.2.4 NCHAR 本地字符:NCHAR和NVARCHAR2 NCHAR国家字符集,于环境变量NLS制定的语言有关我们用NCHAR类型来储存定长国家特有字符数据。数据的内部表现形式取决于数据库
14、创建时指定的国家特有字符集,字符集可能采用变长编码(UTF-8)或定长编码(AL16UTF16)。因为这种类型总是与多字节字符兼容,所以我们可以使用它支持任何Unicode字符数据。NCHAR数据类型可以接受一个可选参数来让我们指定字符的最大长度。语法如下:NCHAR(maximum_size)第18页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.2.5 NVARCHAR2 NVARCHAR2我们可以使用NVARCHAR2数据类型来存储变长的Unicode字符数据。数据的内部表现取决于数据库创建时所指定的国家特有字符集,它有可能采用变长编码(UTF8)或者定长编码(AL16
15、UTF16)。因为这个类型纵欲多字节兼容,我们可以用它来支持Unicode字符数据。NVARCHAR2数据类型需要接受一个指定最大大小的参数,语法如下:NCARCHAR2(maximum_size)第19页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.3 行型行型行存储二进制数据,不会在字符集间转换1.3.1 Raw 1.3.2 Long Raw第20页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.3.1 RawRaw我们可以使用RAW数据类型来存储二进制数据或字符串。例如,一个RAW类型的变量可以存储一个数字化图形。RAW类型数据和VARCHAR2类型
16、数据类似,只是PL/SQL不对其进行解析而已。同样在我们把RAW数据从一个系统传到另一个系统中时,Oracle Net也不会对它做字符集转换。RAW类型包含了一个可以让我们指定最大长度的可选参数,上限为32767字节。语法如下:RAW(maximum_size)maximum不能为常量或者变量来指定,必须为1到32767范围内的整数参数。作为数据存储在Oracle中最大为2000 第21页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.3.2 Long Raw Long Raw我们可以使用LONG RAW类型来存储二进制数据或者二进制字符串。LONG RAW 和LONG类似,
17、但是它不会被PL/SQL解析。作为数据库列最大存储2G字节数据;作为变量最大32760字节 从9i开始,LOB类型变量可以与LONG和LONG RAW类型交换使用。Oracle推荐将LONG和LONG RAW都对应的转换成CLOB和BLOB类型第22页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.4 日期型日期型Datetime日期时间类型日期及时间DATE 世纪、年、月、天、小时、分钟、秒公元前4712到公元后9999精度为秒,适合记录一般时间TIMESTAMP(n)TIMESTAMP是对DATE的扩展,包含了年月日时分秒 N为秒分量的小数位,从0到9,最大精度为微秒还可
18、以支持时区INTERVAL时间间隔时间间隔,这是一个差值,而不是绝对时间第23页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.5 行标识型行标识型行标识ROWID在Oracle内部,每个数据表都有一个伪列ROWID,用于存放被称为ROWID的二进制值。每个ROWID代表了一行数据的存储地址。物理ROWID能够标识普通数据表中的一行信息,而逻辑ROWID能够标识索引组织表(index-organized table)中的一行信息。其中ROWID类型只能存物理内容,而UROWID(universal rowid)类型可以存储物理、逻辑或外来(non-Oracle)ROWID建议
19、:只有在旧的应用程序中,为了兼容性我们才使用ROWID数据类型。对于新的应用程序,应该使用UROWID数据类型。第24页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.6 布尔型布尔型布尔布尔类型能存储逻辑值TRUE、FALSE和NULL(NULL代表缺失、未知或不可用的值)。只有逻辑操作符才允许应用在布尔变量上。boolean数据库SQL类型并不支持布尔类型,只有PL/SQL才支持。所以就不能往数据库中插入或从数据库中检索出布尔类型的值。第25页,本讲稿共36页北京久其软件股份有限公司2022年11月30日1.7 可信型可信型可信可信,只有一种类型-MLSLABEL,可以在
20、TRUSTED ORACLE中用来保存可变长的二进制标签。在标准ORACLE中,只能存储NULL值。第26页,本讲稿共36页北京久其软件股份有限公司2022年11月30日2 复合(复合(composite)复合标量类型是经过预定义的,利用这些类型可以衍生出复合类型。主要有记录、表。2.1 记录2.2 表第27页,本讲稿共36页北京久其软件股份有限公司2022年11月30日2.1 记录记录记录记录,可以看做成是一组标量的组合结构,它的声明方式如下:TYPE record_type_name IS RECORDfiled1 type1 NOT NULL:=expr1)filedn type NOT
21、 NULL:=exprn 其中,record_type_name 是记录类型的名字,引用时必须定义相关的变量,记录只是TYPE,不是VARTABLE第28页,本讲稿共36页北京久其软件股份有限公司2022年11月30日2.2 表表表不是物理存储数据的表,在这里是一种变量类型,也成为PL/SQL表,它类似于C语言中的数组,在处理方式上也类似。它的声明方式如下:TYPE table_type_name IS TABLE OF scalar_type INDEX BY BINARY_INTEGER;其中,table_type_name 是类型的名字,scalar_type是一种变量类型的类型声明。引
22、用时必须定义相关的变量。表和数组不同。表有两列,KEY和VALUE,KEY就是定义时声明的BINARY_INTEGER,VALUE就是定义时声明的scalar_type。第29页,本讲稿共36页北京久其软件股份有限公司2022年11月30日3 引用引用在PL/SQL8.0之前,只有一种类型 REF CURSOR,也就是游标。它的定义比较简单,CURSOR cursor_name IS selectfrom;在PL/SQL8.0之后,引入REF类型,它指向一个对象。第30页,本讲稿共36页北京久其软件股份有限公司2022年11月30日4 LOBLOBLOB(large object)数据类型BF
23、ILE、BLOB、CLOB和NCLOB可以最大存储4G的无结构数据(例如:文本、图像、视频剪辑和音频)块,并且它们允许高效地随即地分段访问数据。LOB类型中存储了LOB定位器,它能够指向存放于外部文件中的“大对象”,in-line或out-of-line的形式。BOLB、CLOB、NCLOB或BFILE类型的数据库字段存储了定位器。其中BLOB、CLOB和NCLOB的数据存在数据库中,in-line 或out-of-line的形式,而BFILE数据存在数据库之外的操作系统文件中。PL/SQL是通过定位器来操作LOB的。4.1 CLOB 4.2 NCLOB 4.3 BLOB4.4 BFILE 第
24、31页,本讲稿共36页北京久其软件股份有限公司2022年11月30日4.1 CLOBCLOBCLOB可以在数据库中分别存储大块CHAR类型的字符数据,支持定宽和变宽字符集。指向自身类型的一个大的数据块。可以在事务中应用,能被恢复和复制。定位器可以跨事务使用,但不能跨会话使用。和ORACLE7中的LONG类型相似,存储单字节字符数据,不能存储中文。从9i开始,我们也可以把CLOB类型转换成CHAR和VARCHAR2类型。反之亦然,这样我们就能在大多数SQL和PL/SQL语句和函数中使用LOB类型了。第32页,本讲稿共36页北京久其软件股份有限公司2022年11月30日4.2 NCLOBNCLOB
25、NCLOB可以在数据库中存储大块NCHAR类型的字符数据,支持定宽和变宽字符集。需要存储定位器,指向自身类型的一个大的数据块。可以在事务中应用,能被恢复和复制。定位器可以跨事务使用,但不能跨会话使用。用来存储定长多字节字符数据。(例如:存笑傲江湖就挺好)第33页,本讲稿共36页北京久其软件股份有限公司2022年11月30日4.3 BLOB二进制大对象类型Binary Large Object,BLOBBLOB数据类型可以在数据库中存放不超过4G的大型二进制对象。需要储存定位器,指向自身类型的一个大的数据块。可以在事务中应用,能被恢复和复制。定位器可以跨事务使用,但不能跨会话使用。可以存放大量文
26、本、二进制数据(图像、音频、可执行程序等等)、文件等单独存储,存取方法特殊第34页,本讲稿共36页北京久其软件股份有限公司2022年11月30日4.4 BFILEBFILEBFILE数据类型用于存储二进制对象,它将存储的内容放在操作系统的文件中,而不是数据库内。每个BFILE变量都存储一个文件定位器。它指向服务器上的一个大的二进制文件。定位器包含目录别名,该别名给出了文件全路径。BFILE类型是只读的,而且它的大小要依赖于系统,不能超过4G,我们的DBA要确保给定的BFILE存在且Oracle有读取它的权限。第35页,本讲稿共36页北京久其软件股份有限公司2022年11月30日第36页,本讲稿共36页