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)

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