目錄
1. tinyint 類型
2. bit 類型
3. 小數(shù)類型
1、float 類型
2、decimal 類型
3. 字符串類型
1、char 類型?
2、varchar 類型
4. 日期類型
5. enum和set
1、枚舉和集合類型語法
2、枚舉和集合類型的查找
6、find_in_set 函數(shù)
寫在最后:
1. tinyint 類型
我們以 tinyint 類型為例子,介紹 int 系列的類型。
1)我們先建一個(gè)簡單的表:
create table if not exists t1(
num tinyint
);
2)然后我們直接觀察三連查看一下這個(gè)表:
操作包含:
desc t1;
show tables;
show create table t1;
3)接下來就是插入操作:
tinyint 的取值范圍是 -128 ~ 127,我們現(xiàn)在就來插入一些值試試:
insert into t1 values (-128);
insert into t1 values (127);
insert into t1 values (0);
insert into t1 values (1);
insert into t1 values (-1);
然后我們再查看一下我們剛剛插入的數(shù)據(jù):
select * from t1;
如果我們插入一個(gè)不正確的值呢:
MySQL 會(huì)直接報(bào)錯(cuò),不讓我們插入。
接下來我們再建一個(gè)表,創(chuàng)建一個(gè)無符號的類型:
create table if not exists t1(
num tinyint unsigned
);
他的數(shù)據(jù)范圍是 0 ~ 255。
所以如果我們插入負(fù)數(shù)那肯定是會(huì)報(bào)錯(cuò)的:
2. bit 類型
1)老規(guī)矩,還是從建表開始:
create table if not exists t3(
id int,
online bit(1)
);
2)查看表:
3)插入數(shù)據(jù):
insert into t3 (id, online) values (123, 1);
insert into t3 (id, online) values (123, 2);
?插入了 2 就報(bào)錯(cuò)了,因?yàn)樗恢С忠粋€(gè)比特位:
我們可以修改他的值:
alter table t3 modify online bit(10);
我們可以看到這里修改成功了:
如果我們建表的時(shí)候不帶 bit 的大小,他默認(rèn)是 1 。
3. 小數(shù)類型
1、float 類型
?1)老樣子,從建表開始學(xué)習(xí):
create table if not exists t5(
id int,
salary float(4, 2)
);
2)查看一下表:
3)嘗試插入數(shù)據(jù):
insert into t5 (id, salary) values (1, 99.99);
insert into t5 (id, salary) values (1, 199.99);
float 類型的括號里面,第一個(gè)是他的位數(shù),我們選了 4 所以最多 4 位,
第二個(gè)是他的精度,我們選了 2 所以他的小數(shù)位最多 2 位。?
這里要注意的是,因?yàn)榫纫蟮氖莾晌?,所以整?shù)部分也只能是兩位。
這里又有一種和神奇的現(xiàn)象,就是精度部分是按照四舍五入進(jìn)行計(jì)算的,
所以 99.994 是允許插入這樣的數(shù)的。
我們在建表的時(shí)候,在 float 類型后面也可以加上 unsigned 讓他成為無符號。? ? ? ? ??
如果是默認(rèn)使用的 float ,就是自己設(shè)定,那他會(huì)有一定的精度損失。(大約是 7 位)
2、decimal 類型
在使用上面,他跟 float 類型一模一樣。
但是他對于 float 有著獨(dú)特的優(yōu)勢,這里我就直說了:
float 在存一些數(shù)字比較大的數(shù)的時(shí)候,會(huì)出現(xiàn)精度丟失的問題,
但是 decimal 存的是什么他就是什么。
3. 字符串類型
1、char 類型?
1)建表
create table if not exists t8(
id int,
name char(2)
);
2)插入數(shù)據(jù):
我們就能知道 char (2) 就是字符長度最長是 2。
注意:char 最大只能是 255。
2、varchar 類型
1)建表
create table if not exists t7(
id int,
name varchar(6)
);
2)插入
可以看到他最大能插入的長度是 6 。注意 varchar 最長支持 21845。
那 char 和 varchar 看起來一樣,他們的區(qū)別是什么?
char 是定長(一開始就開辟好),varchar 是變長的(用多少,開辟多少)
4. 日期類型
有三種常見的日期類型:date,datetime,timestamp
1)建表
create table if not exists t9(
t1 date,
t2 datetime,
t3 timestamp
);
2)查看表
時(shí)間戳有個(gè)默認(rèn)值,應(yīng)該是當(dāng)前的時(shí)間戳。
3)插入值
我們可以看到,這樣是插入成功的
4)查看插入結(jié)果
?t3 自動(dòng)顯示了當(dāng)前的時(shí)間。
5. enum和set
1、枚舉和集合類型語法
enum 枚舉值是單選類型
set 集合類型是多選類型
1)建表
create table if not exists t10(
username varchar(20),
sex enum('男', '女'),
hobby set('寫代碼', '睡覺', '打游戲')
);
2)查看表
3)插入值?
然后:
我們可以看到我們插入的值。
這里要注意的是,以后再 sex 位置插入時(shí),只能插入他給的枚舉值,而枚舉值從 1 開始,所以也可以通過插入枚舉值來代表我們插入的值,比如說插入 1 就是插入 男。?
我們再來試試能不能給集合插入多個(gè)值:
我們可以看到是可以插入多個(gè)值的。這里要注意的是,如果什么都不插入,就會(huì)是 ?NULL,如果插入 0 就會(huì)是一個(gè)空串,但是集合中的數(shù)字跟枚舉的不同,我們可以把這個(gè)集合中的 3 個(gè)值想象成一個(gè)二進(jìn)制 000,最低位代表的是第一個(gè)值,所以插入 1 就是 001,插入寫代碼:
如果插入的是 3 ,插入的就應(yīng)該是 寫代碼和睡覺:
可以看到確實(shí)是這樣。?
總結(jié):枚舉是下標(biāo),集合是位圖。
2、枚舉和集合類型的查找
?先來根據(jù)枚舉值查找:
select * from t10 where sex=1;
select * from t10 where sex=2;
集合其實(shí)也是這樣找:
select * from t10 where hobby=1;
select * from t10 where hobby=3;
select * from t10 where hobby=7;
那如果我們想要篩選出,比如說愛好有睡覺的都找出來,那該怎么找?
因?yàn)槲覀兩厦娴牟檎叶际菄?yán)格的匹配,有沒有更靈活的方式呢?
6、find_in_set 函數(shù)
實(shí)際上,在 MySQL 里面是可以執(zhí)行函數(shù)的:
find_in_set 只能查找一個(gè)元素是否在對應(yīng)的集合里面。
這樣我們就可以:
select * from t10 where find_in_set('睡覺', hobby);
?成功找到了。
寫在最后:
以上就是本篇文章的內(nèi)容了,感謝你的閱讀。
如果感到有所收獲的話可以給博主點(diǎn)一個(gè)贊哦。文章來源:http://www.zghlxwxcb.cn/news/detail-638019.html
如果文章內(nèi)容有遺漏或者錯(cuò)誤的地方歡迎私信博主或者在評論區(qū)指出~文章來源地址http://www.zghlxwxcb.cn/news/detail-638019.html
到了這里,關(guān)于【MySQL】MySQL 數(shù)據(jù)類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!