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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章