mysql筆記集錦3

Day3列類型與建表
1 理解
  (1)知識點:列類型;
a:怎麼建表:以在A4紙上建表爲例,例子略;
b:分析:我們只要把表頭建好了,這張表就算是建好了;
  其實建表的過程,就是一個畫表頭的過程;
  即:建表的過程就是一個聲明字段的過程;


   (2)建表和列類型的關係?
a:分析:A4紙的大小是有限的,那麼每列的長度應該留多     寬呢?
b:因此:對應的,空間有限,我們在建列時,我們想到的     就是能夠容納放置的內容,但是又不能浪費;
c:存儲同樣的數據,不容的列類型,所佔據的空間和效率     是不一樣的,這就是我們建表前要列類型的意義;


   (3)重點:學習列類型的存儲範圍與佔據的字節關係;



2. 列類型學習
   Mysql三大列類型:
      (1)數值型:
a 整型
   Tinyint
佔據空間:一個字節;存儲範圍:-12 8~127,0-255;
聲明tinyint怎麼樣表示有符號和無符號?
int系列的聲明時的參數:
(M)unsigned zerofill;
//#分析M參數
//#zerofill zero是零,fill是填充,代表0;
  M必須和zerofill配合使用纔有意義;
給學員添加一個學號:
 1:學號不能爲負;
 2:學號一般位數相同,即使不同,如:00012,11123;
 3:即使不夠位數,用0填充;


#例子:
 alter table class 
 add snum smallint<5> zerofill not null 
 default 0;


//snum統一補0,而且補到5位;
#M表示補0的寬度,和zerofill配合使用纔有意義;


#unsigned zerofill :觀察snum類型,可知zerofill則同時必是 unsigned類型;
 


#練習tinyint的參數並驗證字節與範圍的關係:
create table class(
sname varchar(20) not null default '',
age tinyint not null default 0//age is tinyint;
)engine myisam charset utf8;


insert into class(sname,age)
values
('coo',111);//Query ok;
('aaa',128);//out of range;


#即:不加特殊說明,默認是有符號的;


#加unsigned表示無符號,可以影響存儲的範圍;
alter table class //修改表,添加score爲unsigned;
add score tinyint unsigned not null default 0;


# 測試範圍:
insert into class(sname,score)
values
('jj',200);//query ok;
('hh',-1);//out of range;
*加列類型加unsigned表明是無符號類型;

#爲其插入數據,age到底是-128到127,還是0-255呢?

   二進制補碼問題:
   負數 = 絕對值 - 128;


   Smallint
   Mediuint
   int
   bigint


b 小數(浮點型/定點型)
 #浮點數在計算機裏表示是比較複雜的;
   a float(M,D)
   小數點的左邊和小數點的右邊?即範圍;
   #12.23;13.255;
   #M代表“標度”---》代表小數的總位數;
    D代表“精度”---》代表小數點右邊的位數(小數位);


代碼示例:
create table salary(
sname varchar(20) not null default '',
gongzi float(6,2)
)engine myisam charset utf8;


#添加獎金列:
alter table salary 
add
bonus float(5,2) unsigned not null default 0;
#浮點數佔多大的空間呢:
//float能存儲10^38,10^-38;         如果M<=24,佔4個字節,否則佔8個字節;
#用來表示數據中的小數出來float--浮點,
還有一種叫定點,定點就是把整數部分和小數部分分開存儲的,比float精確;decimal;


   b decimal(M,D)
代碼示例:
create table account(
id int not null default 0,
acc1 float(9,2) not null default 0.00,
acc2 decimal(9,2) not null default 0.00
)engine myisam charset utf8;


示例:
insert into account
values
(1,1234567.23,1234567.23);
#通過上例可以看出float有損精度,decimal無損精度;
//decimal:如果像賬戶這樣的敏感字段,建議用decimal;




字符串型:
char,varchar,text,blob;
  char(4):定長字符串;
  varchar:變長字符串類型;


#姓名 char(6)
 za
 ji
 ii
#查找記錄時,如果都是定長的話,完全可以通過行數和行的長度計算  出來文件指針的偏移量;
 對於定長N,不論夠不夠指定長度,實際都佔據N個長度;
 如果不夠就用空格在尾部補齊;


varchar(100),也是可以存儲0-100個字符;
#“za”開始出,請把za取出來,往後去取幾個字符呢??
/// 對於varchar(M),不用空格補齊,但列內容前,實際是要加上(1-2)個字節來標記內容長度;


示例代碼:
create table test(
va char(6) not null default '',
vs varchar(6) not null default ''
)engine myisam charset utf8;
//
insert into test 
values
('aa ' ,'aa '); //空格
//
#concat 連接字符串的函數
select concat(va,'!'),concat(vs,'!')
from test;


//如果不夠的時候就用空格補齊,取出時再把右側空格刪除(如果內容用空格,將會被清除);
//如果右側有空格,取出的時候就會有缺失;


##兩者限制的是字符,不是字節;


注意事項:
// char(2) charset utf8,M指能存兩個字符,如“獎金”;
//錯誤認識:既然是字符,6個utf8中文,即是12個字節,可以存12個英文字母?
  ##不對,也只是能存六個字母而已;




text:文本類型,一般用來儲存文章內容,新聞內容等;聲明text列時,不必給默認值;


示例代碼:
create table test2(
arti  text not null default ''
);//error
arti text);//Ok


blob:是進制類型,是用來存儲圖像,音頻等二進制信息;二進制,0-255都有可能出現,Blob在於防止因爲字符集的問題,導致信息丟失;
比如:一張圖片有0xFF字節,這個在ascii字符集認爲非法,在入庫的時候被過濾了;


示例代碼:
alter table test2
add
img blob;//添加列img,類型是blob;
//
insert into test2 
values('加','是');









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