您的位置:首页 > 博客中心 > 数据库 >

mysql使用笔记(三)

时间:2022-03-14 16:25

一、数值类型

1. 数值类型 
    标准sql中包含数据类型 INTEGER, SMALLINT, DECIMAL, NUMERIC,以及FLOAT, REAL, DOUBLE。mysql在此基础上进行了拓展,增加了TINYINT, MEDIUMINT, BIGINT三种长度不同的整数,以及BIT类型,用来存放位数据。

整数类型字节
TINYINT 1
SMALLINT 2
MEDIUMINT 3
INT/INTEGER 4
BIGINT 8
浮点数类型字节
FLOAT 4
DOUBLE 8
定点整数类型字节
DEC(M,D)/DECIMAL(M,D) M+2

(1.1) 整数类型 
    整数类型,mysql支持在类型名称后面的小括号内指定显示宽度,如int(5)表示当数值宽度小于5位的时候在数字前面填满宽度,如果不显式指定宽度则默认为int(11),这一般配合zero_fill一块使用,如 
create table t1(id int(5) zerofill);#表t1中的id列宽度为5位整数,如果数据位数小于5,则在前面添加0;如果数据位数大于5,仍然显示正确的数据,即不会受到数据位数的限制,只要保证该数据是个合法的4字节可以表示的整数。 
    整数类型有unsigned属性,如果一个列指定为zerofill,则mysql会自动给该列添加unsigned属性。 
    整数类型有uto_increment属性一般从1开始,每行增加1,在插入null到一个auto_increment列时,mysql插入一个比该列中当前最大值大1的值。一个表中最多只能有一个auto_increment列。对于任何想要使用auto_increment的列,应该定义为not null,并定义为primary key或定义为unique键。比如: 
create table ai (id int auto_increment not null primary key); 
create table ai(id int auto_increment not null, primary key(id)); 
create table ai(id int auto_increment not null, unique(id));

(1.2) 浮点数类型和定点数类型 
    定点数在mysql内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。浮点数和定点数都可以用类型名称后加"(M,D)"的形式来表示,M为整数加小数部分的总位数,D为小数部分的位置。float, double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统来决定)来显示,decimal在不指定精度时,默认的整数为为10,默认的小数为为0. 
比如用默认的decimal来存放数据1.23, 则实际只会保留整数位1,小数位的.23被丢弃。

(1.3) BIT类型 
    bit位类型用于存放位字段值,BIT(M)可以用来存放多位二进制数,M范围从1到64,如果不写则默认为1位。对于位字段,直接使用SELECT命令将不会看到结果,可以用bin()(显示为二进制格式)或者hex()(显示为十六进制格式)函数进行读取。

2. 日期和时间类型

日期和时间类型字节最小值最大值
DATE 4 1000-01-01 9999-12-31
DATETIME 8 1000-01-01 00:00:00 9999-12-31 23:59:59
TIMESTAMP 4 19700101080001 2038年的某个时刻
TIME 3 -838:59:59 838:59:59
YEAR 1 1901 2155

    TIMESTAMP值返回后显示为 YYYY-MM-DD HH:MM:SS格式的字符串,显示宽度固定为19个字符;如果想要获得数字值,在TIMESTAMP列添加"+0"即可。如果需要经常插入或者更新日期为当前系统时间,则通常使用TIMESTAMP来表示;TIMESTAMP还和时区相关,插入日期时,会先转化为本地时区后存放,而从数据库取出时,也同样需要经日期转换为本地时区后显示。

3. 字符串类型 
    mysql包含CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM, SET等多种字符串类型。 
(3.1) CAHR和VARCHAR类型 
    CHAR 长度为创建表时声明的长度,0-255;VARCHAR为可变长字符串。在检索时,CHAR列删除了尾部的空格,而VARCHAR保留这些空格。比如: 
create table vc(v varchar(4), c char(4)); 
insert into vc values(‘ab‘, ‘ab‘); 
select length(v), length(c) from vc;#结果为4, 2 
select concat(v, ‘+‘), concat(c, ‘+‘) from vc; #显示为 ab +和 ab+. 
即,char列最后的空格在做操作时都已经被删除,而varchar依然保留空格。

(3.2) BINARY和VARBINARY类型 
    BINARY和VARBINARY包含二进制字符串而不包含非二进制字符串。当保存BINARY值时,在值的最后通过填充"0x00"以达到指定的字段定义长度。对于一个BINARY(3)列,插入‘a‘时,变为‘a\0\0‘.

(3.3) ENUM类型 
    1~255个成员的枚举需要1个字节,255~65535个成员的枚举需要2个字节,最多允许65535个成员。枚举类型的成员为 字符串类型:1个或多个字符。比如: 
create table t(en enum(‘hello‘,‘world‘));

(3.4) SET类型 
    SET类型也是一个字符串对象,里面可以包含0~64个成员,每个成员对应一个比特位,即最多有8个比特位。 
    SET类型一次可以选取多个成员,而ENUM只能选一个。比如,在表t中插入多组不同的成员: 
create table t(col set(‘a‘,‘b‘,‘c‘,‘d‘)); 
insert into t values(‘a,b‘), (‘c,d‘), (‘a, c, d‘); #一次插入多个记录

热门排行

今日推荐

热门手游