型別
占用位元組數
範圍 -2n ~ 2n-1 - 1 -->n表示位數,一位元組=8位,儲存正整數時翻倍
tinyint
1(8位)
-128~127(-28-1 ~ 28-1 - 1) --> 0 ~ 224
int4
10位數,自己算吧
char(m)
m,不夠m空格補
固定長度
varchar(m)
m+1 ~ m+2 ,字串裡是字元的概念,字元和 位元組的轉化和編碼有關係,utf-8中1字元=3位元組
可變長度,最長216-1 (2位元組)個字元(大概35000左右),除了本身的長度外,還會儲存字串的長度,最多兩位元組
float(m,d)
4(總長度最長7位,包括小數點)
m:最大長度,d:小數字數,超過長度4舍5入
double(m,d)
8m:最大長度,d:小數字數,超過長度4舍5入
decimal(m,d)
一般用於精確的貨幣執行,比如銀行
datetime
8任意範圍的時間,儲存時去除橫線 存數字
timestamp
4(推介使用)
儲存的是1970~現在的秒數,只能存秒,範圍 1970-2037之間的時間
具體如何儲存呢:
第8位第7位
第6位第5位
第4位第3位
第2位第1位
符號位(=或-)
2726
2524
2322
21這就是int 為什麼存為正整數時就會翻倍,點開計算器,點一點就明白數字如何儲存在磁碟上的了
思考:1、int 3和100000在磁碟上占用空間是否相同?相同,都是4位元組,不夠0補位
2、tinyint(3)、int(3)、tinyint(10)、int(10)有什麼區別?沒任何區別,庸才的寫法
3、char(4)和varchar(4)有什麼區別?
舉例:mmmm 分別儲存在在磁碟上佔多少空間?char(4)佔4,varchar(4)佔5
mm分別儲存在在磁碟上佔多少空間?char(4)佔4,varchar(4)佔3
4、varchar(4) 能存多少漢字,多少英文本母,和編碼有關係,utf-8編碼 4漢字,4英文本母
想像這麼乙個場景:有本1000頁的書,書的每一頁都設定了目錄。把每一頁按頁碼都平鋪開,排成一行,然後在書的正上方(立體場景)放目錄,然後把目錄和這一頁一頁的資料都用一條條線連起來,你提著目錄的正**(第500頁的目錄),輕輕拉起,拉出乙個尖來。
mysql的索引資料結構差不多就是這樣的,被稱為b+樹(和上面的描述還是有點差別的,找資料看看就懂了),以500為頂點(入口),左邊的目錄指向<500頁的資料,右邊的目錄指向》500頁的資料。
假設我要看第300頁的內容, 和500比對,<500,往左找,直到找到第300頁的目錄,然後直接定位到第300頁。比你一頁一頁翻,翻到第300頁快了不知道多少倍
b+樹 就是 一本排版特別好的書,能讓你通過目錄快速的找到想要看的內容
聚合索引:就是上面提到的書主目錄,建立在主鍵上,只能有乙個,mysql每乙個表預設都有聚合索引,有主鍵就在主鍵上建,沒主鍵在第乙個唯一列上建,若以上都沒有,自動生成乙個隱藏自增列建立索引(但是這時候你是用不上聚合索引的,有和沒有沒有區別,相當於為書本隨便建了乙個目錄,你看也看不懂,用也用不上)
輔組索引:我看完一本書後,想要做筆記,筆記裡會記錄一些知識點和這些知識點所在的目錄(在哪一頁)
回表查詢:這麼乙個場景:我要找乙個知識點,我先檢視我的筆記(輔助索引),發現筆記裡不是很詳細,咋辦呢,當然需要翻書嘍,從書中怎麼找呢,當然從主目錄(聚合索引)找起,通過主目錄直接定位到知識點所在的頁(因為我的筆記裡記錄了知識點對應的目錄),這在mysql裡就叫回表查詢
覆蓋索引:是為了解決回表查詢,怎麼解決,無非就是在筆記裡記下這個知識點的詳細資訊,這樣就不需要再翻書了。
insert:我寫了一本書,寫完後發現有一章漏寫了,直接把這一章放在書的最後就行了,然後我需要調整書的目錄(聚合索引)和筆記(其他索引)
delete: 我要刪了我書中的一些內容怎麼辦,直接刪的話刪除的內容後面的內容都需要重新排版,同時修改目錄和筆記。mysql這裡選擇標識刪除,資料並不真正的刪除,只加乙個刪除識別符號,還占用著磁碟空間。主鍵自增情況刪除id=2的資料,再插入時id=3,就是這個原因。
那麼還能往刪除的資料那裡指定插入新資料麼,可以的,我還可以插入一條id=2的資料
update:修改的時候和重新編輯一本書就很像了。
1、如果修改的內容和原內容一樣大,直接修改(現場更新,不需要delete再insert),不需要移動其他資料和目錄,
2、如果修改的內容和原內容一樣大,但是修改了知識點,你還需要修改筆記(先delete再insert)
3、如果修改的內容比原內容大,後面所有的內容都需要移動,然後目錄也要跟著變(先delete再insert)
4、修改的內容比原內容小時也是乙個道理(先delete再insert)
MySQL基礎筆記
連線資料庫 一般都是乙個api函式 不同語言不同,但引數相似 connect server,user,passwd,newlink,clientflag 建立與刪除乙個資料庫 在php是使用mysql query sql 是sql的查詢命令,connection 可選為sql識別符號 選擇資料庫 m...
mysql基礎筆記
1.建立資料庫 create database 資料庫名 create database if not exists 資料庫名 character set 編碼表 判斷是否有此資料庫,沒有就建立並指定編碼 2.查詢資料庫 show create database 資料庫名 查編碼 show data...
MySQL基礎筆記
注釋 1 空格 2 3 顯示所有資料庫 show databases 建立資料庫 create database 資料庫名 create database home 切換資料庫 use 資料庫名 use home use one 展示當前資料庫的所有表 show tables show tables...