6-12 數據庫的數據類型
阿新 • • 發佈:2018-06-13
into 獲取 CA des sig table 隨著 query default
1,mysql 常用數據類型總結
#1. 數字: 整型:tinyinit int bigint 小數: float :在位數比較短的情況下不精準 double :在位數比較長的情況下不精準 0.000001230123123123 存成:0.000001230000 decimal:(如果用小數,則用推薦使用decimal) 精準 內部原理是以字符串形式去存 #2. 字符串: char(10):簡單粗暴,浪費空間,存取速度快 root存成root000000varchar:精準,節省空間,存取速度慢 sql優化:創建表時,定長的類型往前放,變長的往後放 比如性別 比如地址或描述信息 >255個字符,超了就把文件路徑存放到數據庫中。 比如圖片,視頻等找一個文件服務器,數據庫中只存路徑或url。 #3. 時間類型: 最常用:datetime #4. 枚舉類型與集合類型 enum 枚舉 set 集合
2,數值類型
整數類型:TINYINT SMALLINT MEDIUMINT INT BIGINT
作用:存儲年齡,等級,id,各種號碼等
======================================== tinyint[(m)] [unsigned] [zerofill] 小整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -128 ~ 127 無符號: ~ 255 PS: MySQL中無布爾值,使用tinyint(1)構造。 ======================================== int[(m)][unsigned][zerofill] 整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -2147483648 ~ 2147483647 無符號: ~ 4294967295 ======================================== bigint[(m)][unsigned][zerofill] 大整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -9223372036854775808 ~ 9223372036854775807 無符號: ~ 18446744073709551615
2.1 TINYINT小整數
如果規定 某字段為tinyint小整數類型;如果不指定默認是帶符號的小整數範圍是 -128~127之間。可以用unsigned規定不帶符號範圍為0~255.
2.2 int 整數類型後面的存儲是顯示寬度,而不是存儲寬度。
int的存儲寬度是4個Bytes,即32個bit,即2**32
無符號最大值為:4294967296-1
有符號最大值:2147483648-1
有符號和無符號的最大數字需要的顯示寬度均為10,而針對有符號的最小值則需要11位才能顯示完全,所以int類型默認的顯示寬度為11是非常合理的
最後:整形類型,其實沒有必要指定顯示寬度,使用默認的就ok。
2.3浮點型
定點數類型: DEC等同於DECIMAL
浮點類型:FLOAT DOUBLE
作用:存儲薪資、身高、體重、體質參數等
-------------------------FLOAT------------------- FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] #參數解釋:單精度浮點數(非準確小數值),M是整數部分總個數,D是小數點後個數。M最大值為255,D最大值為30 #有符號: -3.402823466E+38 to -1.175494351E-38, 1.175494351E-38 to 3.402823466E+38 #無符號: 1.175494351E-38 to 3.402823466E+38 #精確度: **** 隨著小數的增多,精度變得不準確 **** -------------------------DOUBLE----------------------- DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] #參數解釋: 雙精度浮點數(非準確小數值),M是整數部分總個數,D是小數點後個數。M最大值為255,D最大值為30 #有符號: -1.7976931348623157E+308 to -2.2250738585072014E-308 2.2250738585072014E-308 to 1.7976931348623157E+308 #無符號: 2.2250738585072014E-308 to 1.7976931348623157E+308 #精確度: ****隨著小數的增多,精度比float要高,但也會變得不準確 **** ====================================== --------------------DECIMAL------------------------ decimal[(m[,d])] [unsigned] [zerofill] #參數解釋:準確的小數值,M是整數部分總個數(負號不算),D是小數點後個數。 M最大值為65,D最大值為30。 #精確度: **** 隨著小數的增多,精度始終準確 **** 對於精確數值計算時需要用此類型 decaimal能夠存儲精確值的原因在於其內部按照字符串存儲。View Code
2.4 日期類型
DATE TIME DATETIME TIMESTAMP YEAR
作用:存儲用戶註冊時間,文章發布時間,員工入職時間,出生時間,過期時間
調用mysql自帶函數now()可以獲取當前時間;
註意事項:
============註意啦,註意啦,註意啦=========== #1. 單獨插入時間時,需要以字符串的形式加引號(""),按照對應的格式插入 #2. 插入年份時,盡量使用4位值 #3. 插入兩位年份時,<=69,以20開頭,比如50, 結果2050 >=70,以19開頭,比如71,結果1971 create table t12(y year); insert into t12 values (50),(71); select * from t12; +------+ | y | +------+ | 2050 | | 1971 | +------+
YEAR DATE TIME DATETIME
#創建t9表 mysql> create table t9(d date,t time,dt datetime); Query OK, 0 rows affected (0.06 sec) #查看表的結構 mysql> desc t9; +-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | d | date | YES | | NULL | | | t | time | YES | | NULL | | | dt | datetime | YES | | NULL | | +-------+----------+------+-----+---------+-------+ rows in set (0.14 sec) # 調用mysql自帶的now()函數,獲取當前類型指定的時間 如下結構 mysql> insert into t9 values(now(),now(),now()); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> select * from t9; +------------+----------+---------------------+ | d | t | dt | +------------+----------+---------------------+ | 2018-06-09 | 09:35:20 | 2018-06-09 09:35:20 | +------------+----------+---------------------+ row in set (0.00 sec)View Code
語法: YEAR YYYY(1901/2155) DATE YYYY-MM-DD(1000-01-01/9999-12-31) TIME HH:MM:SS(‘-838:59:59‘/‘838:59:59‘) DATETIME YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y) TIMESTAMP YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某時)
6-12 數據庫的數據類型