欢迎光临
我们一直在努力

如何理解MySQL中的数据类型概念

一、数据是什么?

数据是一个信息集合,以某种数据类型保存在数据库里。数据包括姓名、数字、货币、文本、图像、小数、计算、统计等,几乎涵盖能够想象到的任何东西。数据客户保存为大写、小写或大小写混合,数据可以被操作或修改,大多数数据在其生存周期内不会保持不变。

数据类型用于指定列所包含数据的规则,它决定了数据保存在列里的方式,包括分配给列的宽度,以及值是否可以是字母、数字、日期和时间等。任何数据或数据的组合都有对应的数据类型,这些数据类型用于存储像字母、数字、日期和时间、图像、二进制数据等。更详细地说,数据可以包括姓名、描述、数字、计算、图像、图像描述、文档等。

数据是数据库的意义所在,必须受到保护。数据的保护着就是数据库管理员(DBA),但是每个数据库用户也有责任采取必要手段来保护数据。

二、基本数据类型

数据类型是数据本身的特征,其特性被设置到表里的字段。举例来说,我们可以指定某个字段必须包含数字值,不允许输入由数字或字母组成的字符串;我们也不希望在保存货币数值的字段里输入字母。为数据库里每个字段定义数据类型可以大幅减少数据库里由于错误而产生的错误数据。字段定义(数据类型定义)是一种数据校验方式,通知了每个字段里可以输入的数据。

1.定长字符串。

定长字符串通常具有相同的长度,是使用定长数据类型保存的。下面是Sql定长字符串的标准:

CHARACTER(n)

n是一个数字,定义了字段里能够保存的最多字符数量。

有些Sql实现使用CHAR数据类型来保存定长数据。字母可以保存到这种数据类型里。

在定长数据类型里,通常使用空格来补充数量不足的字符。如果字符长度是10,而输入的数据只有5位,那么剩余5位就会被记录为空格。填充空格确保了字段里每个值都具有相同的长度。

PS:不要使用定长数据类型来保存长度不定的数据,比如姓名,如果不恰当地使用定长数据类型,可能会导致浪费可用空间,以及影响对不同的数据进行精确比较。应该使用变长数据类型来保存长度不定的字符串,从而节省数据库空间。

2.变长字符串。

Sql支持变长字符串,也就是长度不固定的字符串。下面是Sql变长字符串的标准:

CHARACTER VARYING(n)

n是一个数字,表示字段里能够保存的最多字符数量。

常见的变长字符串数据类型有VARCHAR、VARINARY和VARCHAR2。VARCHAR是ANSI标准,Microsoft Sql Server和MySql也使用它;VARINARY和VARCHAR2都是由Oracle使用的。定义为字符的字段里可以保存数字和字母,这意味着数据中可能包含数字字符。VARBINARY类似于VARCHAR和VARCHAR2,只是它包含的是长度不定的字节。这种数据类型通常被用来保存数字式数据,例如图像文件。

定长数据类型利用空格来填充字段里的空白,但变长字符串不这样做。举例来说,如果某个变长字段的长度定义为10,而输入的字符串长度为5,那么这个值的总长度也就是5,这时并不会使用空格来填充字段里的空白。

3.大对象类型。

有些变长数据类型需要保存更长的数据,超过了一般情况下为VARCHAR字段所保留的长度,比如现在常见的BLOB和TEXT数据类型。这些数据类型专门用于保存大数据集的。BLOB是二进制大对象,它的数据是很长的二进制字符串。BLOB适合在数据库里存储二进制媒体文件,比如图像和MP3.

TEXT数据类型是一种长字符串类型,可以被看作一个大VARCHAR字段,通常用于在数据库里保存大字符集,比如博客站点的HTML输入。在数据库里保存这种类型的数据可以实现站点的动态更新。

4.数值类型。

数值被保存在定义为某种数值类型的字段里,一般包括NUMBER、INTERGER、REAL/DECIMAL等。

虾米是Sql数值的标准:

(1).BIT(n);

(2).BIT VARYING(n);

(3).DECIMAL(p,s);

(4).INTEGER;

(5).SMALLINT;

(6).SIGINT;

(7).FLOAT(p,s);

(8).DOUBLE PRECISION(P,S);

(9).REAL(S);

P 表示字段的最大长度。s 表示小数点后面的位数。

Sql实现中一个通用的数值类型是NUMERIC,它符合ANSI标准。数值可以是0、正数、定点数和浮点数。下面是使用NUMERIC的一个范例:

NUMERIC(s),这个命令把字段能够接受的最大值限制为99 999.在本书范例所涉及的数据库实现总,NUMERIC都是以DECIMAL类型实现的。

5.小数类型。

小数类型是数值的总体长度。举例来说,在数值定义ZDECIMZAL(4,2)里,有效位数是4,也就是说数值总位数是4.标度是小数点后面的位数,在前例中是2。如果实际数值的小数位数超过了定义的位数,数值就会被四舍五入,比如34.33写入到定义为DECIMAL(3,1)的字段时,会被四舍五入34.3。

如果数值按照如下方式被定义,其最大值就是99.99:

DECIMAL(4,2)

有效位是4,表示数值的总体长度是4;标度是2,表示小数点后面保留2位。小数点本身并不算作一个字符。

定义为DECIMAL(4,2)的字段允许输入的数组包括:

(1).12

(2).12.4

(3).12.44

(4).12.449

最后一个值12.449在保存到字段时会四舍五入为12.45。在这种定义,任何12.45~12.499之间的数值会被四舍五入为12.45。

6.整数。

整数是不包含小数点的数值(包括正数和负数)。

下面是一些有效的整数:

(1).1;

(2).0;

(3).-1;

(4).99;

(5).-99;

(6).199;

7.浮点数。

浮点数是有效位数和标度都可变并且没有限制的小数数值,任何有效位数和标度都是可以的。数据类型REAL代表单精度浮点数值,而DOUBLE PRECISION表示双精度浮点数值。单精度浮点数值的有效位数为1~21(包含),双精度浮点数值的有效位数为22~53(包含)。下面是一些FLOAT数据类型的范例:

(1).FLOAT;

(2).FLOAT(15);

(3).FLOAT(50);

8.日期和时间类型。

日期和时间数据类型很显然是用于保存日期和时间信息的。标准Sql支持DATETIME数据类型,它包含以下类型:

(1).DATE;

(2).TIME;

(3).DATETIME;

(4).TIMESTAMP;

DATETIME数据类型的元素包括:

(1).YEAR;

(2).MONTH;

(3).DAY;

(4).HOUR;

(5).SECOND;

ps:SECOND元素还可以再分解为几分之一秒,其范围是00.000~61.999,但并不是所有Sql实现都支持这个范围。多出来的1.999秒是用于实现闰秒的。

每种Sql实现可能都是具有自定义的数据类型来保存日期和时间。前面介绍的数据类型和元素是每个Sql厂商都应该遵守的标准,但大多数实现都具有自己的数据类型来保存日期值,其形式与实际存储方式有所不同。

日期数据一般不指定长度。稍后我们会更详细地介绍日期类型,包括日期信息在某些实现里的保存方式、如何使用转换函数操作日期和时间,并且用范例展示在实际工作中如何使用日期和时间。

9.直义字符串。

直义字符串就是一系列字符,比如姓名或电话号码,这是有用户或者程序明确指定的。直义字符串包含的数据与前面介绍的数据类型具有一样的属性,但字符串的值是已知的。列本身的值通常是不能确定的,因为每一列通常包含了字段在全部记录里的不同值。

实际上并不需要把字段指定为直义字符串数据类型,而是指定字符串。直义字符串的范例如下所示:

(1).'Hello';

(2).45000;

(3).'45000';

(4).3.14;

(5).'November 1 ,1997';

字符型的字符串由单引号包围,数值45000没有单引号包围,而第二个45000用双引号包围了。一般来说,字符型字符串需要使用单引号,而数值型不需要。

将一个数据类型成数值类型的过程过程术语隐式转换。在这个过程中,数据库会自动判断应该使用哪种数据类型。所以,如果一个数据没有使用单引号包围起来,那么Sql程序就会将其认定为数值类型。因此,必须要特别留意数据的形式。否则,存储结果可能会出现偏差,或者报错。稍后将介绍如何在数据库查询里使用直义字符串。

10.NULL数据类型。

NULL值表示没有值。NULL值在Sql里有广泛的应用,包括表的创建、查询的搜索条件,甚至是在直义字符串。

在使用NULL数据类型时,需要明确表示相应字段不是必须要输入数据的。如果某个字段必须包含数据,就把它设置为NOT NULL,只要字段有可能不包含数据,最好就把它设置为NULL。

11.布尔值。

布尔值的取值范围是TRUE、FlASE和NULL,用于进行数据比较。举例来说,在查询中设置条件时,每个条件都会被求值,得到TRUE、FLASE或NULL。如果查询中所有条件的值都是TRUE,数据就会被返回;如果某个条件的值是FLASE或NULL,数据就不会返回。比如下面这个范例:

WHERE NAME =‘SMITH’

这可能是查询里的一个条件,目标表里每行数据都是根据这个条件进行求值。如果表里某行的NAME字段值是SMITH,条件的值就是TRUE,相应的记录就会被返回。

大多数数据库实现并没有一个严格意义上的BOOLEAN类型,而是代之以各自不同的实现方法。MySql用于BOOLEAN类型,但实质上与其现有的TINYINT类型相同。Oracle倾向于让用户使用一个CHAR(1)值来代替布尔值,而Sql Server则使用BIT来代替。

12.自定义类型。

自定义类型是由用户定义的类型,它允许用户根据已有的数据类型来定制自己的数据类型,从而满足数据存储的需要。自定义类型极大的丰富了数据存储的可能性,使开发人员在数据库程序开发过程中具有更大的灵活性。语句CREATE TYPE用于创建自定义类型。

举例来说,在MySql和Oracle中,可以像下面这样创建一个类型:

CREATE TYPE PERSON ASOBJECT

(NAME VARCHER (30),

SSN VARCHAR(9);

)

然后可以像下面这样引用自定义类型:

CREATE TABLE EMP_PAY

(EMPLOYEE PERSON,

SALARY DECIMAL(10,2),

HIRE_DATE DATE);

表EMP_PAY第一列EMPLOYEE的类型是PERSON,这正是在前面创建的自定义类型。

13.域。

域是能够被使用的有效数据类型的集合。域与数据相关联,从而只接受特定的数据。在域创建之后,我们可以向域添加约束。约束与数据类型共同发挥作用,从而进一步限制字段能够接受的数据。域的使用类似于自定义类型。

像下面这样就可以创建域:

CREATE DOMAIN MONEY_D AS NUMBER(0,2);

像下面这样为域添加约束:

ALTER DOMAIN MONEy_D

ADD CONSTRAINT MONEY_CON

CHECK(VALUE>5);

然后像下面这样引用域:

CREATE TABLE EMP_PAY

(EMP_ID NUMBER(9),

EMP_NAME VARCHER2(30),

PAY_RATE MONEY_D);

三、小结

Sql具有多种数据类型,对于使用过其他编程语言的人来说,这些都不算陌生。数据类型允许不同类型的数据保存到数据库,比如单个字符、小数、日期和时间。无论是使用像c这样的第三代编程语言,还是使用关系型数据库实现Sql编码,数据类型的概念都是一样的。当然,不同实现中数据类型的名称坑你有所不同,但其工作方式基本上是一样的。另外,关系型数据库管理系统并不是一定要实现,ANSI标准里规定的全部数据类型才会被认为是与ANSI兼容的,因此最好查看具体的文档来了解尅使用的数据类型。

在考虑数据类型、长度、标度和精度时,一定要仔细地进行短期和长远的规划。另外,公司制度和希望用户以什么方式访问数据也是要考虑的因素。开发人员应该了解数据的本质。以及数据在数据库里是如何相互关联的,从而使用恰当的数据类型。

 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:英协网 » 如何理解MySQL中的数据类型概念

分享到: 生成海报
avatar

热门文章

  • 评论 抢沙发

    • QQ号
    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址

    登录

    忘记密码 ?

    切换登录

    注册

    我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活