一、儲存引擎
儲存引擎是mysql資料庫的核心、心臟、發動機,它決定了資料如何儲存,查詢的時候如何搜尋資料,索引如何建立等等;是對於資料庫檔案的一種訪問機制,如何實現儲存資料,如何為儲存的資料建立索引以及如何更新,查詢資料等技術實現的方法。
常用儲存引擎
innodb:
1. 事務處理、回滾、崩潰修復能力和多版本併發控制
2. 自增長auto_increment
3. 外來鍵(foreign key)
innodb的優勢在於提供了良好的事務處理、崩潰修復能力和併發控制。缺點是讀寫效率較差,占用的資料空間相對較大。
myisam:
myisam的優勢在於占用空間小,處理速度快。缺點是不支援事務的完整性和併發性。
memory:
1. 資料全部放在記憶體中
2. 雜湊索引
注意,memory用到的很少,因為它是把資料存到記憶體中,如果記憶體出現異常就會影響資料。如果重啟或者關機,所有資料都會消失。因此,基於memory的表的生命週期很短,一般是一次性的。
mysql 5.1版本之前預設的儲存引擎是myisam,之後預設是innodb
二、資料型別
數值型別
tinyint - 乙個非常小的整數,可以帶符號。如果是有符號,它允許的範圍是從-128到127。如果是無符號,允許的範圍是從0到255。
int - 正常大小的整數,可以帶符號。如果是有符號的,它允許的範圍是從-2147483648到2147483647。如果是無符號,允許的範圍是從0到4294967295。
bigint - 乙個大的整數,可以帶符號。如果有符號,允許範圍為-9223372036854775808到9223372036854775807。如果無符號,允許的範圍是從0到18446744073709551615。
float(m,d) - 不能使用無符號的浮點數字。可以定義顯示長度(m)和小數字數(d)。這不是必需的,並且預設為10,2。其中2是小數的位數,10是數字(包括小數)的總數。float(5,2) 999.919
double(m,d) - 不能使用無符號的雙精度浮點數。可以定義顯示長度(m)和小數字數(d)。 這不是必需的,預設為16,4,其中4是小數的位數。
字串型別
短文本:char varchar
char(m) - 固定長度的字串是以長度為1到255之間個字元長度(例如:char(5)),儲存右空格填充到指定的長度。 限定長度不是必需的,它會預設為1。 char(5) abcde ab 記憶體空間會浪費,性別:男/女 char(1),查詢匹配規則是所有位元組一起匹配,查詢效能相對比varchar高
varchar(m) - 可變長度的字串是以長度為1到255之間字元數(高版本的mysql超過255); 例如:varchar(25). 建立varchar型別欄位時,必須定義長度。 5 10 12 節省記憶體空間 abcde,查詢匹配規則是每個位元組依次匹配
blob 或 text - 欄位的最大長度是65535個字元。 blob是「二進位製大物件」,並用來儲存大的二進位制資料,如影象或其他型別的檔案。定義為text文字欄位還持有大量的資料; 兩者之間的區別是,排序和比較上儲存的資料,blob大小寫敏感,而text欄位不區分大小寫。不用指定blob或text的長度。
日期和時間型別
date - 以yyyy-mm-dd格式的日期,在1000-01-01和9999-12-31之間。 例如,2023年12月30日將被儲存為1973-12-30。
datetime - 日期和時間組合以yyyy-mm-dd hh:mm:ss格式,在1000-01-01 00:00:00 到9999-12-3123:59:59之間。例如,2023年12月30日下午3:30,會被儲存為1973-12-30 15:30:00。
timestamp - 2023年1月1日午夜之間的時間戳,到2037的某個時候。這看起來像前面的datetime格式,無需只是數字之間的連字元; 2023年12月30日下午3點30分將被儲存為19731230153000(yyyymmddhhmmss)。
time - 儲存時間在hh:mm:ss格式。
year(m) - 以2位或4位數字格式來儲存年份。如果長度指定為2(例如year(2)),年份就可以為1970至2069(70〜69)。如果長度指定為4,年份範圍是1901-2155,預設長度為4
三、sql
1.快速建立表結構相同的表(不含任何資料):create table t2 like t1
2.檢視建立資料庫物件的語句:show create database/database/... 物件名稱
3.列舉資料庫當前物件清單: show databases/tables/...
4.刪除物件,判斷是否存在防止拋異常:drop table/database... if exists t1
5.'曾改換刪'表字段結構:alter table 表名 add/modify/change/drop 列名 (change要加新列名) 列型別(drop不用型別)
6.delete不會影響主鍵自增長(auto_increment)的當前值,truncate會直接將表自增長的值重置為1,無論是否設定初始值還是增長到**了。
7.視窗函式:
sum(...a...) over(partition by ...b... order by ...c... rows between ...d1... and ...d2...)
a: 需要被加工的欄位名稱
b: 分組的欄位名稱
c: 排序的欄位名稱
d: 計算的行數範圍
rows between unbounded preceding and current row # 包括本行和之前所有的行
rows between current row and unbounded following # 包括本行和之後所有的行
rows between 3 preceding and current row # 包括本行和前面三行
rows between 3 preceding and 1 following # 從前面三行和下面一行,總共五行
# 當order by後面缺少視窗從句條件,視窗規範預設是rows between unbounded
preceding and current row.
# 當order by和視窗從句都缺失, 視窗規範預設是 rows between unbounded preceding
and unbounded following
切片開窗分組函式:ntile(n)over(partition by order by )
行偏移函式-向上1行:lag(c1,1,c1)over(partition by order by)
行偏移函式-向下1行:laad(c1,1,c1)over(partition by order by)
mysql技巧總結
mysql技巧總結 2005 09 23 15 02 pm 1.修改mysql中root的密碼 shell mysql u root p mysql set password for root password root 2.遠端登入mysql server 當然server必須首先給某個遠端使用者...
MYSQL開發技巧
a表取經四人組 b表悟空的兄弟 1.join操作的型別 inner join 內連線inner join 基於連線謂詞將兩張表 如a和b 的列組合在一起,產生新的結果表。產生的結果集如 圖一 紅色區域 例如 同時存在與取經四人組中的和悟空的兄弟表中的記錄為 2.join操作的型別 left oute...
常見MYSQL技巧
mysql利用regexp命令提供給使用者擴充套件的正規表示式功能,具體模式序列如下 序列序列說明 序列序列說明 在字串的開始處進行匹配 a?匹配1個或零個a 在字串的末尾處進行匹配 a1 a2 匹配a1或a2 匹配任意單個字元,包括換行符 a m 匹配m個a 匹配出括號內德任意字元 a m,匹配至...