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