数据库学习---2

来源:互联网 发布:淘宝上的东西是正品吗 编辑:程序博客网 时间:2024/06/05 01:59

MySQL数据类型
数据类型是数据的一种属性,其可以决定数据的存储格式、有效范围和相应的限制。
MySQL的数据类型包括整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型和二进制数据类型。

整数类型

TINYINT
SMALLINT
MEDIUMINT
INT
INTEGER
BIGINT
MySQL支持数据类型的名称后面指定该类型的显示宽度。其基本形式如下:
数据类型(显示宽带)
其中,数据类型参数是数据类型的名称;显示宽带参数是指定宽带的数值。显示宽度是指能够显示的最大数据的长度。在不指定宽度的情况下,每个类型都有默认的显示宽度。
负号是占一个位置的。

整数类型的默认显示宽度与其有符号数的最大值的显示宽度相同。
一个数据类型的默认显示宽度刚好能显示该数据类型的所有值

在整数类型使用时,还可以搭配使用zerofill参数。zerofill参数表示数字不足的显示空间由0来填补。值得注意的是,使用zerofill参数时,MySQL会自动加上UNSIGNED属性。那么,该整数类型只能表示无符号数,其显示宽度比默认宽度小1.

注意:数据的宽度不能大于默认宽度。如果大于默认宽度,那该数据已经超过了该类型的最大值。因为最大值的宽度必须时小于等于默认宽度。如果一个值大于了这个类型的最大值,那么这个值时不可能插入的。

整数类型还有一个AUTO_INCREMENT属性。该属性可以使字段成为自增字段。具有该属性的字段,在插入新的记录时,该字段的值都会在前一条记录的基础上加1.

浮点数类型和定点数类型
MySQL中使用浮点数类型和定点数类型来表示小数。浮点数类型包括单精度浮点数(FLOAT)和双精度浮点数(DOUBLE型)。
定点数类型就是DECIMAL型。
DECIMAL的有效取值范围由M和D决定。而且,DECIMAL型的字节数是M+2。也就是说,定点数的存储空间是根据其精度决定的。
MySQL中可以指定浮点数和定点数的精度。其基本形式如下:
数据类型(M,D)
其中,“数据类型”参数是浮点数或定点数的数据类型名称;M参数称为精度,是数据的总长度,小数点不占位置;D参数称为标度,是指小数点后的长度D。

如果插入值的精度高于实际定义的精度,系统会自动进行四舍五入处理,使值的精度达到要求。不同的是,FLOAT型和DOUBLE型在四舍五入时不会报错,而DECIMAL型会有警告。

在MySQL中,定点数以字符串形式存储。因此,其精度比浮点数要高。而且。浮点数会出现误差,这是浮点数一直存在的缺陷。如果要对数据的精度要求比较高,还是选择定点数(DECIMAL)比较安全。

日期与时间类型
日期与时间类型是为了方便在数据库中存储日期和时间而设的。MySQL中有多种表示日期和时间的数据类型。
其中,YEAR类型表示时间—年;DATE类型表示日期—年月日;TIME类型表示时间—时分秒;DATETIME(年-月-日-时-分-秒)和TIMESTAMP(年月日时分秒)表示日期和时间。

每种日期与时间类型都有一个有效范围。如果插入的值超过了这个范围,系统会报错,并将零值插入到数据库中。不同的日期与时间类型有不同的零值。

YEAR类型
YEAR类型使用1个字节来表示年份。MySQL中以YYYY的形式显示YEAR类型的值。
给YEAR类型的字段赋值的表示方法如下:
使用4位字符串或数字表示。输入格式为‘YYYY’或YYYY
使用2位字符串表示。
使用2位数字表示。

使用YEAR类型时,要注意区分0和‘0’.如果向YEAR类型的字段插入0,存入该字段的年份是0000。如果向YEAR类型的字段插入‘0’,存入的年份是2000.‘00’和‘0’是一样的效果。

TIME类型

TIME类型使用3个字节来表示时间。MySQL中以HH:MM:SS的形式显示TIME类型的值。其中HH表示时;MM表示分;SS表示秒。
支持负值
TIME类型的字段赋值的表示方法如下。
‘D HH:MM:SS’格式的字符串表示。其中,D表示天数,保存时,小时的值等于(D*24+HH)。
‘HHMMSS’格式的字符串或HHMMSS格式的数值表示。
输入0和‘0’,TIME类型会转换为 0000:00:00
使用CURRENT_TIME或者NOW()输入当前系统时间。
如果超出TIME的范围,将被裁为范围最接近的端点。无效TIME值,在命令行下是无法被插入到表中的。
如果插入的TIME值时无效的,系统会提示ERROR。即使这个无效值被插入到表中,其值也会被转换为00:00:00.
TIME类型专门用来存储时间数据,而且只占3个字节。

DATE类型

DATE类型使用4个字节来表示日期。
MySQL中是以YYYY-MM-DD的形式显示DATE类型的值。其中,YYYY表示年;MM表示月;DD表示日。
给DATE类型的字段赋值的表示方法如下:
‘YYYY-MM-DD’或‘YYYYMMDD’格式的字符串表示,MySQL中还支持一些不严格的语法格式,任何标点都可以用来做间隔符。
‘YY-MM-DD’或者‘YYMMDD’格式的字符串表示。

虽然MySQL支持DATA类型的一些不严格的语法格式。但是,在实际应用中,最好还是选择标准形式。日期中使用“-”做分隔符,时间用“:”做分隔符。如果有特殊需要,可以使用特殊字符做分隔符。

YYYYMMDD或YYMMDD格式的数字表示。
使用CURRENT_DATE或NOW()来输入当前系统日期。
DATE类型只占用4个字节。

DATETIME类型

DATETIME类型使用8个字节来表示日期和时间。
MySQL中以‘YYYY-MM-DD HH:MM:SS’的形式显示DATETIME类型的值。从其形式可以看出,DATETIME类型可以直接用DATE类型和TIME类型组合而成。
给DATETIME类型的字段赋值的表示方法如下:
‘YYYY-MM-DD HH:MM:SS’或‘YYYYMMDDHHMMSS’格式的字符串表示。
MySQL中还支持一些不严格的语法格式,任何标点都可以用来做间隔符。情况与DATE类型相同。而且,时间部分也可以用任何分隔符隔开,这与TIME类型不同。TIME类型只能用“:”隔开。

‘YY-MM-DD HH:MM:SS’或‘YYMMDDHHMMSS’格式的字符串表示。

YYYYMMDDHHMMSS或YYMMDDHHMMSS格式的数字表示。

使用NOW()来输入当前系统日期和时间。

DATETIME类型用于记录日期和时间,其作用等价于DATE类型和TIME类型的组合。一个DATETIME类型的字段可以用一个DATE类型的字段和一个TIME类型的字段代替。

TIMESTAMP类型

TIMESTAMP类型使用4个字节来表示日期和时间。
MySQL中以‘YYYY-MM-DD HH:MM:SS’的形式显示TIMESTAMP类型的值。从其形式可以看出,TIMESTAMP类型与DATETIME类型显示的格式是一样的。给TIMESTAMP类型的字段赋值的表示方法基本与DATETIME类型相同。值得注意的是,TIMESTAMP类型范围比较小,没有DATETIME类型的范围大。

TIMESTAMP类型的几种与DATETIME类型不同的形式。内容如下:
使用CURRENT_TIMESTAMP来输入系统当前日期与时间。
输入NULL时,系统会输入系统当前日期与时间。
无任何输入时,系统会输入系统当前日期与时间。
TIMESTAMP类型,时间是根据时区来显示的。

字符串类型

字符串类型是在数据库中存储字符串的数据类型。字符串类型包括CHAR、VARCHAR、BLOB、TEXT、ENUM和SET。

CHAR类型和VARCHAR类型

CHAR类型和VARCHAR类型都是在创建表时指定了最大长度,其基本形式如下:
字符串类型(M)
其中,“字符串类型”参数指定了数据类型为CHAR类型还是VARCHAR类型;M参数指定了该字符串的最大长度为M。
CHAR类型的长度是固定的,在创建表时就指定了。
VARCHAR类型的长度是可变的,在创建表时指定了最大长度。
指定VARCHAR类型的最大值以后,其长度可以在0到最大长度之间。
VARCHAR类型实际占用的空间为字符串的实际长度加1。这样,即可有效节约系统的空间。

TEXT类型

TEXT类型是一种特殊的字符串类型。TEXT只能保存字符数据,如新闻的内容等。
TEXT类型包括TINYTEXT、TEXT、,MEDIUMTEXT和LONGTEXT。

ENUM类型

ENUM类型又称为枚举类型。
在创建表时,ENUM类型的取值范围就以列表的形式指定了。
其基本形式如下:
属性名 ENUM(‘值1’,‘值2’,···,‘值n’)
其中,属性名参数指字段的名称;“值n”参数表示列表中的第n个值,这些值末尾的空格将会被系统直接删除。
ENUM类型的值只能取列表中的一个元素。
列表中的每个值都有一个顺序排列的编号,MySQL中存入的是这个编号,而不是列表中的值。
如果ENUM类型加上了NOT NULL属性,其默认值为取值列表的第一个元素。如果不加NOT NULL属性,ENUM类型将允许插入NULL,而且NULL为默认值。

SET类型

在创建表时,SET类型的取值范围就以列表的形式指定了。
其基本形式如下:
属性名 SET(‘值1’,‘值2’,···,‘值n’)
其中,“属性名”参数指字段的名称;“值n”参数表示列表中的第n个值,这些值末尾的空格将会被系统直接删除。其基本形式与ENUM类型一样。SET类型的值可以取列表中的一个元素或者多个元素的组合。
取多个元素时,不同元素之间用逗号隔开。
同ENUM类型一样,列表中的每个值都有一个顺序排列的编号。MySQL中存入的是这个编号,而不是列表中的值。
插入记录时,SET字段中的元素顺序无关紧要。存入MySQL数据库后,数据库系统会自动按照定义时的顺序显示。

SET类型和ENUM类型对于取值在一定范围的离散值很有效。ENUM类型只能在取值列表内取一个值,SET类型可以在取值列表内取多个值。这两个类型的数
据都不是直接将数据存入数据库,而是将其列表中的编号存入数据库。

二进制类型

二进制类型是在数据库中存储二进制数据的数据类型。二进制类型包括BINARY、VARBINARY、BIT、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。

BINARY类型和VARBINARY类型

BINARY类型和VARBINARY类型都是在创建表时指定了最大长度,其基本形式如下:
字符串类型(M)
其中,“字符串类型”参数指定了数据类型为BINARY类型还是VARBINARY类型;M参数指定了该二进制数的最大字节长度为M。
BINARY类型的长度是固定的,在创建表时就指定了。不足最大长度的空间由“\0”补全。
VARBINARY类型的长度是可变的,在创建表时指定了最大长度。
指定好了VARBINARY类型的最大值以后,其长度可以在0到最大长度之间。
VARBINARY类型实际占用的空间为实际长度加1。这样,可以有效的节约系统的空间。

BIT类型

BIT类型也是在创建表时指定了最大长度,其基本形式如下:
BIT(M)
其中,“M”指定了该二进制数的最大字节长度为M

在查询BIT类型的数据时,要用BIN(字段名+0)来将值转换为二进制显示。

BLOB类型

BLOB类型是一种特殊的二进制类型。
BLOB可以用来保存数据量很大的二进制数据,如图片等。
BLOB类型包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。这几种BLOB类型最大的区别就是能够保存的最大长度不同。LONGBLOB的长度最大,TINYBLOB的长度最小。
BLOB类型与TEXT类型很类似。不同点在于BLOB类型用于存储二进制数据,BLOB类型数据是根据其二进制编码进行比较和排序。而TEXT类型是文本模式进行比较和排序的。
BLOB类型主要用来存储图片、PDF文档等二进制文件。通常情况下,可以将图片、PDF文档都可以存储在文件系统中,然后在数据库中存储这些文件的路径。这种方式存储比直接存储在数据库中简单,但是访问速度比存储在数据库中慢。