日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql数据类型之整数型的一些细节你get到了吗?

發布時間:2024/9/27 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql数据类型之整数型的一些细节你get到了吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mysql數據類型之整數型篇

數據類型概述

Mysql里的數據類型主要有數值型(整形、浮點型)、時間類型、字符串類型、JSON類型、坐標類型、混合類型(整數或字符串)。

數值型范圍表格

數據類型

存儲位數

數據范圍

tinyint

1

有符號: -128–127? 無符號: 0–255

smallint

2

有符號: -32768–32767 無符號: 0–65535

mediumint

3

有符號: -8388608–8388607 無符號: 0–16777215

int

4

有符號:-2147483648–2147483647 無符號: 0–4294967295

bigint

8

有符號:-2^63?- 2^63-1 無符號: 0–2^64-1

decimal(M, N)

1–29

M 1到65 N 0到38,M大于等于N

float

4

總位數65(其中小數部分38)

double

8

總位數65(其中小數部分38)

bit(M)

1-8

1-64 bits

例如:

1 decimal(5,2) 即小數點后面是2位,總5位(整數部分3位),所以范圍是-999.99-999.99。

2 針對float不能用等于或者不等于比較符。

3 bit類型的存儲字節與其位數有關,FLOOR((M+7)/8) 字節。

范圍代碼驗證

CREATE TABLE tb_datatype( smallintcol smallint signed ) -- 1 僅有smallint時等價于smallint signed 符號類型 -- 2 指定unsigned時數據存的是正整數 -- 3 以有符號smallint為例驗證數據范圍(-32768到32767) INSERT INTO tb_datatype VALUES(-32768) INSERT INTO tb_datatype VALUES(32767) SELECT * FROM tb_datatype-- 1 反例驗證smallint范圍 INSERT INTO tb_datatype VALUES(-32769) > 1264 - Out of range value for column 'smallintcol' at row 1INSERT INTO tb_datatype VALUES(32768) > 1264 - Out of range value for column 'smallintcol' at row 1 > 時間: 0s-- 2 反例驗證decimal范圍 #2.1 整數部分最多65位 ALTER TABLE tb_datatype ADD decimalcol decimal(66,29) > 1426 - Too big precision 66 specified for 'decimalcol'. Maximum is 65 > 時間: 0s-- #2.2 小數點最多38位 ALTER TABLE tb_datatype ADD decimalcol decimal(65,39) > 1425 - Too big scale 39 specified for 'decimalcol'. Maximum is 38 > 時間: 0s

數值類型的屬性

設置顯示位數

在數值類型定義時指定顯示的寬度(位數)M。

注意:這里的M是用于顯示的,并不能限制數值類型的存儲范圍。比如我們定義了字段smallintcol2并指定它的顯示寬度是3,但我們也可以存超過3位數的數字。

ALTER TABLE tb_datatype ADD smallint(3) UPDATE tb_datatype SET SMALLINTcol2 = 9999 WHERE id=1 ; UPDATE tb_datatype SET SMALLINTcol2 = 99 WHERE id=2 ;

設置零填充(ZEROFILL)

數值顯示寬度M是和ZEROFILL結合一起使用的,即如果實際存儲的數值比定義的位數M小則左邊用”0”填充。比如我們定義了字段smallintcol3的顯示寬度M是3,并且是ZEROFILL的。

ALTER TABLE tb_datatype ADD smallintcol3 smallint(3) ZEROFILL UPDATE tb_datatype SET SMALLINTcol3 = 9999 WHERE id=1 ; UPDATE tb_datatype SET SMALLINTcol3 = 99 WHERE id=2 ;

此時我們可以看到當99存進去時,顯示的是三位的”099”,當實際存儲位大于指定的寬度M時照常顯示。

注意事項

1 表達式或者UNION對屬性為ZEROFILL的字段”免疫”,即還是當成普通的數值類型。詳見下例:

SELECT * FROM tb_datatype WHERE SMALLINTcol3 < 100SELECT SMALLINTcol3 FROM tb_datatype WHERE id = 2 UNION SELECT 111 結果為 99 111

2 如果指定ZEROFILL則mysql數據庫系統自動加上UNSIGNED屬性。
3 ZEROFILL 屬性會被遺棄,建議用其它方法替換,比如LPAD,見下例;

SELECT LPAD('99',3,'0')

有符號類型

有符號類型屬性是指定存儲的都是正整數即不能是負的。

ALTER TABLE tb_datatype ADD smallintcol4 smallint UNSIGNEDUPDATE tb_datatype SET SMALLINTcol4 = 1999 WHERE id=1 > Affected rows: 1 > 時間: 0.331s-- 插入負整數時報超出數據范圍的錯。 UPDATE tb_datatype SET SMALLINTcol4 = -99 WHERE id=2 > 1264 - Out of range value for column 'smallintcol4' at row 2 > 時間: 0s

自增 AUTO_INCREMENT

字段自增(AUTO_INCREMENT)即指定字段的內容由數據庫來維護其值和增幅(步長),默認值是1,增幅為1。

alter table tb_datatype add column seq int auto_increment not null, add primary key(seq);

此時我們可以看到seq自動有了值1和2,因為當前表有2行。

注意事項

1 不能將NULL插入含自增的字段,插入失敗后自增對應的系統序列(sequence)會+1(步長)。

2 一般把0插入到自增字段里,除非打開NO_AUTO_VALUE_ON_ZERO模式(不建議)。

3 自增列不支持負數。

4 ?檢查(CHECK)約束里不能使用含自增的字段。

5 自增屬性一般只針對正整數類型的字段,FLOAT和DOUBLE類型的字段將不再支持。

完整代碼

SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;-- ---------------------------- -- Table structure for tb_datatype -- ---------------------------- DROP TABLE IF EXISTS `tb_datatype`; CREATE TABLE `tb_datatype` (`id` int(11) NULL DEFAULT NULL,`smallintcol` smallint(6) NULL DEFAULT NULL,`smallintcol2` smallint(3) NULL DEFAULT NULL,`decimalcol` decimal(65, 38) NULL DEFAULT NULL,`smallintcol3` smallint(3) UNSIGNED ZEROFILL NULL DEFAULT NULL,`smallintcol4` smallint(5) UNSIGNED NULL DEFAULT NULL,`seq` int(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`seq`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;-- ---------------------------- -- Records of tb_datatype -- ---------------------------- INSERT INTO `tb_datatype` VALUES (1, -32768, 9999, NULL, 9999, 1999, 1); INSERT INTO `tb_datatype` VALUES (2, 32767, 99, NULL, 099, NULL, 2);SET FOREIGN_KEY_CHECKS = 1;

總結

以上是生活随笔為你收集整理的Mysql数据类型之整数型的一些细节你get到了吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。