mysql知識與細節整理

1.having和where的區別在於having是對聚合後的結果進行條件的過濾,而where是在聚合前就對記錄進行過濾,如果邏輯允許,我們儘可能用where先過濾記錄,這樣因為結果集減小,將對聚合的效率大大提高,最後再根據邏輯看是否用having進行再過濾.

2.左連線包含所有左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄.

3.union和union all的主要區別是union all是把結果集直接合併在一起,而union是將union all後的結果進行一次distinct,去除重複記錄後的結果.

4.列如果設定了寬度限制,如果插入大於寬度限制的值,會自動擴容,不會對插入資料的精度產生影響.

5.將列設定為無符號的時候,上限會是原來的兩倍,例如tinyint有符號的範圍是-128~ 127,而無符號範圍是0~255.

6.mysql的小數分為兩種,浮點數:float,double;定點數:decimal.浮點數和定點數都可以用型別名稱後加(M,D)的方式來進行表示一共顯示M位數字(整數 小數位),其中D位位於小數點後面,M和D又稱為精度和標度,如果浮點數不寫精度和標度,則會按照實際精度顯示,如果有精度和標度,則會自動將四捨五入後的結果插入,系統不會報錯,定點數如果不寫精度和標度,則會預設值decimal(10,0)來進行操作,並且如果資料超過了精度值和標度值,系統則會報錯.

7.

8.char和varchar的區別,在檢索的時候char會刪除尾部的空格,而varchar會保留.

9.運算子的優先順序有很多,通常情況我們都是用'()’將需要優先的操作括起來,另外比較常用的優先順序為not > and > or .