1. 程式人生 > >6-12 數據庫的數據類型

6-12 數據庫的數據類型

into 獲取 CA des sig table 隨著 query default

1,mysql 常用數據類型總結

#1. 數字:
    整型:tinyinit  int  bigint
    小數:
        float :在位數比較短的情況下不精準
        double :在位數比較長的情況下不精準
            0.000001230123123123
            存成:0.000001230000

        decimal:(如果用小數,則用推薦使用decimal)
            精準
            內部原理是以字符串形式去存

#2. 字符串:
    char10):簡單粗暴,浪費空間,存取速度快
            root存成root000000
    
varchar:精準,節省空間,存取速度慢 sql優化:創建表時,定長的類型往前放,變長的往後放 比如性別 比如地址或描述信息 >255個字符,超了就把文件路徑存放到數據庫中。 比如圖片,視頻等找一個文件服務器,數據庫中只存路徑或url。 #3. 時間類型: 最常用:datetime #4. 枚舉類型與集合類型 enum 枚舉 set 集合

2,數值類型

整數類型:TINYINT SMALLINT MEDIUMINT INT BIGINT

作用:存儲年齡,等級,id,各種號碼等

========================================
        tinyint[(m)] [unsigned] [zerofill]

            小整數,數據類型用於保存一些範圍的整數數值範圍:
            有符號:
                -128127
            無符號:
~ 255

            PS: MySQL中無布爾值,使用tinyint(1)構造。



========================================
        int[(m)][unsigned
][zerofill] 整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -21474836482147483647 無符號: ~ 4294967295 ======================================== bigint[(m)][unsigned][zerofill] 大整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -92233720368547758089223372036854775807 無符號: ~ 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:59DATETIME

            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 數據庫的數據類型