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 的夥伴
現在知道了嗎?
今天就到這兒了
※基礎面向對象三大特性:封裝、繼承、多態
※JDBC通俗易懂簡單的操作增、刪、改、查
TAG:java吧 |