mysql数据类型
目录:
常见信息种类
字符类型
数值类型
日期时间类型
枚举类型
常见信息种类
数值型: 体重,身高,成绩,工资等
字符型:姓名,地址,工作单位等
枚举型:兴趣爱好,性别,专业等
日期时间型:出生日期,注册时间
字符类型
char(10):
定长–不够字符个数时在右边用空格补齐
最大字符255字符
字符个数超出时,无法写入数据
varchar(10):
变长–根据实际字符大小,分配存储空间
字符个数超出时,无法写入数据
text 或者 blob :
大文本类型
字符数大于65535个字符时使用
一般用不到
1.char 占用空间大 但是读取速度快
2.varchar 占用空间小 但是读取速度慢
mysql> create database xt character set utf8mb4; //创建一个支持中文的库
Query OK, 1 row affected (0.00 sec)
mysql> create table xt.student( //创建一个表
-> 姓名 char(5),
-> 性别 char(2),
-> 通讯地址 varchar(50));
Query OK, 0 rows affected (0.33 sec)
mysql> desc xt.student; //查看表类型
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 姓名 | char(5) | YES | | NULL | |
| 性别 | char(2) | YES | | NULL | |
| 通讯地址 | varchar(50) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
//我们的性别输入的是两个字符,所以输入字符过多会报错
mysql> insert into xt.student values('xt','泰国人妖','北京');
ERROR 1406 (22001): Data too long for column '性别' at row 1
mysql> insert into xt.student values('xt','男','北京');
Query OK, 1 row affected (0.14 sec)
数值类型
tinyint : 微小整数
有符号范围 -128~127
无符号范围 0~255
smallint : 小整数
有符号范围 -32768~32767
无符号范围 0~65535
mediumint : 中整数
有符号范围 -2(23次方)~2(23次方)-1
无符号范围 1~2(24次方)-1
int : 大整数
有符号范围 -2(31次方)~2(31次方)-1
无符号范围 0~2(32次方)-1
bigint : 极大整数
有符号范围 -2(63次方)~2(63次方)-1
无符号范围 0~2(64次方)-1
float : 单精度浮点数 (M,D)
有符号范围-3.402823466E+38到-1.175494351E-38
无符号范围 1.175494351E-38到3.402823466E+38
double : 双精度浮点数(M,D)
有符号范围:-1.7976931348623157E+308到-2.2250738585072014E-308
无符号范围:2.2250738585072014E-308到1.7976931348623157E+308
1. M 为小数的总长度 D 为小数位数 所以M应该大于D 否则会出错
2.使用 unsigned 可以设置为无符号存储,
有符号存储支持负数,无符号存储支持的范围更大一点
mysql> create table xt.num( //创建一个表
-> id tinyint,
-> age int(3),
-> score float(4,2));
Query OK, 0 rows affected (0.38 sec)
mysql> desc xt.num //查看数据类型
-> ;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | tinyint(4) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
| score | float(4,2) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
//这里我们可以看到,第一个tinyint类型 支持-128-127 所以值输入128过大 错误
//第三个设置小数位为2位 虽然我们输了三位没有报错,但是我们查看表发现还是两位,并自动四舍五入
mysql> insert into xt.num values(128,20,88.35);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
mysql> insert into xt.num values(100,120,88.35);
Query OK, 1 row affected (0.14 sec)
mysql> insert into xt.num values(100,20,88.356);
Query OK, 1 row affected (0.13 sec)
mysql> select * from xt.num;
+------+------+-------+
| id | age | score |
+------+------+-------+
| 100 | 120 | 88.35 |
| 100 | 20 | 88.36 |
+------+------+-------+
2 rows in set (0.00 sec)
日期时间型
datetime 日期时间类型
范围1000-01-01 00:00:00:000000~9999-12-31 23:59:59.999999
timestamp日期时间类型
范围1970-01-01 00:00:00:000000~2038-01-19 03:14:07.999999
时间格式:YYYYmmddhhmmss,或者"YYYY-mm-dd hh:mm:ss"
Y 年
m 月
d 日
h 时
m 分
s 秒
date 日期类型
范围0001-01-01~9999-12-31
默认使用4位数字表示,当只用2位数字负值时:
0169自动识别为20012069
7099自动识别为19701999
year 年份类型
范围 1901-2155
time时间类型
范围 HH:MM:SS
时间函数:mysql服务内置命令
curtime() 获取当前的系统时间
curdate() 获取当前的系统日期
now() 获取当前系统日期和时间
year() 获取年
month 获取月
day 获取日
date 获取日期
time 获取时间
加’’ 或者 “” 可以用"YYYY-mm-dd hh:mm:ss"不加东西用YYYYmmddhhmmss
mysql> create table xt.stuinfo(
-> name char(5),
-> birth datetime,
-> start year,
-> begin time,
-> end time);
Query OK, 0 rows affected (0.41 sec)
mysql> insert into xt.stuinfo values('xt',20011010121200,2018,0800,1800);
Query OK, 1 row affected (0.39 sec)
mysql> insert into xt.stuinfo values('xt',"2018-01-01 01:01:00",2018,"08:00:00","18:00:00");
Query OK, 1 row affected (0.12 sec)
枚举类型
enum 单选
格式:字段名 enum(值1,值2,值3…)
set 多选
格式:字段名 enum(值1,值2,值3…)
1.单选选择一个值,多选可选择一个或多个值
2.字段值必须在列表里选择
比如 创建一个表 性别是enum单选 爱好是set是多选 可以选多个选项
mysql> create table xt.tea(
-> name char(5),
-> 性别 enum('boy','girl'),
-> 爱好 set('男','女','book','music'));
Query OK, 0 rows affected (0.28 sec)
//插入表数据 姓名xt 性别 boy 爱好 女 跟music
mysql> insert into xt.tea values('xt','boy','女,music');
Query OK, 1 row affected (0.17 sec)