Mysql 踩坑记录

Summary: Author: 张亚飞 | Read Time: 2 minute read | Published: 2022-01-13
Filed under Categories: LinuxTags: Note,

Mysql 踩坑记录

Mysql 默认 CURRENT_TIMESTAMP UPDATE 问题

Mysql 会将默认第一个非 NULLtimestamp 列设为 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

如下示例:

DROP TABLE IF EXISTS `meet_stutters`;
CREATE TABLE `meet_stutters`
(
    `id`         bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '记录ID',
    `app_key`    varchar(64)         NOT NULL COMMENT '应用Key',
    `rno`        varchar(64)         NOT NULL COMMENT '房间号',
    `sender`     varchar(64)         NOT NULL COMMENT '发送端',
    `receiver`   varchar(64)         NOT NULL COMMENT '接收端',
    `sno`        varchar(64)         NOT NULL COMMENT '流ID',
    `factor`     tinyint(3) UNSIGNED NOT NULL COMMENT '卡顿因素[0: 未知;1: 发送端帧率过低;2: 上行系统CPU占用过高;3: 下行系统CPU占用过高;4: 上行区域不匹配;5: 下行区域不匹配;6: 上行RTT丢包率过高;7: 下行RTT丢包率过高]',
    `media`      tinyint(3) UNSIGNED NOT NULL COMMENT '媒体类型[0: 默认,1: 音频,2: 视频]',
    `start_at`   timestamp           NOT NULL COMMENT '卡顿开始时间',
    `end_at`     timestamp           NOT NULL COMMENT '卡顿截止时间',
    `duration`   int(10) UNSIGNED    NOT NULL DEFAULT 0 COMMENT '卡顿时长,单位秒',
    `created_at` timestamp           NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_at` timestamp           NULL     DEFAULT NULL COMMENT '更新时间',
    `deleted_at` timestamp           NULL     DEFAULT NULL COMMENT '删除时间',
    PRIMARY KEY (`id`),
    KEY `idx_end_at` (`end_at`) USING BTREE
) DEFAULT CHARSET = utf8mb4 COMMENT ='卡顿因素';

查询已建表

show create table meet_stutters;
CREATE TABLE `meet_stutters` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '记录ID',
    `app_key` varchar(64) NOT NULL COMMENT '应用Key',
    `rno` varchar(64) NOT NULL COMMENT '房间号',
    `sender` varchar(64) NOT NULL COMMENT '发送端',
    `receiver` varchar(64) NOT NULL COMMENT '接收端',
    `sno` varchar(64) NOT NULL COMMENT '流ID',
    `factor` tinyint(3) unsigned NOT NULL COMMENT '卡顿因素[0: 未知;1: 发送端帧率过低;2: 上行系统CPU占用过高;3: 下行系统CPU占用过高;4: 上行区域不匹配;5: 下行区域不匹配;6: 上行RTT丢包率过高;7: 下行RTT丢包率过高]',
    `media` tinyint(3) unsigned NOT NULL COMMENT '媒体类型[0: 默认,1: 音频,2: 视频]',
    `start_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '卡顿开始时间',
    `end_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '卡顿截止时间',
    `duration` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '卡顿时长,单位秒',
    `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
    `deleted_at` timestamp NULL DEFAULT NULL COMMENT '删除时间',
    PRIMARY KEY (`id`),
    KEY `idx_end_at` (`end_at`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='卡顿因素'

可以看到 start_at 设置为 NOT NULL 后,默认加了 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 属性


Comments

Cor-Ethan, the beverage → www.iirii.com