目录
[timestamp :](#timestamp :)
INT类型
分为tinyint,.smallint,mediumint,int,bigint类型,在此处只介绍tinyint的细节,其他int的类型都是相似的,只需要注意类型的范围大小和有无符号即可。
tinyint类型
占用空间:1字节
类型大小范围
有符号时:-128 ~ 127
无符号时:0 ~255
测试tinyint类型数据
cpp
#新建一张表用来测试,其中tinyint为有符号类型
mysql> create table t1(
-> id tinyint);
#插入测试数据--插入最小值-128
mysql> insert into t1 values(-128);
#插入测试数据--插入小于最小值的值-129
mysql> insert into t1 values(-129);
#插入测试数据--插入最大值127
mysql> insert into t1 values(127);
#插入测试数据--插入超过最大极限的值128
mysql> insert into t1 values(128);
显示:当测试插入-128和插入127时,显示数据插入成功:
使用sql语句查询表中所有数据
cpp
#显示指定表中的所有数据
select* from 表名
显示:
说明插入的数据只要在有符号tinyint规定的范围内,是可以插入成功的,那么来看看不合法的数据插入:插入测试数据-129和128
**MySQL直接提示数据过大,不允许我们此次插入。**换句话说,MySQL保证了自己表中数据的可靠性和合法性。
无符号的tinyint大家可以下来自行测试;
float类型
语法:float [(m,d)] [unsigned]:M指定显示长度,d指定小数位数,占4个字节空间
范围:例子:当m=4,d=2时,范围大小为[-99.99 ~ 99.99],float类型范围和用户自定义的m,d强关联
测试:
测试正常数据范围的数据
sql语句
cpp
#插入负数的临界值
insert into test_float_tb values( 2,-99.99);
#插入整数的临界值
insert into test_float_tb values( 2,99.99);
#查看表中数据
select* from test_float_tb;
显示:说明数据在-99.99~99.99中的数据都能插入,只需注意建立表时的float类型设置的长度和精度即可
测试插入范围超过临界值的数据:
bash
#插入100
insert into test_float_tb(1,100.00);
#插入999
insert into test_float_tb(2,999.00);
显示:说明表会约束用户差插入的数据,保证数据可信
注意:关于精度问题:当插入的数据的小数位长度超过创建表时的float的约束,会四舍五入存储,保证小数精度与表的约束的精度相等!
测试float类型的四舍五入
cpp
#新建一张测试的表,float类型设置m=4,d=2
mysql> create table t2(
-> score float(4,2)
-> );
#插入测试数据77.556
insert into t2 values(77.556);
#插入测试数据80.0
insert into t2 values(80.0);
#测试插入数据79.99
insert into t2 values(79.994);
插入数据77.556后,显示数据插入成功,我们使用select* from t2查询一下表中的数据:
说明float类型会自动帮我们对查出指定精度的数据做四舍五入
float类型设置的d最大只能是8位,超过8位数据将会有缺失精度的风险!
cpp
#更改先前创建的t2表中的float精度
mysql> alter table t2 modify salary float(20,10);
#插入测试数据127834.12345678435
mysql> insert into t2 values(127834.12345678435);
使用select* from t2查看表中数据:
精度缺失!
decimal类型
特点:所见即所得,和float相比最大的特征就是不存在损失精度的问题(前提是保证用户新增的数据不溢出),其他用法基本一致
同样测试:
cpp
#创建表t4用来测试
mysql> create table t4(
-> salary decimal(8,8));
#插入测试数据127834.12345678435
mysql> insert into t4 values(127834.12345678435);
显示
说明使用decimal类型可以保证浮点数的精度不会缺失
字符串类型
char类型
char类型在MySQL中是一种固定长度的字符串类型,建表时定义长度,只允许长度范围内的字符串插入;注意!此处的长度指的是字符长度,而不是字节!与编码格式相关,此处采用utf8的格式
测试:
cpp
#新建表t5来测试char类型
mysql> create table t5( name char(2));
#插入字符数据'你好';
mysql> insert into t5 values('你好');
#插入字符数据'你好啊';
mysql> insert into t5 values('你好啊');
当插入2个字符'你好'时,MySQL允许插入,但是当插入'你好啊'时,此次插入被拦截
查一下t5中的内容:
varchar类型
很简单,就是一个可变长字符串类型,在用户设定的varchar范围内,会根据用户新增的字符串数据长度自动推导长度,但是不能超过建表时规定的varchar长度
测试:
cpp
#更新一下表的属性
mysql> alter table t5 modify name varchar(5);
#插入'晚上好'
mysql> insert into t5 values('晚上好');
#插入'晚上好吗?'
mysql> insert into t5 values('晚上好吗?');
显示插入成功:查一下:
溢出测试:
cpp
#插入数据'兄弟你好香啊!'
mysql> insert into t5 values('兄弟你好香啊!');
很显然不允许我们此次插入;
DATA类型:
常用的日期类型:
date类型
格式:日期 'yyyy-mm-dd' ,占用三字节
测试:
和上述的基本类型同样的测试方法,此处就不再赘述,唯一要注意的就是insert时注意日期的格式问题;
datetime
时间日期格式: 'yyyy - mm - dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节
测试:
和上述的基本类型同样的测试方法,此处就不再赘述,唯一要注意的就是insert时注意日期的格式问题,有空格隔开哦~;
timestamp :
时间戳,从 1970 年开始的 yyyy - mm - dd HH:ii:ss 格式和 datetime 完全一致,占用 四字节
测试:
cpp
#新建表t6来测试
mysql> create table t6(
-> id int,
-> time timestamp
-> );
#插入id
mysql> insert into t6 values(1,'2004-12-29 08:43:09');
先不更新数据查一次表中数据:
再次更新时,时间戳会自动更新;
timestamp类型的数据不用用户手动添加,会随着当前行的数据更新为自动更新;