1. 程式人生 > 資料庫 >mysql8.0.19基礎資料型別詳解

mysql8.0.19基礎資料型別詳解

mysql基礎資料型別

mysql常用資料型別概覽

![1036857-20170801181433755-146301178](D:\筆記\mysql\複習\1036857-20170801181433755-146301178.png)1. 數字:
 整型:tinyinit int bigint
 小數:
 float :在位數比較短的情況下不精準
 double :在位數比較長的情況下不精準
 0.000001230123123123
 存成:0.000001230000

 decimal:(如果用小數,則用推薦使用decimal)
 精準
 內部原理是以字串形式去存
 
2. 字串:
 char(10):簡單粗暴,浪費空間,存取速度快
 root存成root000000
 varchar:精準,節省空間,存取速度慢

 sql優化:建立表時,定長的型別往前放,變長的往後放
 比如性別 比如地址或描述資訊

 >255個字元,超了就把檔案路徑存放到資料庫中。
 比如圖片,視訊等找一個檔案伺服器,資料庫中只存路徑或url。

3. 時間型別:
 最常用:datetime
 
4. 列舉型別與集合型別

數值型別

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-HAIxWM9Z-1585063057990)(D:\筆記\mysql\複習\1036857-20170801181433755-146301178.png)]

1、整數型別

  • 整數型別:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
  • 作用:儲存年齡,等級,id,各種號碼等
整型型別測試
 預設是有符號的
mysql> create table t1(money tinyint); #注意,建立表時最後一個欄位後面不能有逗號,錯誤寫法mysql> create table t1(money tinyint,);

mysql> insert into t1 values(11);
Query OK,1 row affected (0.28 sec)

mysql> select * from t1;

mysql> insert into t1 values(-10);
Query OK,1 row affected (0.11 sec)

mysql> select * from t1;

mysql> insert into t1 values(-200);
Query OK,1 row affected,1 warning (0.10 sec)

mysql> select * from t1;

設定了資料型別,會有一個約束效果,只能表示自己範圍內的數

建立 無符號數值型別 的寫法:
mysql> create table t2(id tinyint unsigned);

2、浮點型

  • 浮點型別:float double
  • 作用:儲存薪資、身高、溫度、體重、體質引數等
測試
mysql> create table t3(id float(60,30)); # 60代表小數位+整數位總數
Query OK,0 rows affected (1.70 sec) # 30表示小數位最高30位

mysql> create table t4(id double(60,30));
Query OK,0 rows affected (0.88 sec)

mysql> create table t5(id decimal(60,30)); # decimal能夠儲存精確值的原因在於其內部按照字串儲存。
Query OK,0 rows affected (0.96 sec)

mysql> insert into t3 values(1.1111111111111111111111);
Query OK,1 row affected (0.13 sec)

mysql> insert into t4 values(1.1111111111111111111111);
Query OK,1 row affected (0.22 sec)

mysql> insert into t5 values(1.1111111111111111111111);
Query OK,1 row affected (0.09 sec)

mysql> select * from t3;
mysql> select * from t4;
mysql> select * from t5;
1.建立表 
create table t2(f1 float(5,2),f2 float,f3 double(5,f4 double);

float(5,2) 			保留兩位小數 並且四捨五入
double(5,2)
2.寫入資料		
insert into t2 values(5.2336,5.2336,5.336,5.2336);
3.查看錶中資料 	
select * from t2;
4.指定寫入資料
insert into t2(f2,f4) values(5.1783682169875975,5.1783682169875975);

insert into 表名(欄位1,欄位3) values (值1,值3);

1.建立t3表
create table t3(f1 float,d1 double,d2 decimal(30,20),d3 decimal);
2.查看錶結構
desc t3;
3.寫入資料 	
insert into t3 values(5.1783682169875975179,5.1783682169875975179,5.1783682169875975179);

int--------不約束長度,最多表示10位數

float(m,n)				m-----一共多少位 		 n-----小數部分多少位 

日期型別

  • 型別:DATE,TIME,DATETIME ,IMESTAMP,YEAR
  • 作用:儲存使用者註冊時間,文章釋出時間,員工入職時間,出生時間,過期時間等
mysql> create table t6(d1 year,d2 date,d3 datetime);
Query OK,0 rows affected (1.75 sec)

mysql> insert into t6 values(now(),now(),now());
Query OK,1 warning (0.12 sec)

mysql> select * from t6;

字串型別

char和varchar效能對比:
    以char(5)和varchar(5)來比較,加入我要存三個人名:sb,ssb1,ssbb2
    char:
      優點:簡單粗暴,不管你是多長的資料,我就按照規定的長度來存,5個5個的存,三個人名就會類似這種儲存:sb ssb1 ssbb2,中間是空格補全,取資料的時候5個5個的取,簡單粗暴速度快
      缺點:貌似浪費空間,並且我們將來儲存的資料的長度可能會參差不齊

    varchar:
      varchar型別不定長儲存資料,更為精簡和節省空間
      例如存上面三個人名的時候類似於是這樣的:sbssb1ssbb2,連著的,如果這樣存,請問這三個人名你還怎麼取出來,你知道取多長能取出第一個嗎? 
 
      varchar在存資料的時候,會在每個資料前面加上一個頭,這個頭是1-2個bytes的資料,這個資料指的是後面跟著的這個資料的長度,1bytes能表示2**8=256,兩個bytes表示2**16=65536,能表示0-65535的數字,所以varchar在儲存的時候是這樣的:1bytes+sb+1bytes+ssb1+1bytes+ssbb2,所以存的時候會比較麻煩,導致效率比char慢,取的時候也慢,先拿長度,再取資料。

      優點:節省了一些硬碟空間,一個acsii碼的字元用一個bytes長度就能表示,但是也並不一定比char省,看一下官網給出的一個表格對比資料,當你存的資料正好是你規定的欄位長度的時候,varchar反而佔用的空間比char要多。

Value	CHAR(4)	Storage Required	VARCHAR(4)	Storage Required
''	' '	4 bytes	''	1 byte
'ab'	'ab '	4 bytes	'ab'	3 bytes
'abcd'	'abcd'	4 bytes	'abcd'	5 bytes
'abcdefgh'	'abcd'	4 bytes	'abcd'	5 bytes
        
      缺點:存取速度都慢
      
    對於InnoDB資料表,內部的行儲存格式沒有區分固定長度和可變長度列(所有資料行都使用指向資料列值的頭指標),因此在本質上,使用固定長度的CHAR列不一定比使用可變長度VARCHAR列效能要好。因而,主要的效能因素是資料行使用的儲存總量。由於CHAR平均佔用的空間多於VARCHAR,因此使用VARCHAR來最小化需要處理的資料行的儲存總量和磁碟I/O是比較好的。
適合使用char:
	身份證號、手機號碼、QQ號、username、password、銀行卡號
適合使用varchar:
	評論、朋友圈、微博
1.建立表
create table t6(c1 char(1),v1 varchar(1),c2 char(8),v2 varchar(8));

2.寫入資料
insert into t6 values('alexq','alexq','alexq');
3.查詢表中資料
select * from t6;

列舉和集合型別

enum:	單選行為------列舉型別
	只允許從值集合中選取單個值,而不能一次取多個值
1.建立表
create table t8(id int,name char(18),gender enum('male','female'));
2.寫入資料
insert into t8 values(1,'alex','不詳'); ---------不詳無法寫入
3.查詢表中資料
select * from t8;
4.寫入資料
insert into t8 values(1,'male');-------------male可以寫入
5.查詢表中資料
select * from t8;
2.寫入資料
insert into t8 values(1,'female');------------female可以寫入
3.查詢表中資料
select * from t8;
set:	 
	多選行為
	可以**允許值集合中任意選擇1或多個元素進行組合**。對超出範圍的內容將不允許注入,而對重複的值將進行自動去重。
1.建立表
create table t9(id int,hobby set('抽菸','喝酒','洗腳','按摩','燙頭'));
2.寫入資料
insert into t9 values(1,'太白','燙頭,抽菸,喝酒,按摩‘);
3.查詢表中資料
select * from t8;
4.寫入資料
insert into t9 values(1,'大壯','洗腳,洗腳,按摩,打遊戲‘);
5.查詢表中資料
select * from t8;

總結

到此這篇關於mysql8.0.19-基礎資料型別的文章就介紹到這了,更多相關mysql8.0.19-基礎資料型別內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!