Mysql 常见规范与问题汇总

一. 使用规范

1.建表规范:

#切换库
USE database_name;

#创建tb_name表
DROP TABLE IF EXISTS tb_name;
CREATE TABLE tb_user (
id  bigint(20) NOT NULL AUTO_INCREMENT COMMENT '唯一Id(单表)' ,
user_id   bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户Id' ,
inserttime timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '插入时间',
updatetime timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
isactive tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态位:1-有效,0-无效',
PRIMARY KEY (id),
INDEX IDX_user_Id (UserId) USING BTREE COMMENT '用户Id索引',
INDEX IDX_inserttime (InsertTime) USING BTREE COMMENT '插入时间索引',
INDEX IDX_updatetime (UpdateTime) USING BTREE COMMENT '修改时间索引'
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='建表举例'
AUTO_INCREMENT=1;


2.修改多列数据类型
alter table tb_user modify column InsertTime timestamp(3) not null default CURRENT_TIMESTAMP,
                modify column UpdateTime timestamp not null default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;


3.日期毫秒
1)表示0位毫秒数
TIMESTAMP 与 DATETIME 表示:保留位毫秒数

2)表示3位与6位毫秒数
TIMESTAMP(3)与 DATETIME(3) 表示:保留3位毫秒数
TIMESTAMP(6)与 DATETIME(6) 表示:保留6位毫秒数

3)获取当前时间保留3位与6位毫秒数:
SELECT NOW(3) 或 SELECT CURRENT_TIMESTAMP(3);
SELECT NOW(6) 或 SELECT CURRENT_TIMESTAMP(6);
 

二. 常见问题汇总

1.on update CURRENT_TIMESTAMP 失效。

当update操作更新数据与数据完全一致时,CURRENT_TIMESTAMP 不会更新记录,比如:

id     status   upatetime

2      0         1934131111111111

结论:

执行更新sql时,updatetime不会改变:

update table set status =0 where id =2 

2.Sqlserver数据库datetime 转换Mysql后datetime毫秒值丢失问题。
原因:
a)Sqlserver数据库datetime类型默认带6位毫秒值,Mysql数据库datetime类型默认无毫秒值.
b)Sqlserver的datetime类型转Mysql的datetime类型时从而丢失了6位毫秒值。
解决方案:
Sqlserver的datetime 转Mysql后数据类型调整为:DATETIME(6) 或 TIMESTAMP(6)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cheneron

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值