mysql数据库成绩数据类型_MySQL数据库的基本数据类型整数类型
数值型数据类型主要⽤来存储数字,包含的类型有:
TINYINT、SMALLINT、MEDIUMINT、 INT(INTEGER)、 BIGINT。
下⾯通过⼀个例⼦来查看各种类型的所占有的数据空间,注意,我使⽤的版本是mysql5.6.28,可以通过下⾯的命令来查看:
创建表tmp1,其中字段x、y、z、m、n数据类型依次为TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,SQL语句如下:
CREATE TABLE tmp1 ( x TINYINT, y SMALLINT, z MEDIUMINT, m INT, n BIGINT );
执⾏成功之后,便⽤DESC查看表结构,结果如下:
DESC tmp1;
可以看到,TINGINT占1个字节,SMALLINT占2个字节,MEDIUMINT占3个字节,INT占4个字节,BIGINT占8个字节
浮点数类型与定点数类型
MySQL使⽤浮点数和定点数来表⽰⼩数。包含的类型有:
浮点类型:FLOAT、DOUBLE。
定点类型:DECIMAL。
测试案例:
创建表tmp2,其中字段x、y、z数据类型依次为FLOAT(5,1)、DOUBLE(5,1)和DECIMAL(5,1),向表中插⼊数据5.12、5.15和
5.123,SQL语句如下:
CREATE TABLE tmp2 ( x FLOAT(5,1), y DOUBLE(5,1), z DECIMAL(5,1) );
向表中插⼊数据:
INSERT INTO tmp2 VALUES(5.12, 5.15, 5.123);
可以看到在插⼊数据时,MySQL给出了⼀个警告信息,使⽤SHOW WARNINGS;语句查看警告信息:
SHOW WARNINGS;
说‘z’这⼀列的数据被截断了,使⽤下⾯的SQL语句看看刚刚插⼊的数据:
SELECT * FROM tmp2;
⽇期与时间类型
MySQL中有多种表⽰⽇期的数据类型。它们是:
DATETIME、DATE、TIMESTAMP、TIME和YEAR。
YEAR类型测试案例:
创建数据表tmp3,定义数据类型为YEAR的字段y,向表中插⼊值2010,’2010’,’2166’,SQL语句如下:
⾸先创建表tmp3:
CREATE TABLE tmp3( y YEAR );
向表中插⼊数据:
INSERT INTO tmp3 values(2010),('2010');
mysql是什么系统可以知道,YEAR类型的数据在MySQL中是按照字符串格式存储的。查看⼀下YEAR类型数据所占⽤的字节空间:
可以看到,MySQL中YEAR类型的数据占⽤⼀个字节的数据空间。
二叉树遍历工具再次向表中插⼊数据:
INSERT INTO tmp3 values ('2166');
语句执⾏之后,MySQL给出了⼀条警告提⽰,使⽤SHOW查看错误信息:
SHOW WARNINGS;
可以看到,插⼊的第3个值2166超过了YEAR类型的取值范围,此时不能正常的执⾏插⼊操作,查看结果:
SELECT * FROM tmp3;
由结果可以看到,当插⼊值为数值类型的2010或者字符串类型的’2010’时,都正确的储存到了数据库中;⽽当插⼊值’2166’时,由于超出了YEAR类型的取值范围,因此,不能插⼊值。查看资料得知,MySQL中YEAR类型的数据的取值范围是1901~2155.这⾥的YEAR是指的YEAR(4),此外,还有YEA
R(2)。对于YEAR(2),其显⽰年份的范围为1970~2070。在YEAR(2)的设置下,00~69代表2000~2069年。
向tmp3表中y字段插⼊2位字符串表⽰的YEAR值,分别为’0’、’00’、’77’和’10’,SQL语句如下:
郑州防外溢临时管控区⾸先删除表中的数据:
DELETE FROM tmp3;
向表中插⼊数据:
INSERT INTO tmp3 values('0'),('00'),('77'),('10');
查看结果:
SELECT * FROM tmp3;
由结果可以看到,字符串’0’和’00’的作⽤相同,分别都转换成了2000年;’77’转换为1977;’10’转换为2010。
向tmp3表中y字段插⼊2位数字表⽰表⽰的YEAR值,分别为0、78和11,SQL语句如下:
⾸先删除表中的数据:
DELETE FROM tmp3;
向表中插⼊数据:
INSERT INTO tmp3 values(0),(78),(11);
查看结果:
SELECT * FROM tmp3;
由结果可以看到,0被转换为0000;78被转换为1978;11被转换为2011。
对⽐两种测试数据,可以发现:对于YEAR数据类型的数据,在进⾏⼀些特殊值插⼊时,以数字形式和以字符串形式进⾏插⼊时得到的结果是不⼀样的。
TIME类型测试案例:
创建数据表tmp4,定义数据类型为TIME的字段t,向表中插⼊值’10:05:05’,’23:23’,’2 10:10’,’3 02’,’10’,SQL 语句如下:
⾸先创建表tmp4,
CREATE TABLE tmp4( t TIME );
向表中插⼊数据:
INSERT INTO tmp4 values('10:05:05'), ('23:23'), ('2 10:10'), ('3 02'),('10');
查看结果:
SELECT * FROM tmp4;
由结果可以看到,’10:05:05’被转换为10:05:05;’23:23’被转换为23:23:00;’2 10:10’被转换为58:10:00,’3 02’被转换为74:00:00;’10’被转换成00:00:10。
在使⽤’D HH’格式时,⼩时⼀定要使⽤双位数值,如果是⼩于10的⼩时数,应在前⾯加0。TIME类型
占⽤3字节,显⽰的范围为“-838:59:59”~“838:59:59”。有⼈会奇怪为什么TIME类型的时间可以⼤于23。因为TIME类型不仅可以⽤来保存⼀天中的时间,也可以⽤来保存时间间隔,同时这也解释了为什么TIME类型也可以存在负值。和DATETIME类型⼀样,TIME类型同样可以显⽰微秒时间,但是在插⼊时,数据库同样会进⾏截断操作
向表tmp4中插⼊值’101112’,111213,’0’,107010,SQL语句如下:
⾸先删除表中的数据:
DELETE FROM tmp4;
向表中插⼊数据:
INSERT INTO tmp4 values('101112'),(111213),( '0');
再向表中插⼊数据:
INSERT INTO tmp4 values ( 107010);
可以看到,在插⼊数据时,MySQL给出了⼀个警告提⽰信息,使⽤SHOW WARNINGS;查看警告信息,如下所⽰:
show warnings;
可以看到,第⼆次在插⼊记录的时候,数据超出了范围,原因是107010的分钟部分超过了60,分钟部分是不会超过60的,查看结果:
SELECT * FROM tmp4;
由结果可以看到,’101112’被转换为10:11:12;111213被转换为11:12:13;’0’被转换为00:00:00;107010因为是不合法的值,因此插⼊00:00:00。
也可以使⽤系统⽇期函数向TIME字段列插⼊值。
向tmp4表中插⼊系统当前时间,SQL语句如下:
⾸先删除表中的数据:
DELETE FROM tmp4;
向表中插⼊数据:
INSERT INTO tmp4 values (CURRENT_TIME) ,(NOW());
查看结果:
SELECT * FROM tmp4;
由结果可以看到,获取系统当前的⽇期时间插⼊到TIME类型列,都是系统当前的⽇期时间值。
DATE类型数据测试案例:
创建数据表tmp5,定义数据类型为DATE的字段d,向表中插⼊“YYYY-MM-DD”和“YYYYMMDD”字符串格式⽇期,SQL语句如下:
⾸先创建表tmp5:
CREATE TABLE tmp5(d DATE);
向表中插⼊“YYYY-MM-DD”和“YYYYMMDD”格式⽇期:
开发区php培训INSERT INTO tmp5 values('1998-08-08'),('19980808'),('20101010');
查看插⼊结果:
SELECT * FROM tmp5;
可以看到,各个不同类型的⽇期值都正确的插⼊到了数据表中。DATE占⽤3字节,可显⽰的⽇期范围为“1000-01-01”到“9999-12-31”。
向tmp5表中插⼊“YY-MM-DD”和“YYMMDD”字符串格式⽇期,SQL语句如下:
⾸先删除表中的数据:
DELETE FROM tmp5;
向表中插⼊“YY-MM-DD”和“YYMMDD”格式⽇期:
INSERT INTO tmp5 values ('99-09-09'),( '990909'), ('000101') ,('111111');
查看插⼊结果:
SELECT * FROM tmp5;
对于插⼊的最后⼀个值,为什么不是1911-11-11或者2111-11-11之类的值呢?可以看到数据库将其视为离现在最近的⼀个年份,这可能不是⼀个⾮常好的习惯。如果没有特别的条件和要求,还是在输⼊时按照标准的“YYYY-MM-DD HH:MM:SS”格式来进⾏。
向tmp5表中插⼊YY-MM-DD和YYMMDD数字格式⽇期,SQL语句如下:
⾸先删除表中的数据:
DELETE FROM tmp5;
向表中插⼊YY-MM-DD和YYMMDD数字格式⽇期:
INSERT INTO tmp5 values (99-09-09),(990909), ( 000101) ,( 111111);
查看插⼊结果:
SELECT * FROM tmp5;
可以看到,插⼊的第⼀条数据有⼀个警告,但是插⼊成功,插⼊的值变为了0000-00-00
向tmp5表中插⼊系统当前⽇期,SQL语句如下:
⾸先删除表中的数据:
DELETE FROM tmp5;
向表中插⼊系统当前⽇期:
INSERT INTO tmp5 values( CURRENT_DATE() ),( NOW() );
查看插⼊结果:
SELECT * FROM tmp5;
CURRENT_DATE只返回当前⽇期值,不包括时间部分;NOW()函数返回⽇期和时间值,在保存到数据库时,只保留了其⽇期部分。
MySQL允许“不严格”语法:任何标点符号都可以⽤作⽇期部分之间的间隔符。例如,’98-11-31’、’98.11.31’、
’98/11/31’和’98@11@31’是等价的,这些值也可以正确的插⼊到数据库。
DATETIME数据类型测试案例:
创建数据表tmp6,定义数据类型为DATETIME的字段dt,向表中插⼊'YYYY-MM-DD HH:MM:SS”和'YYYYMMDDHHMMSS”字符串格式⽇期和时间值,SQL语句如下:
oops能恢复几步⾸先创建表tmp6:
CREATE TABLE tmp6( dt DATETIME );
target的属性向表中插⼊“YYYY-MM-DD HH:MM:SS”和“YYYYMMDDHHMMSS”格式⽇期:
INSERT INTO tmp6 values('1998-08-08 08:08:08'),(''),('');
查看插⼊结果:
SELECT * FROM tmp6;
可以看到,各个不同类型的⽇期值都正确的插⼊到了数据表中。DATETIME占⽤8字节,是占⽤空间最多的⼀种⽇期类型。它既显⽰了⽇期,同时也显⽰了时间。其可以表达的⽇期范围为“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。
在MySQL 5.5版本之前(包括5.5版本),数据库的⽇期类型不能精确到微秒级别,任何的微秒数值都会被数据库截断。
不过MySQL数据库提供了函数MICROSECOND来提取⽇期中的微秒值
向tmp6表中插⼊“YY-MM-DD HH:MM:SS”和“YYMMDDHHMMSS”字符串格式⽇期和时间值,SQL语句如下:
⾸先删除表中的数据:
DELETE FROM tmp6;
向表中插⼊“YY-MM-DD HH:MM:SS”和“YYMMDDHHMMSS”格式⽇期:
INSERT INTO tmp6 values('99-09-09 09:09:09'),(''),('');
查看插⼊结果:
SELECT * FROM tmp6;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论