数据类型

1.数据类型分类

在这里插入图片描述

2.数值类型

在这里插入图片描述

2.1tinyint
默认为有符号,其他类型一样
2.2bit

bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。

注意:

  1. bit字段在显示时,是按照ASCII码对应的值显示。
  2. 如果我们只存放0或1,这时可以定义bit(1)。这样可以节省空间。
    案例:
mysql> create table zm ( id int, a bit(8));
Query OK, 1 row affected (0.01 sec)

mysql> insert into zm values(10, 10);
Query OK, 1 row affected (0.01 sec)

mysql> insert into zm values(65, 65);
Query OK, 1 row affected (0.01 sec)

ysql> select * from zm; 
+------+------+ 
| id     | a  | 
+------+------+
| 10    |     |
| 65    | A   |
+------+------+

2.3 decimal
decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
注意:
decimal和float很像,但是有区别:
float和decimal表示的精度不一样,float表示的精度大约为7位,decimal中的m最大位65,d最大为30,如果d被省略,默认为0,若m被省略默认为10
2.4 字符串类型
2.4.1 char
char(L) : 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
2.4.2 varchar
varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节
注意:

  • varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。
  • varchar(L) :L到底是多大,和表的编码密切相关:
  • utf8:L最大值为65532/3 = 21844
  • gbk: L最大值为65532/2 = 32766

char和varchar的比较:
在这里插入图片描述
什么时候选择定长,什么时候选择变长

  • 若数据长度始终不变,如:身份证,手机号…使用char
  • 若数据长度随其他因素变化,如:姓名,地址,用varchar
  • 定长的磁盘空间比较浪费,但效率高
  • 变长的磁盘空间比较节省,但效率低

2.5日期和时间类型:
常用的:

  • datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从1000到9999,占用八字节
  • date:日期 ‘yyyy-mm-dd’,占用三字节
  • timestamp:时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用四字节
mysql> create table birthday (t1 date, t2 datetime, t3 timestamp);
Query OK, 0 rows affected (1.88 sec)

mysql> insert into birthday(t1,t2) values('1997-7-1','2008-8-8 12:1:1');
Query OK, 1 row affected (0.25 sec)

mysql> select * from birthday;
+------------+---------------------+---------------------+
| t1         | t2                  | t3                  |
+------------+---------------------+---------------------+
| 1997-07-01 | 2008-08-08 12:01:01 | 2019-08-13 09:37:56 |
+------------+---------------------+---------------------+
1 row in set (0.26 sec)

2.6 enum和set
enum查询采用数字查询
例如:

mysql> create table votes( 
-> username varchar(30), 
-> hobby set('登山','游泳','篮球','武术'),
 -> gender enum('男','女')); 
 Query OK, 0 rows affected (0.02 sec)

insert into votes values('雷锋', '登山,武术', '男');
 insert into votes values('Juse','登山,武术',2); 
 查找为女生的人
 select * from votes where gender=2;
 +----------+-----------+--------+
| username | hobby     | gender |
+----------+-----------+--------+
| Juse     | 登山,武术 | 女     |
+----------+-----------+--------+
1 row in set (0.51 sec)

查找所有喜欢登山的人:
mysql> select * from votes where hobby='登山';
+----------+-------+--------+
| username | hobby | gender |
+----------+-------+--------+
| 张三     | 登山  | 男     |
+----------+-------+--------+
1 row in set (0.03 sec)

不能查询出所有爱好为登山的人
集合查询用find_in_set函数:
find_in_set(sub,str_list):如果sub在str_list中,则返回下标;若不在返回0,str为用逗号分隔的字符串

mysql> select find_in_set('a','a,b,c');
+--------------------------+
| find_in_set('a','a,b,c') |
+--------------------------+
|                        1 |
+--------------------------+
1 row in set (0.16 sec)

mysql> select find_in_set('d','a,b,c');
+--------------------------+
| find_in_set('d','a,b,c') |
+--------------------------+
|                        0 |
+--------------------------+
1 row in set (0.00 sec)

查询爱好登山的人

mysql> select * from votes where find_in_set('登山',hobby);
+----------+-----------+--------+
| username | hobby     | gender |
+----------+-----------+--------+
| 雷锋     | 登山,武术 | 男     |
| Juse     | 登山,武术 | 女     |
| 张三     | 登山      | 男     |
+----------+-----------+--------+
3 rows in set (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值