【MySQL】MySQL數據類型和運算符

MySQL數據類型和運算符

一、mysql的數據類型
1、整數系列
TINYINT:非常小的整數,類似於Java的byte類型
SMALLINT:小整數,類似於Java的short類型
MEDIUMINT:中整數,Java沒有對應
INT、INTEGER:整數,類似於Java的int類型
BIGINT:大整數,類似於Java的long類型

tinyint、smallint、mediumint、int 、integer、bigint

使用int數據類型:
(1)int,等價於int(11)
(2)int(M):M表示寬度,需要結合另外的兩個參數使用
unsigned:表示無符號,即沒有負數
zerofill:表示用0填充 zerofill 用0填充
例如:int(5) unsigned zerofill,表示每一個整數有5位數字,如果不足5位的在左邊用0湊夠5位
如果只是單獨int(5),那是不會起作用。
無論:int的寬度指定爲多少,在內存中都是佔4個字節,如果你的數字超過了int(5)也可以存儲 ,Java int 展四個字節的。

2、浮點小數
float:4個字節
double:8個字節

使用float和double時:
(1)float或double
(2)float(M,D),double(M,D):M表示總位數,D表示精度,即小數點幾位
例如:double(5,2)表示的數據範圍[-999.99,999.99],如果超過這個範圍會報錯。超過了存不了

3、定點小數,類似於Java的BigDecimal,底層使用字符串存儲
DECIMAL
DECIMAL(M,D)

4、日期時間類型
date:只能表示日期
time:表示時間
datetime:表示日期和時間
year:表示年
timestamp:時間戳,表示日期和時間

datetime和timestamp:
(1)timestamp實際存儲的毫秒值,顯示時,顯示根據毫秒值算出來一個本地化的日期時間
datetime就是存儲日期時間
(2)timestamp因爲存儲的毫秒值,所以在比較和計算時,效率比較高。
(3)datetime和timestamp可以表示的時間範圍是不同的

timestamp 實際存儲的毫秒值 顯示時 顯示根據豪秒值算出來一個本地化的日期時間timestamp

出生日期可以用 date 2028-09-01

精確秒 datetime timestamp

5、字符串
強調:mysql沒有單字符類型,只有字符串類型

char:定長字符串,長度[1,255]
char,char(1),長度爲1個字符
char(10),長度爲10個字符
varchar:變長字符串
varchar(M):必須指定M,這個M的意思是最長不超過M個字符
例如:varchar(20),最長不超過20個字符

text:長文本
一般用於存儲,文字比較多的,簡介等,又不經常檢索的信息

char和varchar
(1)內存佔用空間不同
char(M):M字符就佔M個字符的空間
例如:char(2) 實際存儲的是’男’,但是也是佔2個字符的位置,那一個空的字符存儲的是\u0000

定長

varchar:實際幾個字符 + 1/2個字節的空間
例如:varchar(20) 實際存儲的是’張三’,佔的2個字符 + 1/2個字節(用來記錄實際的字符個數的)

實際佔字符 1/2個字節用來記錄實際的字符個數的

(2)
varchar節省空間,但是每次存和取,都要數字符個數
char:看起來浪費空間,但是每次存和取,都按照固定的長度去處理的

建議:像身份證號,學號,郵編等定長的字符串使用char,例如:地址等使用變長的
現在mysql的版本對varchar優化的越來越快了,可以使用varchar。

6、位類型(瞭解)
二進制的位類型,BIT(M)類型允許存儲M位值。M範圍爲1~64,默認爲1

7、blob系列類型(瞭解)
BINARY和VARBINARY類型類似於CHAR和VARCHAR類型,但是不同的是,它們存儲的不是字符字符串,而是二進制串。所以它們沒有字符集。

binary、varbinary 存儲的二進制串

8、枚舉(ENUM)
多箇中選擇一個
9、集合
多箇中可以選擇多個

1、 MySQL數據類型

整型系列:xxxInt

int(M),必須和unsigned zerofill一起使用纔有意義

在這裏插入圖片描述

tinyint、smallint、mediumint、int、integer、bigint

浮點型系列:float,double

double(M,D):表示最長爲M位,其中小數點後D位

例如:double(5,2)表示的數據範圍[-999.99,999.99],如果超過這個範圍會報錯。

定點型系列:decimal

decimal(M,D):表示最長爲M位,其中小數點後D位

字符串類型:char,varchar(M),text

char如果沒有指定寬度,默認爲1個字符

varchar(M),必須指定寬度

日期時間類型:year, date, datetime, timestamp

注意一下每一種日期時間的表示範圍

在這裏插入圖片描述

其他類型:bit, xxBlob, 枚舉,集合等

+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| eid            | int(11)      | NO   | PRI | NULL    | auto_increment |
| ename          | varchar(20)  | NO   |     | NULL    |                |
| tel            | char(11)     | NO   |     | NULL    |                |
| gender         | char(1)      | YES  |     | 男        |                |
| salary         | double       | YES  |     | NULL    |                |
| commission_pct | double(3,2)  | YES  |     | NULL    |                |
| birthday       | date         | YES  |     | NULL    |                |
| hiredate       | date         | YES  |     | NULL    |                |
| job_id         | int(11)      | YES  |     | NULL    |                |
| email          | varchar(32)  | YES  |     | NULL    |                |
| mid            | int(11)      | YES  |     | NULL    |                |
| address        | varchar(150) | YES  |     | NULL    |                |
| native_place   | varchar(10)  | YES  |     | NULL    |                |
| did            | int(11)      | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

2、 MySQL運算符

1、算術運算符

加:+
減:-
乘:*
除:/   div(只保留整數部分)
模:%   mod

2、比較運算符

大於:>
小於:<
大於等於:>=
小於等於:>=
等於:=   不能用於null判斷
不等於:!=  或 <>
安全等於:<=>  可以用於null值判斷

3、邏輯運算符(建議用單詞,可讀性來說)

邏輯與:&& 或 and
邏輯或:|| 或 or
邏輯非:! 或 not
邏輯異或:^ 或 xor

4、範圍

區間範圍:between x  and  y
	    not between x  and  y
集合範圍:in (xxx)
	    not  in(xxx)

5、模糊查詢(只針對字符串類型,日期類型)

like 'xxx'
如果想要表示0~n個字符,用%
如果想要表示確定的1個字符,用_

like ‘%柳%’

like ‘菜雞_’

6、位運算符(很少使用)

左移:<<
右移:>>
按位與:&
按位或:|
按位異或:^

7、特殊的null值處理

#(1)判斷時
xx is null
xx is not null
xx <=> null

#(2)計算時
ifnull(xx,代替值)  當xx是null時,用代替值計算
/*一、運算符
1、算術運算符
+:加
-:減
*:乘
/:除   可以保留小數部分
div:除  如果整數與整數相除只保留整數部分
%:求餘數
mod:求餘數
*/
select 1+1;
select 1/2; #0.5
select 1 div 2; #0

/*
2、比較運算符
>:大於
<:小於
=:等於  注意區別,Java中是==,mysql中是=
>=:大於等於
<=:小於等於
!=:不等於
<>:不等於
<=>:安全等於  用於判斷null值的比較運算符
		null值的判斷,習慣上我們用is null 和is not null
*/
#查詢薪資大於20000元的員工
select * from t_employee where salary > 20000;

#查詢所有男員工
select * from t_employee where gender = '男';
select * from t_employee where gender != '女';
select * from t_employee where gender <> '女';

#查詢獎金比例commision_pct是null的員工
select  * from t_employee where commission_pct <=> null;
select  * from t_employee where commission_pct is null;

/*
3、邏輯運算符
&&和and:邏輯與
	兩個條件同時滿足
||和or:邏輯或
	兩個條件滿足任意一個
^和xor:邏輯異或
	兩個條件只能滿足其中一個
!和not:
	不滿足xx條件
	*/
#查詢薪資大於20000元的女員工	
select * from t_employee where salary > 20000 && gender = '女';
select * from t_employee where salary > 20000 and gender = '女';

#查詢男員工
select * from t_employee where not gender = '女';
select * from t_employee where !(gender = '女');

#查詢薪資大於10000  異或 性別是男的,即它倆只能滿足一個
#即查詢薪資大於10000的女的或薪資低於10000的男的
select * from t_employee where salary>10000 ^ gender ='男';
select * from t_employee where salary>10000 xor gender ='男';
/*
4、範圍
(1)區間範圍:
	在[a,b]之間,between a and b
	不在[a,b]之間,not between a and b
(2)集合範圍
	in(...)
	not in(...)
*/
#查詢薪資在[15000,20000]之間的員工
select * from t_employee where salary between 15000 and 20000;
select * from t_employee where salary >= 15000 and salary <=20000;

#查詢薪資在9000,10000,12000
select * from t_employee where salary in(9000,10000,12000);
select * from t_employee where salary =9000 || salary =10000 || salary =12000;
 /*
5、模糊查詢
like '%x%' x代表確定的字符 %表示不確定的0~n個字符
     '_x%'  x代表確定的字符 _表示確定的1個字符
*/
#查詢,名字ename中包含“冰”這個字的員工
select * from t_employee where ename like '%冰%';

#查詢,名字ename是張xx,三個字
select * from t_employee where ename like '張__';

#查詢,名字ename是第二個字是'冰'
select * from t_employee where ename like '_冰%';

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章