整数类型 INT
TINYINT SMALLINT MEDIUMINT BIGINT INT
1、bigint(2^64)
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号的范围是0到
18446744073709551615。一位为 8 个字节。
2、int(2^32)
一个正常大小整数。有符号的范围是-2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字),无符号的范围是0到4294967295。一位大小为 4 个字节。
int 的 SQL-92 同义词为 integer。
3、mediumint(2^24)
一个中等大小整数,有符号的范围是-8388608到8388607,无符号的范围是0到16777215。 一位大小为3个字节。
4、smallint(2^16)
一个小整数。有符号的范围是-2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据,无符号的范围是0到65535。一位大小为 2 个字节。MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。
5、tinyint(2^8)
有符号的范围是-128 - 127,无符号的范围是 从 0 到 255 的整型数据。一位大小为 1 字节。
整数类型测试:tinyint,int
LAB1:(int,tinyint的最大值)
1 创建一个表
mysql> create table test1(
tinyint_test tinyint,
int_test int
);
2.查询表结构
desc test1;
3.测试表
1 插入合法数值
mysql> insert into test1 values (111,111);
Query OK, 1 row affected (0.09 sec)
查询表内容
select * from test1
2插入非法数值
错误的示例:
mysql> insert into test1(tinyint_test) values(128);
ERROR 1264 (22003): Out of range value for column ‘tinyint_test’ at row 1
正确的示例:
mysql> insert into test1(tinyint_test) values(127);
TINYINT有符号型最大127
3 插入合法数值
mysql> insert into test1(int_test) values(2147483647);
Query OK, 1 row affected (0.05 sec)
4插入非法数值
mysql> insert into test1(int_test) values(2147483648);
ERROR 1264 (22003): Out of range value for column ‘int_test’ at row 1
INT有符号型最大2147483647
LAB2:(无符号unsigned)
数值无符号,就只能输入正值,不能输入负值
1 创建一个表
mysql> create table test2(
tinyint_test tinyint unsigned,
int_test int unsigned
);
Query OK, 0 rows affected (0.00 sec)
//约束条件unsigned限定只能存正值(无符号)
2.查看结构
desc est2;
3.测试表
1插入合法数据
mysql> insert into test2(tinyint_test) values(255);
Query OK, 1 row affected (0.06 sec)
2插入合法数据
mysql> insert into test2(int_test) values(2147483648);
Query OK, 1 row affected (1.87 sec)
3插入非法数据
mysql> insert into test2 values(-20,-20);
ERROR 1264 (22003): Out of range value for column ‘tinyint_test’ at row 1
mysql和mariadb不同。
mysql提示输入错误
mariadb会输入0到表中。
但结果是肯定的,无符号只能输入正值
LAB3:(整数型,长度可变)
插入大于INT宽度限制的值,仍然可以存储。
但不能超过上限2147483647
INT整形的宽度仅为显示宽度,不是限制。因此建议整形无须指定宽度。
字符型需要使用宽度
1.创建表
1 创建一个表
mysql> create table t1 (
id1 int,
id2 int(6)
);
2.查看结构
3.测试表
mysql> insert into t1 values(22,22222222);
Query OK, 1 row affected (0.01 sec)
LAB4:(零填充zerofill)
zerofill 自动填充0
1.创建表
mysql> create table t2 (
id1 int zerofill,
id2 int(6) zerofill
);
Query OK, 0 rows affected (0.05 sec)
zerofill
2.查看结构
3.测试表
mysql> insert into t2 values(2,2);
Query OK, 1 row affected (0.01 sec)
浮点数类型 FLOAT DOUBLE
1、变量类型不同
float属于单精度型浮点数du据。
double属于双精度型浮点数据。
2、指数范围不同
float的指数范围为-127~128。
double而double的指数范围为-1023~1024
float的范围为-2^128 ~ +2^127,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1023,也即-1.79E+308 ~ +1.79E+308。
作用:用于存储用户的身高、体重、薪水等
浮点数和定点数都可以用类型名称后加(M,D)的方式来表示,
(M,D)表示一共显示M位数字(总数位+小数位),
其中D位于小数点后面,M和D又称为精度和标度。
浮点数类型测试:float
三者的区别介绍
float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位,小数点占一位)
double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效位)
decimal:数字型,128bit,常用于银行帐目计算。(28个有效位)
LAB1:(浮点数float)
1.创建表
mysql> create table test4(float_test float(5,2));//一共5位,小数占2位,整数3位
Query OK, 0 rows affected (0.00 sec)
2.查看结构
3.测试表
3插入合法数据
mysql> insert into test4 values (10.2), (70.243), (70.246);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
4插入非法数据
mysql> insert into test4 values (1111.2);
ERROR 1264 (22003): Out of range value for column ‘float_test’ at row 1
LAB2:(精准小数decimal)
定点数在MySQL内部以字符串形式存储,比浮点数更精确,
适合用来表示货币等精度高的数据。
decimal在不指定精度时,默认的整数位为10,默认的小数位为0
1.创建表
mysql> create table test5(decimal_test decimal(5,2));
总长5位,小数占2位
2.查看结构
3.测试表
mysql> insert into test5 values (70.245);
Query OK, 1 row affected, 1 warning (0.05 sec)
注意有警告
超长部分不记录。会四舍五入
创建整数9位,小数5位的数据类型
时间和日期类型测试:
year、date、time、datetime、timestamp
作用:用于存储用户的注册时间,文章的发布时间,文章的更新时间,员工的入职时间等
LAB1:(日期,时间)
1.创建表
create table test_time(
d date,
t time,
dt datetime);
2.查看结构
3.测试表
mysql> insert into test_time values(now(),now(),now());
Query OK, 1 row affected, 1 warning (0.02 sec)
LAB2:(当前时间)
1.创建表
mysql> create table t(id timestamp);
Query OK, 0 rows affected (0.01 sec)
2.查看结构
3.测试表
mysql> insert into t values(null);
Query OK, 1 row affected (0.00 sec)
timestamp 该列插入空值时,会自动填入当前时间。
mysql> insert into t values (121112111211);
手动插入时间吗,以插入时间为准。年月日时分秒
LAB3:(年)
1.创建表
mysql> create table t5(born_year year);
Query OK, 0 rows affected (0.40 sec)
2.查看结构
3.测试表
mysql> insert into t5 values (12),(80);
观察年份的边界
字符串类型测试:CHAR、VARCHAR
1.创建表
create table vc (
v varchar(4),
c char(4));
2.查看结构
3.测试表
mysql> insert into vc values(‘a’,‘a’);
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into vc values('ab ','ab ');
Query OK, 1 row affected, 1 warning (0.00 sec)
5调动函数
mysql> select length(v),length© from vc;
length(v) 统计长度的函数
mysql> select concat(v,’=’), concat(c,’=’) from vc; //在后面加字符’=’,看的更清楚