1. 程式人生 > >為什麼DB的設計中要使用Long來替換掉Date型別?

為什麼DB的設計中要使用Long來替換掉Date型別?

這裡是修真院後端小課堂,每篇分享文從

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】

八個方面深度解析後端知識/技能,本篇分享的是:

【為什麼DB的設計中要使用Long來替換掉Date型別?】

【修真院java 小課堂】為什麼DB的設計中要使用Long來替換掉Date型別?

大家好,我是IT修真院深圳分院第12期的學員,一枚正直純潔善良的java程式設計師,今天給大家分享一下,修真院官網java任務1的深度思考-為什麼DB的設計中要用Long來替代Date型別?

(1)背景介紹

在對資料庫中的記錄進行操作的時候,需要牽涉到對時間資料的處理,如create_at,update_at等欄位,資料庫中有專門用於儲存時間的型別,date,還可以將型別設定為long型別,那麼兩者的有何差異?

(2)知識剖析

MySQL中的表示時間的型別

date:日期,佔用三個位元組,1000-01-01——9999-12-31

datetime:日期+時間,1000-01-01 00:00:00” 到“9999-12-31 23:59:59,佔用8個位元組,datetime型別適合用來記錄資料的原始的建立時間,因為無論你怎麼更改記錄中其他欄位的值,datetime欄位的值都不會改變,除非你手動更改它。

timestamp:日期+時間,佔用4個位元組,“19700101080001——20380119111407,timestamp型別適合用來記錄資料的最後修改時間,因為只要你更改了記錄中其他欄位的值,timestamp欄位的值都會被自動更新。

MySQL中的bigint型別

bignit,表示從-2^63到2^63-1(即從-9,223,372,036,854,775,808到 9,223,372,036,854,775,807)之間的整數,它佔用了八個位元組的儲存空間。

(3)常見問題

 

明明Date型別就該表示時間,為何要用bigint替代呢?

其實這個問題,網上意見也並不統一

一部分人的觀點:

儲存什麼型別的,就該用什麼型別

在這裡就是:既然要儲存時間,為何不用時間的型別呢?

(4)解決方案

 

1. 因為DATE有固定的格式,不同的地區有不同的時間表示方法,而且外國有夏令時與冬令時之分,非常麻煩

2. 其實使用BigInt也能較為清晰的表示時間

3. 大多數時候我們並不關心某一個時間點,而是發生一個動作後,需要的時間,BigInt非常方便做減法而不用轉化

(5)編碼實戰

 

(6)拓展思考

 

(7)參考文獻

【參考一】https://blog.csdn.net/boss_way/article/details/78358615

(8)更多討論

Q1:基於陣列的資料結構常見的有哪些?

A1:java中以陣列為基礎的最常見就是ArrayList了,一般查詢操作比較頻繁,並且元素可重複,並且不需要以key-value形式儲存的,都會選擇用ArrayList儲存資料。

Q2:什麼時候適合用陣列

A2:當索引是有意義的,比如一個班的學生,學號是對應一個學生(當然學號不能太大,比如1,2,3...)這時候用陣列比較適合。

Q3:除了陣列這種線性資料結構,還有哪些線性的資料結構?

A3:另外還有連結串列,棧,佇列。

(9)鳴謝

(10)結束語

今天的分享就到這裡啦,歡迎大家點贊、留言、轉發、拋磚~

 

 

PPT連結 視訊連結

更多內容,可以加入IT交流群565734203與大家一起討論交流

這裡是技能樹·IT修真院:https://www.jnshu.com,初學者轉行到網際網路的聚集地