MySQL——数据类型(二)

目录

一、日期与时间类型

1.1 date

1.2 datetime

1.3 timestamp

二、枚举和联合

2.1 enum

2.2 set

2.2.1 set 的插入

2.2.2 set 的查找


思维导图可以参考如下链接:

数据类型.xmind · 夜夜亮晶晶/MySQL - Gitee.com

一、日期与时间类型

1.1 date

日期 'yyyy-mm-dd' ,占用三字节

1.2 datetime

时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节

1.3 timestamp

时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节

按理说, timestamp 应该会自动更新,但是由于 MySQL 版本不一致,可能存在不设置即为NULL的情况,此时可以设置为 列名称 timestamp default current_timestamp

timestamp 列在 MySQL 中的行为可以根据其定义而有所不同:

  1. DEFAULT CURRENT_TIMESTAMP

    • 当插入一行数据时,如果没有显式提供 TIMESTAMP 列的值,该列将自动填充为插入操作的时间戳
  2. ON UPDATE CURRENT_TIMESTAMP

    • 当行中的其他列被更新时,TIMESTAMP 列会自动更新为当前时间戳。通常用于跟踪行的最后更新时间。
  3. DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

    • 这种配置结合了以上两种行为。插入时,TIMESTAMP 列会自动填充为插入时的时间戳;每次更新该行时,TIMESTAMP 列都会自动更新为当前时间戳。
  4. 无默认值

    • 如果没有设置默认值或 ON UPDATE 选项,插入或更新时如果未提供值,则该列可能会被填充为 NULL,或者保持原值

二、枚举和联合

枚举指的是 enum,联合指的是 set,你可能想知道二者的区别,其实 enum 可以看成单选题,set可以看作不定项选择题,第一个是多选一的关系,第二个是多选多或多选一的关系。

具体怎么使用,下面来一起看一下吧!

2.1 enum

枚举 —— 多选一的关系

首先进行建表:

mysql> create table test7(
    -> gender enum('男','女'),
    -> hobby set('篮球', '足球', '羽毛球', '游泳', '健身', '跑步'));
Query OK, 0 rows affected (0.04 sec)

插入数据:

mysql> insert test7 values('男','足球,羽毛球,游泳');
Query OK, 1 row affected (0.00 sec)

除了上述方法外,enum可以使用下标插入,下标从1开始:

2.2 set

2.2.1 set 的插入

可以看 enum 中插入数据时的方法,

注意:我在首次插入时选择了用C++字符串的格式,每个逗号后跟了一个空格再写数据,这样的格式是不行的! MySQL 的 SET 类型要求插入多个值时,不应将其视为一个完整的字符串,而是使用英文逗号分隔的独立值。

除此之外,enum可以使用下标插入,那么set呢?
set不是使用下标插入,set使用类似位图的概念,将数字转化成二进制,低位到高位依次是set中从前到后的元素:

  • 这里解释一下为什么向set中插入的是7但是表中却是篮球足球羽毛球: 首先,建表的时候使用的是 '篮球', '足球', '羽毛球', '游泳', '健身', '跑步' 共六项数据,对应的是比特位的前六位 7转化为二进制是0111,第三位为1对应set中前三个选项。所以是篮球足球羽毛球。

2.2.2 set 的查找

1.如果查找set中只含某项的数据,可以使用

select * from tb_name where column = 'enum类型';

2.如果查找set中含有某项的数据,就涉及到了函数的应用

使用 find_in_set(x, y) ,旨查找 x 是否在 y 集中,这里 x 只能是一个元素,如果查两个元素可以使用两个 find_in_set 用 and 连接


意为查找hobby集合中包含足球的数据

查找hobby集合中既包含足球也包含篮球的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值