USE DATABASE -- 使用資料庫
CURRENT_DATE --當前日期
CURRENT_TIME --目前時間
SHOW DATABASES --顯示資料庫
SHOW TABLES --顯示表
DESCRIBE 表名 --顯示表結構
LOAD DATA LOCAL INFILE 檔案路徑 INTO TABLE 表 LINES TERMINATED '\r\n' --把本地檔案匯入table,欄位之間用tab分開
AND優先順序大於OR
SELECT DISTINCT 欄位 FROM 表 -- 查詢唯一
SELECT * FROM 表 ORDER BY 欄位一 ASC,欄位二 DESC --按欄位一升序,欄位二降序
YEAR() 年份 MONTH DAYOFMONTH HOUR MINUTE SECOND依次 DATE()當前年月日 TIME()當前時分秒 NOW()當前詳細時間CURDATE()當前年月日CURTIMR()當前時分秒
RIGHT(欄位,N) --返回欄位右側N個字元LEFT依次
返回BOOLEAN型的運算式 true返回1 false返回0(可以進行加減等數學運算)
IS NULL IS NOT NULL--為空白非空
DATE_ADD(CURDATE(), INTERVAL 1 MONTH) --在當前日期上加一個月.可用於全部日期函數,可以為負數
MOD(bar,n) --返回bar按n模數
REGEXP -- 正則匹配
COUNT() GROUP BY--1:僅查詢總數不需gb 2:select的其他欄位必須group by,可複數
聯集查詢可以同一個表 from table t1,table t2 where t1.id = t2.id
SELECT DATABASE();查詢當前使用的資料庫名
SHOW INDEX FROM 表 --返回表 的索引(index)
MAX() 最大值 可以GROUP BY; SELECT * FROM 表 B1 WHERE 欄位=(SELECT MAX(欄位) FROM 表 B2 WEHRE B1=B2)查詢最大值所在的列 ,最小值MIN()依次
使用使用者變數@A SELECT @A:=MIN(欄位) ,@B:=MAX(欄位) FROM 表;SELECT * FROM 表 WHERE 欄位=@A OR 欄位=@B
建立表時數值型欄位:AUTO_INCREMENT 自動成長 UNSIGNED 無符號/未簽署(非負) ZEROFILL 零填充 前面不足空位用0補足 ,如001
×× SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1 GROUP BY year,month; 該查詢計算了在表中按年/月組合的不同天數,可以自動去除重複的詢問。BIT_COUNT()返回二進位中‘1’出現次數BIT_OR()二進位進行‘或操作’1<<day位移操作。或操作時同一天即同一位上兩個一進行‘或’操作,還是1個‘1’,經典演算法
LAST_INSERT_ID() 最後插入的id;插入多行時返回插入的第一條的id;ALTER 表 AUTO_INCREMENT = N 把表的自增長基數改成N;複合主鍵中有一項自增長時,自增長的主鍵是相對於另一主鍵增長而不是全域增長
CONCAT(N個參數)串連函數,把多個欄位串連起來,如果中間有NULL,返回NULL;中間有BIT返回BIT ;CONCAT(N個參數)+0 返回數字
\轉義符 \0 ascii ;\' \" \\ \% \_ \b退格符 \t tab符 \r斷行符號 \n換行
SELECT 0xNNN 十六進位 NNN轉換字串,轉換數字CAST(0xNNN,UNSIGNED);HEX(0x)字串轉換16進位數字
true和1,false和0可以自動轉換
可以使用b'value'符號寫位欄位值。value是一個用0和1寫成的二進位值。(b BIT(8)查詢時 b+0 十進位 | BIN(b+0)二進位 | OCT(b+0)八進位 | HEX(b+0)十六進位
變數定義:SET
系統變數:系統變數分為GLOBAL和SESSION兩種。設定方法:SET SESSION[GLOBAL] PARAM='VALUE'或者SET @@SESSION(@@GLOBAL).PARAM='VALUE'如果不指定預設為session;查詢:SELECT @@session.PARAM;SHOW SESSION VARIABLES like 'PARAM';對於SHOW VARIABLES,SELECT @@session MySQL返回SESSION值(如果存在),否則返回GLOBAL值。SHOW SESSION VARIABLES如果不指定GLOBAL、SESSION或者LOCAL,MySQL返回SESSION值。
GREATEST()最大值 RAND()隨機數 LEAST()最小值
a XOR b -- a或b只有一項成立為true
CASE 值/運算式 WHEN 結果1 THEN 執行1 WHEN 結果2 THEN 執行2 ELSE 執行3 END 類似switch case
CASE WHEN 運算式1 THEN 結果1 WHEN 運算式2 THEN 執行2 ELSE 執行3 END
IF(運算式,結果A,結果B)運算式成立嗎?成立為結果A,不成立為B
STRCMP(STR1,STR2)比較字串,忽略大小寫
IFNULL(expr1,expr2) expr1是否為NULL,為NLL返回expr2,不是返回EXPR1
1/0 一除以零的結果為NULL
NULLIF(EXPR1,EXPR2)-- EXPR2和EXPR1是否相等,相等返回NULL,否則返回EXPR1
ASCII() --返回字元ascii,如果為字串,返回第一個字元的,Null 字元串為0,NULL 返回NULL
BIT_LENGTH() -- bit的長度
CHAR(N1,N2……) -- 按ASCII把數字轉換成字元,N為整數,超過255被認為是兩個字元
LENGTH(),CHAR_LENGTH() -- length為位元組長度,CHAR_LENGTH為字元長度
CONCAT_WS(分隔字元,STR1,STR2……)連結字串,並用分隔字元分開,會略null
ELT(M,S1,S2,……SN)-- 返回S數組中的第M個值,如果超出範圍返回NULL
FIELD(R,S1,S2,……SN)-- 返回R在S數組中的位置,從1開始,重複則返回第一個位置
FIND_IN_SET(STR,STRLIST) -- 返回str在strlist中的位置,重複則返回第一個位置
INSTR(STR,SUSTR) --返回str在sustr中第一次出現的位置
INSRTY(被插入的字串,開始位置,長度,插入的字串) -- 向字串中插入另一字串
LOWER()-- 轉小寫 -- UPPER()轉大寫
LOAD_FILE()-- 讀取檔案
LOCATE(STR,SUBSTR)返回str在substr中第一次出現的位置
LOCATE(STR,SUBSTR,BEGIN)從begin的位置開始,返回str在SUBSTR中第一次出現的位置,傳回值是相對整個substr來說的
LPAD(STR,len,SUB) 把SUB不斷添加到str左邊,到str的長度等於len,如果str的開始長度小於len,則從str的左邊除去差值 RPAD為右側添加,其餘全一樣
LTRIM(),RTRIM(),TRIM()-- 分別去左邊,右邊,前後空格
SUBSTRING(str,begin,len)/MID(str,begin,len) -- 截取字串SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len)
REPEAT(str, n); -- 返回str反覆疊加N次,n<1時返回 ''
REPLACE(str,from_str,to_str) -- 把str中的每一個from_str都替換為to_str
REVERSE(STR) str反向排列 ‘abc’-> 'cba'
×××SUBSTRING_INDEX(str,delim,count) -- 返回delim第count次出現之後的字串,如果為負數則從右邊開始算
×××TRIM除了去除空格還可以去除字元,格式為TRIM(LEADING/TRAILING/BOTH 要去除的字元 FROM 字串)leading位置預設為both
CRC32(STR)-- 返回crc32
××××若要在i ≤ R ≤ j 這個範圍得到一個隨機整數R ,需要用到運算式 FLOOR(i + RAND() * (j – i + 1))。
×××××???select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <= date(column_time);查詢近一個月內的欄位
DAYNAME(DATETIME) 返回星期幾
DAYOFWEEK() 周的序列 周日 =1 !!!!DAYOFYEAR(date)
FROM_DAYS(N) 給定一個天數 N, 返回一個DATE值。365以下都是0000-00-00 你運算TO_DAYS(date)
LAST_DAY() 返回這個月的最後一天的日期
MAKEDATE(year,dayofyear) 給出年份值和一年中的天數值,返回一個日期。dayofyear 必須大於 0 ,否則結果為 NULL
MAKETIME(hour,minute,second)
MONTHNAME(date) 返回date 對應月份的全名。
mysql的“周期” --YYYYMM or YYMM PERIOD_ADD(p,n)周期p增加n個月 PERIOD_DIFF(P1,P2)P1,P2相差的月份
QUARTER(date) 返回季度:花牌 (春夏秋冬)1234
SEC_TO_TIME(seconds) 把秒數轉換成時間
WEEK(date,model)第幾周,model可不寫,但是出現跨年周時處理……記參數麻煩--0本年度中有一個周日 1本年度中有3天以上2本年度中有一個周日3 本年度中有3天以上 4本年度中有3天以上5 本年度中有一個周一 6本年度中有3天以上7本年度中有一個周一
------------全文檢索索引-------------------
--表必須是MyISAM的(ENGINE=MyISAM)
--建立索引FULLTEXT( FULLTEXT KEY `title` (`title`,`body`))
--SELECT * FROM 表 WEHRE MATCH(title,body) AGAINST('關鍵字') MATCH的參數必須對應全部的索引欄位
--如果查詢MANTH(),返回結果是相關度,按這個結果排列就是按相似性排列
--SELECT id, body, MATCH (title,body)
AGAINST('Security implications of running MySQL as root') AS score
FROM articles WHERE MATCH (title,body) AGAINST
('Security implications of running MySQL as root') order by score desc;
注意:不能 where score!=0
-- 關鍵字不能小於4個字元(預設,可更改)
-- 預設停止字不能被搜尋(預設,可更改)
-- 出現頻率過高的會被認為成停止字,查詢結果為0(50%)
-------boolean全文檢索索引---------
-- 列子 :SELECT * FROM articles MATCH(title,body) AGAINST('+MYSQL -YOURSQL' IN BOOLEAN MODE)
-- 不使用50%的限制
-- 相關性強弱不使用,相關就是1,無關就是0
-- 仍然有關鍵字長度和預設停止字限制
-- ‘+’必須出現的關鍵字
‘-’一定不出現的關鍵字
‘’無符號表示可有可無,但是出現的話優先順序就高,類似普通檢索的相似性。連個無符號同時出現表示至少出現一個
‘>’‘<’優先順序高低 如' +(>aaaaa <bbbbb)'。查詢有aaaaa或bbbbb的欄位,但是有aaaa的優先順序高
‘~’含有則優先順序低,相當於弱一級的‘-’
‘*’萬用字元
‘""’短語
-- AGAINST( ‘’WITH QUERY EXPANSION)擴充查詢,例如:查database還會查出mysql oracle等
-----------------結束結束--------------------------
BENCHMARK(count,expr) 重複count 次執行運算式 expr
CHARSET(str) 返回字串自變數的字元集。
ROW_COUNT() -- 操作影響的行數
GET_LOCK(NAME,TIME) 建立鎖;IS_FREE_LOCK (NAME)是否存在鎖;RELEASE(NAME)解除鎖
IS_USED_LOCK(str) 檢查名為str的鎖是否正在被使用(換言之,被封鎖)。若被封鎖,則返回使用該鎖的用戶端的串連標識符。否則返回 NULL。
UUID()獨一無二的ID是一個由5位十六進位數的字串表示的128位元數字 ,其格式為 aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee :
SELECT A,GROUP_CONCAT(B) FROM T GROUP BY A;把查詢出來的欄位串連
group by時,後面加WITH ROLLUP表示最後有匯總項。和ORDER BY不能同時使用
----------觸發器--------------
DELIMITER | -- 定義結束符|
CREATE TRIGGER 觸發器名稱 BEFORE/AFTER INSERT/DELETE/UPDATE ON 表
FOR EACH ROW
BEGIN
SQL語句 -- OLD和NEW:INSERT中只有NEW,DELETE 只有OLD,UPDATE都有
END
| -- 結束
DELIMITER ; -- 把結束符改回來
-----------視圖--------------
CREATE VIEW SELECT * FROM TABLE
------------預存程序----------------
建立預存程序要有proc表
建立:
DELIMITER | -- 定義結束符|
CREATE PROCEDUCE my_proc( OUT param1 INT) -- IN表示傳入,OUT表示回傳,就是傳回值,INOUT就是都是
beginLabel:BEGIN -- 塊,beginLabel是別名,可用可不用
DECLARE a VARCHAR(5) DEFAULT 'bob'; -- 定義參數
DECLARE b INT;
DECLARE c DATETIME;
SELECT t.cola,t.colb,t.colc INTO a,b,c FROM table t;
IF DATE = NOW() THEN -- 條件
ELSEIF 2>0 THEN
ELSE
END IF
WHILE 2<2 DO -- 迴圈
END WHILE
END beginLabel
執行:
CALL my_proc(@a);
SELECT @a;
| -- 結束預存程序
DELIMITER ; -- 把結束符改回來