欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL常見(jiàn)數(shù)據(jù)類型知識(shí)點(diǎn)舉例詳解

 更新時(shí)間:2025年02月11日 09:59:53   作者:冧軒在努力  
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)中各種數(shù)據(jù)類型,包括整數(shù)類型、浮點(diǎn)數(shù)類型、定點(diǎn)數(shù)類型、字符串類型、日期類型、時(shí)間類型、enum類型和set類型,每種類型都有其特定的用途和特性,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

1.整數(shù)類型

整數(shù)類型默認(rèn)都是有符號(hào)整數(shù)

類型名稱字節(jié)數(shù)類型說(shuō)明
tinyint1帶符號(hào)的范圍-128127,無(wú)符號(hào)范圍0255
smallint2帶符號(hào)的范圍-2^15 ~ 2^15 - 1,無(wú)符號(hào) 2^16 - 1
mediumint3帶符號(hào)的范圍-2^23 ~ 2^23 - 1,無(wú)符號(hào) 2^24 - 1
int4帶符號(hào)的范圍-2^31 ~ 2^31 - 1,無(wú)符號(hào) 2^32 - 1
bigint8帶符號(hào)的范圍-2^63 ~ 2^63 - 1,無(wú)符號(hào) 2^64 - 1

整數(shù)類型的可選屬性有三個(gè):

  • M : 表示顯示寬度,M的取值范圍是(0, 255)。例如,int(6):當(dāng)數(shù)據(jù)寬度小于6位的時(shí)候在數(shù)字前面需要用字符填滿寬度。該項(xiàng)功能需要配合“ ZEROFILL ”使用,表示用“0”填滿寬度,否則指定顯示寬度無(wú)效。
  • UNSIGNED : 無(wú)符號(hào)類型(非負(fù)),所有的整數(shù)類型都有一個(gè)可選的屬性UNSIGNED(無(wú)符號(hào)屬性),無(wú)符號(hào)整數(shù)類型的最小取值為0。所以,如果需要在MySQL數(shù)據(jù)庫(kù)中保存非負(fù)整數(shù)值時(shí),可以將整數(shù)類型設(shè)置為無(wú)符號(hào)類型。
  • ZEROFILL : 0填充,(如果某列是ZEROFILL,那么MySQL會(huì)自動(dòng)為當(dāng)前列添加UNSIGNED屬性),如果指定了ZEROFILL只是表示不夠M位時(shí),用0在左邊填充,如果超過(guò)M位,只要不超過(guò)數(shù)據(jù)存儲(chǔ)范圍即可。在 int(M) 中,M 的值跟 int(M) 所占多少存儲(chǔ)空間并無(wú)任何關(guān)系。 int(3)、int(4)、int(8) 在磁盤(pán)上都是占用 4 bytes 的存儲(chǔ)空間。也就是說(shuō),int(M),必須和UNSIGNED ZEROFILL一起使用才有意義。如果整數(shù)值超過(guò)M位,就按照實(shí)際位數(shù)存儲(chǔ)。只是無(wú)須再用字符 0 進(jìn)行填充

使用示例:

創(chuàng)建test表

create table test(num int(6) zerofill);

插入數(shù)據(jù):

insert into test values(22);

查看數(shù)據(jù):

select num from test;

結(jié)果:

mysql> select num from test
    -> ;
+--------+
| num    |
+--------+
| 000022 |
+--------+
1 row in set (0.00 sec)

2.浮點(diǎn)數(shù)類型

浮點(diǎn)數(shù)和定點(diǎn)數(shù)類型的特點(diǎn)是可以處理小數(shù) ,你可以把整數(shù)看成小數(shù)的一個(gè)特例,因此,浮點(diǎn)數(shù)和定點(diǎn)數(shù)的使用場(chǎng)景,比整數(shù)大多了。 MySQL支持的浮點(diǎn)數(shù)類型,分別是 FLOAT、DOUBLE、REAL

類型名稱字節(jié)數(shù)類型說(shuō)明
float4表示單精度浮點(diǎn)數(shù)
double8表示雙精度浮點(diǎn)數(shù)
real8/4默認(rèn)就是 double。如果把 SQL 模式設(shè)定為啟用“ REAL_AS_FLOAT ”,那么,MySQL 就認(rèn)為real 是 float

使用示例:

語(yǔ)法:

float[(m, d)] [unsigned] : M指定顯示長(zhǎng)度,d指定小數(shù)位數(shù),占用空間4個(gè)字節(jié)

小數(shù):有符號(hào)float(4,2)表示的范圍是-99.99 ~ 99.99,無(wú)符號(hào)的float(4,2)表示的范圍是0 ~ 99.99,MySQL在保存值時(shí)會(huì)進(jìn)行四舍五入

#創(chuàng)建表
create table tt6(id int, salary float(4,2));
#插入數(shù)據(jù)
insert into tt6 values(100, -99.99);
insert into tt6 values(101, -99.991); #多的這一點(diǎn)被拿掉了
#查詢數(shù)據(jù)
select id, salary from tt6;
#結(jié)果
+------+--------+
| id | salary |
+------+--------+
| 100 | -99.99 |
| 101 | -99.99 |
+------+--------+
2 rows in set (0.00 sec)

3.定點(diǎn)數(shù)類型

MySQL中的定點(diǎn)數(shù)類型只有 DECIMAL 一種類型。

語(yǔ)法:

decimal(M, D) [unsigned] : 定點(diǎn)數(shù)M指定長(zhǎng)度,D表示小數(shù)點(diǎn)的位數(shù)
  • decimal(5,2) 表示的范圍是 -999.99 ~ 999.99

  • decimal(5,2) unsigned 表示的范圍 0 ~ 999.99 decimal和float很像,但是有區(qū)別:float和decimal表示的精度不一樣

  • 0<=M<=65,0<=D<=30,D<M

DECIMAL(M,D)的最大取值范圍與DOUBLE類型一樣,但是有效的數(shù)據(jù)范圍是由M和D決定的。DECIMAL 的存儲(chǔ)空間并不是固定的,由精度值M決定,總共占用的存儲(chǔ)空間為M+2個(gè)字節(jié)。也就是說(shuō),在一些對(duì)精度要求不高的場(chǎng)景下,比起占用同樣字節(jié)長(zhǎng)度的定點(diǎn)數(shù),浮點(diǎn)數(shù)表達(dá)的數(shù)值范圍可以更大一些。定點(diǎn)數(shù)在MySQL內(nèi)部是以 字符串 的形式進(jìn)行存儲(chǔ),這就決定了它一定是精準(zhǔn)的。當(dāng)DECIMAL類型不指定精度和標(biāo)度時(shí),其默認(rèn)為DECIMAL(10,0)。當(dāng)數(shù)據(jù)的精度超出了定點(diǎn)數(shù)類型的精度范圍時(shí),則MySQL同樣會(huì)進(jìn)行四舍五入處理

建議:如果希望小數(shù)的精度高,推薦使用decimal

4.bit類型

基本語(yǔ)法:

bit[(M)] : 位字段類型。M表示每個(gè)值的位數(shù),范圍從1到64。如果M被忽略,默認(rèn)為1

使用示例:

#創(chuàng)建表
create table tt4(id int, a bit(8));
#插入數(shù)據(jù)
insert into tt4 values(10, 10);
#查詢數(shù)據(jù)
select * from tt4; 
#結(jié)果
+------+------+
| id | a 	  |
+------+------+
| 10 | 		  |
+------+------+
1 row in set (0.00 sec)
#發(fā)現(xiàn)很怪異的現(xiàn)象,a的數(shù)據(jù)10沒(méi)有出現(xiàn)

bit使用的注意事項(xiàng):

bit字段在顯示時(shí),是按照ASCII碼對(duì)應(yīng)的值顯示

#插入數(shù)據(jù)
insert into tt4 values(65, 65);
#查詢結(jié)果
select * from tt4;
+------+------+
| id | a      |
+------+------+
| 10 |    	  |
| 65 | A 	  |
+------+------+

5.字符串類型

5.1char和varchar類型

類型名稱類型說(shuō)明
char固定長(zhǎng)度字符串,L是可以存儲(chǔ)的長(zhǎng)度,單位為字符,最大長(zhǎng)度值可以為255
varchar可變長(zhǎng)度字符串,L表示字符長(zhǎng)度,最大長(zhǎng)度65535個(gè)字節(jié)

char語(yǔ)法:

char(L)

char使用示例:

#創(chuàng)建表
create table tt9(id int, name char(2));
#插入數(shù)據(jù)
insert into tt9 values(100, 'ab');
insert into tt9 values(101, '中國(guó)');
#查詢結(jié)果
mysql> select * from tt9;
+------+--------+
| id | name 	|
+------+--------+
| 100 | ab 		|
| 101 | 中國(guó) 	   |
+------+--------+

說(shuō)明:

  • char(2) 表示可以存放兩個(gè)字符,可以是字母或漢字,但是不能超過(guò)2個(gè), 最多只能是255

varchar語(yǔ)法:

varchar(L)

varchar使用示例:

#創(chuàng)建表
create table tt10(id int ,name varchar(6)); #表示這里可以存放6個(gè)字符
#插入數(shù)據(jù)
insert into tt10 values(100, 'hello');
insert into tt10 values(100, '我愛(ài)你,中國(guó)');
#查詢結(jié)果
mysql> select * from tt10;
+------+--------------------+
| id | name 				|
+------+--------------------+
| 100 | hello 				|
| 100 | 我愛(ài)你,中國(guó) 			|
+------+--------------------+

說(shuō)明:

關(guān)于varchar(len),len到底是多大,這個(gè)len值,和表的編碼密切相關(guān):

  • varchar長(zhǎng)度可以指定為0到65535之間的值,但是有1 - 3 個(gè)字節(jié)用于記錄數(shù)據(jù)大小,所以說(shuō)有效字節(jié)數(shù)是65532
  • 當(dāng)我們的表的編碼是utf8時(shí),varchar(n)的參數(shù)n最大值是65532/3=21844[因?yàn)閡tf中,一個(gè)字符占用3個(gè)字節(jié)],如果編碼是gbk,varchar(n)的參數(shù)n最大是65532/2=32766(因?yàn)間bk中,一個(gè)字符占用2字節(jié))

如何選擇定長(zhǎng)或變長(zhǎng)字符串?

  • 如果數(shù)據(jù)確定長(zhǎng)度都一樣,就使用定長(zhǎng)(char),比如:身份證,手機(jī)號(hào),md5
  • 如果數(shù)據(jù)長(zhǎng)度有變化,就使用變長(zhǎng)(varchar), 比如:名字,地址,但是你要保證最長(zhǎng)的能存的進(jìn)去。定長(zhǎng)的磁盤(pán)空間比較浪費(fèi),但是效率高。
  • 變長(zhǎng)的磁盤(pán)空間比較節(jié)省,但是效率低。
  • 定長(zhǎng)的意義是,直接開(kāi)辟好對(duì)應(yīng)的空間
  • 變長(zhǎng)的意義是,在不超過(guò)自定義范圍的情況下,用多少,開(kāi)辟多少

5.2日期類型和時(shí)間類型

常用的日期有如下三個(gè):

  • date :日期 ‘yyyy-mm-dd’ ,占用三字節(jié)
  • datetime 時(shí)間日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范圍從 1000 到 9999 ,占用八字節(jié)
  • timestamp :時(shí)間戳,從1970年開(kāi)始的 yyyy-mm-dd HH:ii:ss 格式和 datetime完全一致,占用四字節(jié)

使用示例:

#創(chuàng)建表
create table birthday (t1 date, t2 datetime, t3 timestamp);
#插入數(shù)據(jù)
insert into birthday(t1,t2,t3) values('1997-7-1','2024-12-1 12:1:1','2024-12-1 12:1:1');
#查詢結(jié)果
mysql> select * from birthday;
+------------+---------------------+---------------------+
| t1         | t2                  | t3                  |
+------------+---------------------+---------------------+
| 1997-07-01 | 2024-12-01 12:01:01 | 2024-12-01 12:01:01 |
+------------+---------------------+---------------------+
1 row in set (0.00 sec)

TIMESTAMP類型通常占用4個(gè)字節(jié)的存儲(chǔ)空間,而DATETIME類型則需要8個(gè)字節(jié)。TIMESTAMP類型的精度可以指定,范圍從0到6,默認(rèn)精度為6。這意味著TIMESTAMP可以存儲(chǔ)到微秒級(jí)別的時(shí)間戳,而DATETIME類型則不能指定精度

5.3enum和set類型

類型名稱類型說(shuō)明
enum:枚舉單選類型
set:集合多選類型
  • ENUM類型也叫作枚舉類型,ENUM類型的取值范圍需要在定義字段時(shí)進(jìn)行指定。設(shè)置字段值時(shí),ENUM類型只允許從成員中選取單個(gè)值,不能一次選取多個(gè)值。其所需要的存儲(chǔ)空間由定義ENUM類型時(shí)指定的成員個(gè)數(shù)決定。當(dāng)ENUM類型包含1~255個(gè)成員時(shí),需要1個(gè)字節(jié)的存儲(chǔ)空間;當(dāng)ENUM類型包含256~65535個(gè)成員時(shí),需要2個(gè)字節(jié)的存儲(chǔ)空間;ENUM類型的成員個(gè)數(shù)的上限為65535個(gè)

  • SET表示一個(gè)字符串對(duì)象,可以包含0個(gè)或多個(gè)成員,但成員個(gè)數(shù)的上限為 64 。設(shè)置字段值時(shí),可以取取值范圍內(nèi)的 0 個(gè)或多個(gè)值。當(dāng)SET類型包含的成員個(gè)數(shù)不同時(shí),其所占用的存儲(chǔ)空間也是不同的。SET類型在存儲(chǔ)數(shù)據(jù)時(shí)成員個(gè)數(shù)越多,其占用的存儲(chǔ)空間越大。注意:SET類型在選取成員時(shí),可以一次選擇多個(gè)成員,這一點(diǎn)與ENUM類型不同

使用示例:

有一個(gè)調(diào)查表votes,需要調(diào)查人的喜好, 比如(登山,游泳,籃球,武術(shù))中去選擇(可以多選),使用set類型,(男,女)[單選] ,使用enum類型

#創(chuàng)建表

create table votes(
username varchar(30),
hobby set('登山','游泳','籃球','武術(shù)'),
gender enum('男','女'));

#插入數(shù)據(jù)

insert into votes values('雷鋒', '登山,武術(shù)', '男');
insert into votes values('Juse','登山,武術(shù)',2);

#查詢

select * from votes where gender=2;

#查詢結(jié)果

+----------+---------------+--------+
| username | hobby 		   | gender |
+----------+---------------+--------+
| Juse 	   | 登山,武術(shù)       |女 	    |
+----------+---------------+--------+

假如表中有這些數(shù)據(jù),想查找所有喜歡登山的人:

+-----------+---------------+--------+
| username  | hobby         | gender |
+-----------+---------------+--------+
| 雷鋒       | 登山,武術(shù)      | 男     |
| Juse      | 登山,武術(shù)       | 女     |
| LiLei     | 登山           | 男     |
| LiLei     | 籃球           | 男     |
| HanMeiMei | 游泳           | 女     |
+-----------+---------------+--------+

使用如下查詢語(yǔ)句:

select * from votes where hobby='登山';

結(jié)果:

+----------+--------+--------+
| username | hobby  | gender |
+----------+--------+--------+
| LiLei    | 登山    | 男     |
+----------+--------+--------+

可以發(fā)現(xiàn)并不能查詢出所有喜歡登山的人

集合查詢使用find_ in_ set函數(shù):

語(yǔ)法:

find_in_set(sub,str_list) :如果 sub 在 str_list 中,則返回下標(biāo);如果不在,返回0,str_list 用逗號(hào)分隔的字符串

查詢愛(ài)好登山的人:

mysql> select * from votes where find_in_set('登山', hobby);
+----------+---------------+--------+
| username | hobby         | gender |
+----------+---------------+--------+
| 雷鋒 	  | 登山,武術(shù)      |  男     |
| Juse     | 登山,武術(shù)       | 女     |
| LiLei    | 登山           | 男     |
+----------+---------------+--------+

總結(jié) 

到此這篇關(guān)于MySQL常見(jiàn)數(shù)據(jù)類型的文章就介紹到這了,更多相關(guān)MySQL常見(jiàn)數(shù)據(jù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論