當前位置:
首頁 > 知識 > MySQL資料庫之數據類型

MySQL資料庫之數據類型

小夥伴們

我們繼續搞資料庫

今天分享的是資料庫的數據類型

首先來看一下圖

MySQL資料庫的數據類型主要是分為數值型,日期時間型以及字元串型這三個大類,看著很多覺得記不住很麻煩是不是,不用擔心其實現在我們常用的就那麼幾個

整數型的 tinyint 和 bigint

小數型的 decimal

日期時間類型 datetime 和 timestamp

字元串型是 char 和 varchar

這樣看起來是不是就沒有那麼多了呢?

數值型

整數型

是否有符號,可在定義時使用unsigned標識,

如果沒有,不寫就認為是有符號。

我們直接上手試驗一下

先把建表的語句寫好

create table tb1_int(

a tinyint unsigned,

b tinyint

);

insert into tb1_int values(255, 127);

insert into tb1_int values(256, 128);

insert into tb1_int values(0, 128);

創建一個表向表中插入數據

第一條語句插入成功

第二條語句

失敗 :a列的值超出範圍

第三條

失敗:b列的值超出範圍

整數型就驗證這一個例子哈!

在這邊給大家擴充一個小知識點!

zerofill

通過規定數據的顯示寬度,達到統一顯示的目的

語句:

alter table tb1_int add c tinyint(3) zerofill;

insert into tb1_int values(0, 127, 1);

insert into tb1_int values(0, 127, 5);

insert into tb1_int values(0, 127, 7);

alter table tb1_int add c tinyint(3) zerofill;

類型(M), M表示顯示的最小寬度

效果:

java中的 boolean 類型, 在資料庫中可以用 bit, tinyint(1),來存儲

0對應false 1 對應true

整數類型中最常用的是:

tinyint , int 對應 java 中的 int

bigint 對應 java 中的 long

小數類型

語句:

單精度

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

雙精度

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

利用 M,D 控制數值範圍;支持無符號;可以zerofill;

其中 M 表示總的位數,D 表示小數位數。此 M,D 可以控制保存的範圍。

例:Float(10,2) -{}.99 到 {}.99

如果省略 M,D 會根據計算機硬體進行處理。

單精度,M大約為7左右

而雙精度,M大約為15左右

科學計數法

-3.{}E+38 = -3.{} * 10^38

123.456 在磁碟上是如何存儲的?

0.{} * 10^3 實際上存儲的是: {} 3

這樣存儲會出現了精度的丟失。

我們來驗證一下

create table num_1(

a float,

b double

);

insert into num_1 values({}.0{}, {}.0{});

效果:

Float 精度為6位左右。 Double的精度為16位左右。

因為 float 和 double 會出現精度的丟失,所以在精確度要求高的場所用 decimal。

Decimal 定點數型

定點數

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]

其中M表示總的位數,D表示小數位數。此M,D可以控制保存的範圍。

M,D省略,默認為10,0;

create table num_2(

send_money decimal(6,2)

);

insert into num_2 values(9999.99);

效果:

所以要是小夥伴們以後要存儲一些涉及到錢的數據要記得 用Decimal

decimal 對應 java BigDecimal java.math.BigDecimal

日期時間類型

這邊就不一一介紹了

Timestamp 時間戳:存儲的時候是整型,顯示的時候是日期類型

至於為什麼時間戳的最大值是2038年小夥伴們自己去百度吧!蠻有意思的呢!

create table dt_1(

a datetime,

b timestamp

);

insert into dt_1 values("2017-11-04 19:20:00", now());

效果:

datetime 對應 Java Date

字元類型

blob 對應 java byte[]

enum 對應 java 里 Enum 枚舉類型

set 對應 java里 set 類型

char varchar text : 對應 Java String

Char & varchar

CHAR 和 VARCHAR 類型聲明的長度表示你想要保存的最大字元數。

Char(5) Varchar(5)

Char :

定長字元串,保存時如果字元串長度不夠,則後邊補足空字元串;但是在讀取到數據是,會截取後邊所有的字元串。

Varchar :

變長字元串。在保存字元串時,同時保存該字元串的長度,小於255採用一個位元組保存,否則採用二個位元組保存。

text 就是儲存長文本類型

char、varchar 和 text 總結:

經常變化的欄位用 varchar

知道固定長度的用 char

超過255字元的只能用 varchar 或者 text

能用 varchar 的地方不用 text

我們再來看一下枚舉類型 裡面實際上存儲的就是整形,例如我們規定存儲 boy和 girl 裡面實際存儲的是1和2

create table s_8(

gender enum("boy", "girl")

);

insert into s_8 values("girl");

insert into s_8 values("boy");

insert into s_8 values("other");

效果:

在枚舉類型中我們只能插入寫好的內容

set是一個集合類型!

create table s_6(

hobby set("A", "B", "C")

);

insert into s_6 values("A");

insert into s_6 values("B,C");

效果:

在 set 類型我們可以多選

blob 是存儲的是二進位類型,圖片 文件 視頻 音頻都可以用這個存儲,但在實際應用中我們一般會把這些東西存在文件伺服器中,所以用的很少,我們知道有這個就可以了!

設計數據類型要考量:

1.使用最精確的類型,佔用最少的空間。

(現在考慮的少了因為磁碟便宜了)

2 還應該考慮到相關語言處理方便性。

像我們用得是 Java 語言,要考慮使用在Java中有對應類的類型

3 考慮移值的兼容性。

我們現在用 MySQL 來存儲數據,萬一要把數據移到 oracle 資料庫呢!

上次留言說想知道 decimal 的夥伴

現在知道了嗎?

今天就到這兒了


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java吧 的精彩文章:

基礎面向對象三大特性:封裝、繼承、多態
JDBC通俗易懂簡單的操作增、刪、改、查

TAG:java吧 |