MySQL必知必會 常見型別

2021-08-15 01:33:21 字數 4690 閱讀 5091

整型:

小數: 浮點型

定點型字元型:

日期型:

blob型別:

#
一、數值型

1、整型

tinyint、smallint、mediumint、int/integer、bigint

1 2 3 4 8

特點:①都可以設定無符號和有符號,預設有符號,通過unsigned設定無符號

②如果超出了範圍,會報out or range異常,插入臨界值

③長度可以不指定,缺省會有乙個長度

長度代表顯示的最大寬度,如果不夠則左邊用0填充,但需要搭配zerofill,並且預設變為無符號整型

2、浮點型

定點數:decimal(m,d)

浮點數:

float(m,d) 4

double(m,d) 8

特點:①m代表整數部位+小數部位的個數,d代表小數部位(不夠補0,夠了四捨五入)

②如果超出範圍,則報out or range異常,並且插入臨界值

③m和d都可以省略,但對於定點數,m預設為10,d預設為0

④如果精度要求較高,則優先考慮使用定點數

二、字元型

char、varchar、binary、varbinary、enum、set、text、blob

char:固定長度的字元,寫法為char(m),最大長度不能超過m,其中m可以省略,預設為1

varchar:可變長度的字元,寫法為varchar(m),最大長度不能超過m,其中m不可以省略

三、日期型

year年

date日期

time時間

datetime 日期+時間 8

timestamp 日期+時間 4 比較容易受時區、語法模式、版本的影響,更能反映當前時區的真實時間

############################案例演示
#常見的資料型別

/*數值型:

整型小數:

定點數浮點數

字元型:

較短的文字:char、varchar

較長的文字:text、blob(較長的二進位制資料)

日期型:

*/#一、整型

/*分類:

tinyint、smallint、mediumint、int/integer、bigint

1 2 3 4 8

特點:① 如果不設定無符號還是有符號,預設是有符號,如果想設定無符號,需要新增unsigned關鍵字

② 如果插入的數值超出了整型的範圍,會報out of range異常,並且插入臨界值

③ 如果不設定長度,會有預設的長度

長度代表了顯示的最大寬度,並不是限定取值範圍,如果不夠會用0在左邊填充,但必須搭配zerofill使用!使用了zerofill後便會預設是無符號資料,不能儲存有符號資料

*/#1.如何設定無符號和有符號

drop table if exists tab_int;

create table tab_int(

#t1 int(7) , # 預設有符號

t2 int unsigned # 若要無符號,必須加 unsigned

);drop table if exists tab_int;

create table tab_int(

t1 int(7) zerofill,

t2 int(7) zerofill

);desc tab_int;

insert into tab_int values(-123456);

insert into tab_int values(-123456,-123456); # 第二個會插入0

insert into tab_int values(214748364894967296); #超出範圍,預設插入臨界值

insert into tab_int values(123,123); # 顯示 0000123,0000123

select * from tab_int;

#二、小數

/*分類:

1.浮點型

float(m,d)

double(m,d)

2.定點型

dec(m,d)

decimal(m,d)

特點:①

m:整數部位(位數)+小數部位

d:小數部位

如果超過範圍,則插入臨界值

②m和d都可以省略

如果是decimal,則m預設為10,d預設為0

如果是float和double,則會根據插入的數值的精度來決定精度

③定點型的精確度較高,如果要求插入數值的精度較高如貨幣運算等則考慮使用

*/#測試m和d

drop table if exists tab_float;

create table tab_float(

f1 float(5,2),

f2 double,

f3 decimal

);select * from tab_float;

desc tab_float;

insert into tab_float values(123.4563,123.4523,123.4523); # 表中存的是 123.46,123.4523,123

insert into tab_float values(123.456,123.456,123.456);

insert into tab_float values(123.4,123.4,123.4);

insert into tab_float values(1523.4,1523.4,1523.4);

#原則:

/*所選擇的型別越簡單越好,能儲存數值的型越小越好

*/#三、字元型

/*較短的文字:

char

varchar

其他:binary和varbinary用於儲存較短的二進位制

enum用於儲存列舉

set用於儲存集合

較長的文字:

text

blob(較大的二進位制)

特點: 寫法 m的意思 特點 空間的耗費 效率

char char(m) 最大的字元數,可以省略,預設為1 固定長度的字元 比較耗費 高

varchar varchar(m) 最大的字元數,不可以省略 可變長度的字元 比較節省 低

*/#例如儲存'中國'兩個字元時, char(10)會開闢十個字元空間,而varchar(10)只會開闢兩個字元空間

#所以 儲存固定字元長度,如性別只有』男『和』女『,推薦用char,可變長度字元時用varchar();

create table tab_char(

c1 enum('a','b','c')

);insert into tab_char values('a');

insert into tab_char values('b');

insert into tab_char values('c');

insert into tab_char values('m'); #插入失敗

insert into tab_char values('a'); # 不區分大小寫,但存入的是'a'

select * from tab_set;

create table tab_set(

s1 set('a','b','c','d')

);insert into tab_set values('a'); # 存入 'a'

insert into tab_set values('a,b'); # 存入 'a,b'

insert into tab_set values('a,c,d'); # 存入 'a,c,d'

#四、日期型

/*分類:

date儲存日期

time 只儲存時間

year只儲存年

datetime儲存日期+時間

timestamp儲存日期+時間

特點: 位元組 範圍 時區等的影響

datetime 8 1000——9999 不受(反映插入時當地的時區)

timestamp 4 1970-2038 受(和實際的時區有關,更能反映實際的日期,受mysql和sqlmode影響很大)

#建議優先使用時間戳 timestamp

*/create table tab_date(

t1 datetime,

t2 timestamp

);insert into tab_date values(now(),now());

select * from tab_date;

show variables like 'time_zone'; #顯示時區

set time_zone='+9:00'; #更改時區,變為東九區

select * from tab_date; #更改時區後再次查詢,datetime 不變,timestamp 根據時區的變化而變化 ,17點變為18點

##########################習題

mysql必知必會 mysql必知必會(四)

十四 理解子查詢 1 通過子查詢過濾 這本書在所有的章節都關連到了資料庫表,訂單資料是儲存在兩個表中,orders表儲存著 訂單號碼 顧客id和訂單日期。個人的訂單列表關連著orderitems表,訂單表沒有儲存顧客資訊,它只是儲存著顧客id,這實際的顧客資訊是儲存在customers表中。現在假設...

mysql的必知必會 mysql 必知必會 筆記

好久沒有寫了。1 show columns from table 等同於describe table顯示的是表的結構。而select from table 則顯示的是整個表中插入的資料。2 select distinct c1,c2 from table除非列不相同,否則所有行將被檢索出來,即不能對...

mysql必知必會

一周了,總想寫點什麼,有的時候進步真的很難在一周顯示出來,週三的時候,我跟我的領導說,好快啊,又週三了,不知不覺,他說是啊,現在對於他來說,有時候他過一天可能跟我過一周的感覺差不多,每天都在忙,時間過的特別快,也沒有感覺做出來點什麼,當然實際肯定是怎麼做了一些東西的,是否我以後也會如此呢?說說技術把...