- 更新的表不能在 set 和 where 中用于子查詢
- update 后面可以做任意的查詢
- 關(guān)閉 MySQL 的事務(wù)自動提交
START TRANSACTION
DML....
COMMIT|ROLLBACK - SELECT 語句中的算術(shù)表達式
- :加法運算
- :減法運算
- :乘法運算
/ :除法運算,返回商
% :求余運算宽气,返回余數(shù)
- 包含空值的算術(shù)表達式計算結(jié)果為空。
- MySQL 中并不支持||作為連字符,需要使用 concat 函數(shù)鸵熟。在參數(shù)數(shù)量上與 oracle 的 concat函數(shù)有區(qū)別。
- 使用 DISTINCT 關(guān)鍵字時需要注意以下幾點:
- DISTINCT 關(guān)鍵字只能在 SELECT 語句中使用负甸。
- 在對一個或多個字段去重時流强,DISTINCT 關(guān)鍵字必須在所有字段的最前面痹届。
- 如果 DISTINCT 關(guān)鍵字后有多個字段,則會對多個字段進行組合去重打月,也就是說短纵,只有多個字段組合起來完全是一樣的情況下才會被去重。
- like
%表示任意多個任意字符
_表示一個任意字符 - 左右拼接
LPAD(str,len,padstr)/RPAD(str,len,padstr)
str --- 待拼接的字符串
len ---拼接后的長度
padstr --- 拼接的字符串 - REPLACE(str,from_str,to_str)
將 str 中的 from_str 替換為 to_str(會替換掉所有符合from_str 的字符串) - 數(shù)字函數(shù)
ROUND(arg1,arg2):四舍五入指定小數(shù)的值
ROUND(arg1):四舍五入保留整數(shù)僵控。
TRUNCATE(5.365,2) 截斷指定小數(shù)的值香到,不做四舍五入處理。
MOD(arg1,arg2):取余 MOD(5,2) --- 1 - 轉(zhuǎn)換函數(shù)
DATE_FORMAT(date,format)
將日期轉(zhuǎn)換成字符串(類似 oracle 中的 to_char())
STR_TO_DATE(str,format)
將字符串轉(zhuǎn)換成日期(類似 oracle 中的 to_date()) - 通用函數(shù)
IFNULL(expr1,expr2)
判斷 expr1 是否為 null报破,如果為 null悠就,則用 expr2 來代替 null
(類似 oracle 的 NVL()函數(shù))
NULLIF(expr1,expr2)
判斷 expr1 和 expr2 是否相等,如果相等則返回 null充易,如果不
相等則返回 expr1
IF(expr1,expr2,expr3)
判斷 expr1 是否為真(是否不為 null)梗脾,如果為真,則使用 expr2
替代 expr1盹靴;如果為假炸茧,則使用 expr3 替代 expr1(類似 oracle 的 NVL2()函數(shù))
COALESCE(value,...)
判斷 value 的值是否為 null,如果不為 null稿静,則返回 value梭冠;如
果為 null,則判斷下一個 value 是否為 null……直至出現(xiàn)不為 null 的 value 并返回或者返回最
后一個為 null 的 value
CASE WHEN THEN ELSE END
條件函數(shù) - 聚合函數(shù)
- AVG(arg)函數(shù)
對分組數(shù)據(jù)做平均值運算改备。
arg:參數(shù)類型只能是數(shù)字類型控漠。
2.SUM(arg)函數(shù)
對分組數(shù)據(jù)求和。
arg:參數(shù)類型只能是數(shù)字類型悬钳。
3.MIN(arg)函數(shù)
求分組中最小數(shù)據(jù)盐捷。
arg:參數(shù)類型可以是字符、數(shù)字默勾、日期碉渡。
MAX(arg)函數(shù)
求分組中最大數(shù)據(jù)。
arg:參數(shù)類型可以是字符母剥、數(shù)字滞诺、日期。COUNT 函數(shù)
返回一個表中的行數(shù)媳搪。
COUNT 函數(shù)有三種格式:
? COUNT(*)
? COUNT(expr)
? COUNT(DISTINCT expr)
約束分組結(jié)果(HAVING) 只能用在 數(shù)據(jù)組 的sql中
子查詢
可以將子查詢放在許多的 SQL 子句中铭段,包括:
? WHERE 子句
? HAVING 子句
? FROM 子句
使用子查詢的原則
? 子查詢放在圓括號中骤宣。
? 將子查詢放在比較條件的右邊秦爆。
? 在單行子查詢中用單行運算符,在多行子查詢中用多行運算符憔披。
-
MySQL 中的正則表達式
? MySQL 中允許使用正則表達式定義字符串的搜索條件等限,性能要高于 like爸吮。
? MySQL 中的正則表達式可以對整數(shù)類型或者字符類型檢索。
? 使用 REGEXP 關(guān)鍵字表示正則匹配望门。
? 默認忽略大小寫形娇,如果要區(qū)分大小寫,使用 BINARY 關(guān)鍵字 - 索引
普通索引
是最基本的索引筹误,它沒有任何限制桐早。
在創(chuàng)建索引時,可以指定索引長度厨剪。length 為可選參數(shù)哄酝,表示索引的長度,只有字符串
類型的字段才能指定索引長度祷膳,如果是 BLOB 和 TEXT 類型陶衅,必須指定 length。
創(chuàng)建索引時需要注意:
如果指定單列索引長度直晨,length 必須小于這個字段所允許的最大字符個數(shù)搀军。唯一索引
唯一索引與普通索引類似,不同的就是:索引列的值必須唯一勇皇,但允許有空值罩句。主鍵索引
主鍵索引是一種特殊的唯一索引,一個表只能有一個主鍵敛摘,不允許有空值的止。一般是在建表的時候同時創(chuàng)建主鍵索引。組合索引
組合索引是指使用多個字段創(chuàng)建的索引着撩,只有在查詢條件中使用了創(chuàng)建索引時的第一個字段诅福,索引才會被使用(最左前綴原則)。
最左前綴原則
就是最左優(yōu)先拖叙。
如:我們使用表中的 name氓润,address,salary 創(chuàng)建組合索引薯鳍,那么想要組合索引生效咖气,
我們只能使用如下組合:
name/address/salary
name/address
name/
如果使用 addrees/salary 或者是 salary 則索引不會生效。
- 全文索引
全文索引(FULLTEXT INDEX)主要用來查找文本中的關(guān)鍵字挖滤,而不是直接與索引中的值
相比較崩溪。FULLTEXT 索引跟其它索引大不相同,它更像是一個搜索引擎斩松,而不是簡單的 where語句的參數(shù)匹配伶唯。FULLTEXT 索引配合 match against 操作使用,而不是一般的 where 語句加 like惧盹。
全文索引可以從 CHAR乳幸、VARCHAR 或 TEXT 列中作為 CREATE TABLE 語句的一部分被創(chuàng)建瞪讼,或是隨后使用 ALTER TABLE 添加。不過切記對于大容量的數(shù)據(jù)表粹断,生成全文索引是一個非常消耗時間非常消耗硬盤空間的做法符欠。
全文解析器
全文索引中基本單位是”詞”。分詞瓶埋,全文索引是以詞為基礎(chǔ)的希柿,MySQL 默認的分詞是所有非字母和數(shù)字的特殊符號都是分詞符。在檢索數(shù)據(jù)時我們給定的檢索條件也是詞养筒。
MySQL 中默認的全文解析器不支持中文分詞狡汉。如果數(shù)據(jù)含有中文需要更換全文解析器NGRAM。
使用全文索引
SELECT 投影列 FROM 表名 WHERE MATCH(全文索引列名) AGAINST(‘搜索內(nèi)容’)
MySQL中The used table type doesn't support FULLTEXT indexes解決辦法
報此錯誤是不支持全文索引闽颇,解決辦法:
1盾戴、查看創(chuàng)建表時用的哪種引擎,如果是InnoDB兵多,改為MyISAM尖啡,InnoDB不支持FULLTEXT類型的索引
2、查看配置文件mysql.ini剩膘,搜索default-storage-engine= 衅斩,如果是InnoDB,改為MyISAM怠褐。重啟MySQL服務(wù)畏梆。
-
在實際操作過程中,應(yīng)該選取表中哪些字段作為索引奈懒?
為了使索引的使用效率更高奠涌,在創(chuàng)建索引時,必須考慮在哪些字段上創(chuàng)建索引和創(chuàng)建什么類型的索引,有7大原則:
1.選擇唯一性索引
2.為經(jīng)常需要排序磷杏、分組和聯(lián)合操作的字段建立索引
3.為常作為查詢條件的字段建立索引
4.限制索引的數(shù)目
5.盡量使用數(shù)據(jù)量少的索引
6.盡量使用前綴來索引
7.刪除不再使用或者很少使用的索引