版权声明:请多多指教 https://blog.csdn.net/arctic_fox_cn/article/details/82391225
MySQL学习–2
一、数据类型(MySQL版本:5.7.23-0ubuntu0.18.04.1 )
数值、字符、时间
数值又包括整型,浮点数
整数包括:tinyint-> 数值很小一个字节,smallint->两个字节,mediumint->三个字节,int->四个字节,big->8个字节;
mysql> describe number;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| n_tiny | tinyint(4) | NO | | NULL | |
| n_small | smallint(6) | NO | | NULL | |
| n_mediumint | mediumint(9) | NO | | NULL | |
| n_int | int(11) | NO | | NULL | |
| n_big | bigint(20) | NO | PRI | NULL | auto_increment |
+-------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
/*这些类型值的默认大小根据系统而定,例如:int(11)表示MySQL显示11位数包括符号,但是前提条件是在4个字节内可以表示的数值范围,显示位数不影响实际大小;
----
无符号整数类型,范围增大 -128~127 无符号为 0~255
整数类型有一个专属属性 auto_increment 没有特殊要求顺序自动填充值,如果改变某处值下一个按照上一个顺序填充,一般搭配 primary key 例如n_big列
*/
浮点数包括:float ->四个字节,double->8个字节。
float # 多了一个精度问题,是小数点后显示多少位数,同整形
double#
/*
float double 类型的无符号类型不是范围增大,而是从0.0开始
*/
字符就是单个字符和字符串
字符类型分类:
char[(M)] #固定长度M,可省去为0,作为占位所用,如果所采集值不足M个向右添加空格,但是查找时不涉及空格问题
varchar(M) #可变长度,当不够M个时,那就不够吧,不可省略M,总的长度为M+1还有一个错误位
#M最大
#例如:
mysql> describe class;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| name | varchar(20) | NO | | NULL | |
| age | int(10) unsigned | NO | | NULL | |
| sex | enum('male','female') | NO | | NULL | |
| birth | date | NO | | NULL | |
+-------+-----------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
blob #binary large object 可以存储二进制文件 例如 图片
text #非二进制字符串 存储范围大
tinyblob,tinytext,mediumblob,mediumtext,longblob,longtext#类似与整形tiny等 主要是存储范围不同
enum #枚举 很有用的 在预先定义好的enum中选择数据,如果插入时没有选择enum类型中的值会报错,除了"" 和null 而且enum类型可以当作数值类型处理 最大可以表示 65525
set #最大 64位->8字节 而且AN!位位位!存储
#例如:
mysql> describe s;
+-------+---------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------------+------+-----+---------+-------+
| e | enum('X','XL','L','XXl','XXXL') | YES | | NULL | |
+-------+---------------------------------+------+-----+---------+-------+
1 row in set (0.00 sec)
-----
mysql> insert into s values("X"),("XL"),("L"),("XXL"),("XXXL");
Query OK, 5 rows affected (0.03 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> select e ,e+0,e+1,bin(e+0) from s;
+------+------+------+----------+
| e | e+0 | e+1 | bin(e+0) |
+------+------+------+----------+
| X | 1 | 2 | 1 |
| XL | 2 | 3 | 10 |
| L | 3 | 4 | 11 |
| XXl | 4 | 5 | 100 |
| XXXL | 5 | 6 | 101 |
+------+------+------+----------+
#因为第一位要存储错误码,所以e开始为1
+-------+-------------------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------------------------------------------------+------+-----+---------+-------+
| s | set('alibaba','baidu','meituan','facebook','gooogle') | YES | | NULL | |
+-------+-------------------------------------------------------+------+-----+---------+-------+
mysql> select s ,s+0,s+1,bin(s+0) from h;
+----------+------+------+----------+
| s | s+0 | s+1 | bin(s+0) |
+----------+------+------+----------+
| alibaba | 1 | 2 | 1 |
| gooogle | 16 | 17 | 10000 |
| facebook | 8 | 9 | 1000 |
| baidu | 2 | 3 | 10 |
| meituan | 4 | 5 | 100 |
+----------+------+------+----------+
5 rows in set (0.00 sec)
#从上面可以的到的是 google 为什么表示为16呢,因为按位算,google在我们定义的时候顺序为5,所以第5位填充1,其余没有则为0,所以google 10000 ->16