SQL 整數型別小結

2021-08-07 16:25:45 字數 1580 閱讀 8406

使用整數資料的精確數字資料型別。 

bigint 

從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型資料(所有數字)。儲存大小為 8 個位元組。 

p.s. bigint已經有長度了,在mysql建表中的length,只是用於顯示的位數。

另外,bigint最大位數是19位,在mysql中,預設length為20,即最大顯示寬度為20,比最大值位數還要大1,也就是可以顯示所有位的數字。同樣的,int最大值是10位,預設寬度就是11.

int 

從 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型資料(所有數字)。儲存大小為 4 個位元組。int 的 sql-92 同義字為 integer。 

smallint 

從 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型資料。儲存大小為 2 個位元組。 

tinyint 

從 0 到 255 的整型資料。儲存大小為 1 位元組。 

注釋 在支援整數值的地方支援 bigint 資料型別。但是,bigint 用於某些特殊的情況,當整數值超過 int 資料型別支援的範圍時,就可以採用 bigint。在 sql server 中,int 資料型別是主要的整數資料型別。 

在資料型別優先次序表中,bigint 位於 smallmoney 和 int 之間。 

只有當引數表示式是 bigint 資料型別時,函式才返回 bigint。sql server 不會自動將其它整數資料型別(tinyint、smallint 和 int)提公升為 bigint。 

int(m) 在 integer 資料型別中,m 表示最大顯示寬度。在 int(m) 中,m 的值跟 int(m) 所佔多少儲存空間並無任何關係。和數字位數也無關係 int(3)、int(4)、int(8) 在磁碟上都是占用 4 btyes 的儲存空間。

「顯示寬度」:

資料庫在設計表時都有乙個屬性——length。

對於字元型別而言,這就規定了該列的最大字元數(固長)或缺省字元長度(變長)。

對於數字型別,它的意義就沒有那麼大了,稱之為「顯示寬度」,乙個謎之名字。

對於這個顯示寬度,網上也是眾說紛紜,但是有用的說辭沒見幾個。

下面總結幾點吧:

1、數字型別列的數值範圍是在規定它的數字型別時就已經定下了的,跟顯示寬度沒有任何關係。

2、int可以顯示2開關的10位數字,如果故意把顯示寬度設定為1,那麼可以告訴你,該列數值不會受影響,顯示的數值也不會被擷取!

說到這裡可能有些蒙*,那這個所謂的「顯示寬度」對於數字型別有啥意義麼?

該可選顯示寬度規定用於顯示寬度小於指定的列寬度的值時從左側填滿寬度。 

當結合可選擴充套件屬性zerofill使用時, 預設補充的空格用零代替。例如,對於宣告為int(5) zerofill的列,值4檢索為00004。當然如果屬性不是zerofill,就不會有0來填補,值4檢索還是4.

請注意如果在整數列儲存超過顯示寬度的乙個值,當mysql為複雜聯接生成臨時表時會遇到問題,因為在這些情況下mysql相信資料適合原列寬度(還沒實際沒過,有興趣的同學可測試下,然後記得分享哦)。

SQL使用小結

1.如果你希望使用selcet top語句,並且還要附帶where條件,那麼條件中的列就得是合適的索引,如聚集索引 復合索引裡的主列 等,同時,where條件裡也要盡量避開使用函式,or,判斷null等會引起全部掃瞄的語句,不然執行的是全表掃瞄。2.通過設定statistics我們可以檢視執行sql...

sql問題小結

1.不要使用不含有條件的語句,比如select from tablename,要加上where條件,並且 條件中滿足此表的所建立的索引 2.在加上條件的時候最好按照索引順序 3.盡量不使用not in,not exists 這樣的條件 4.在條件索引欄位上不要加上表示式,特別注意隱式轉換,比如cus...

sql知識小結

查詢產品表中所有有訂單的產品資訊,包括編號,名稱 其實就是看看產品表中哪些產品有訂單 select distinct p.p id,p.p name from t product p inner join t order o on p.p id o.p id order by p id order ...