講講mysql表設計要注意啥

2021-09-25 16:42:31 字數 1360 閱讀 9002

然後insert給price列乙個資料為1234567.23,你會發現顯示出來的資料變為1234567.25,精度失準!

問題6:時間欄位用什麼型別?

回答:此題無固定答案,應結合自己專案背景來答!把理由講清楚就行!

(1)varchar,如果用varchar型別來存時間,優點在於顯示直觀。但是坑的地方也是挺多的。比如,插入的資料沒有校驗,你可能某天就發現一條資料為2013111的資料,請問這是代表2023年1月11日,還是2023年11月1日? 其次,做時間比較運算,你需要用str_to_date等函式將其轉化為時間型別,你會發現這麼寫是無法命中索引的。資料量一大,是個坑!

(2)timestamp,該型別是四個位元組的整數,它能表示的時間範圍為1970-01-01 08:00:01到2038-01-19 11:14:07。2023年以後的時間,是無法用timestamp型別儲存的。 但是它有乙個優勢,timestamp型別是帶有時區資訊的。一旦你系統中的時區發生改變,例如你修改了時區

set time_zone = "america/new_york";
你會發現,專案中的該字段的值自己會發生變更。這個特性用來做一些國際化大專案,跨時區的應用時,特別注意!

(3)datetime,datetime儲存占用8個位元組,它儲存的時間範圍為1000-01-01 00:00:00 ~ 9999-12-31 23:59:59。顯然,儲存時間範圍更大。但是它坑的地方在於,他儲存的是時間絕對值,不帶有時區資訊。如果你改變資料庫的時區,該項的值不會自己發生變更!

(4)bigint,也是8個位元組,自己維護乙個時間戳,表示範圍比timestamp大多了,就是要自己維護,不大方便。

問題1:為什麼一定要設乙個主鍵?

回答:因為你不設主鍵的情況下,innodb也會幫你生成乙個隱藏列,作為自增主鍵。所以啦,反正都要生成乙個主鍵,那你還不如自己指定乙個主鍵,在有些情況下,就能顯式的用上主鍵索引,提高查詢效率

問題2:主鍵是用自增還是uuid?

回答:肯定答自增啊。innodb 中的主鍵是聚簇索引。如果主鍵是自增的,那麼每次插入新的記錄,記錄就會順序新增到當前索引節點的後續位置,當一頁寫滿,就會自動開闢乙個新的頁。如果不是自增主鍵,那麼可能會在中間插入,就會引發頁的**,產生很多表碎片!。

問題3:主鍵為什麼不推薦有業務含義?

回答:有如下兩個原因

mysql表設計注意事項

1 主鍵,最好使用業務主鍵,採用時間 伺服器編號 序號,進行生成,如果沒有特殊要求,直接使用資料庫自增序列值即可。主要是達到查詢效率快,不用走二級索引 2 對於業務資料,如果需要對多個字段建立索引,且這幾個字段查詢的時候都是一起作為條件的,可以設計為聯合索引。建索引的時候,將篩選力度大的屬性放前面,...

使用臨時表時要注意

1 jdbc一定要加上事務控制,否則當多執行緒執行時,有可能使用的是同乙個connection,那麼在乙個thread裡建立的 臨時表還沒等被刪除,另乙個thread又要建立同名的臨時表。這是就會報異常,說這個臨時表已經存在了。2 在同乙個transaction裡,不要使用同名的臨時表,否則同樣會報...

MYSQL 需要注意的常規問題

1 資料庫模式有四個正規化 1nf 2nf 3nf bcnf 2 儲存過程和函式的區別 儲存過程是使用者定義的一串行sql語句的集合,設計特定表或其他物件的任務,使用者可以呼叫儲存過程。函式通常是資料庫已定義的方法,它接收引數並返回某種型別的值,並且不涉及特定使用者。3 資料庫事務 資料庫事務是作為...