一、MySQL 中的 DML 操作
1.添加數(shù)據(jù)(INSERT):
(1)選擇插入:
語(yǔ)法:INSERTINTO 表名(列名 1氛堕,列名 2揉抵,列名 3.....)VALUES(值 1,值 2裁赠,值 3......)闯传;
(2)完全插入:
語(yǔ)法:INSERTINTO 表名 VALUES(值 1谨朝,值 2,值 3......);
(3)插入多條數(shù)據(jù):
語(yǔ)法:insert into 表名[(列名1,列名2....)] values(值1,值2...),(值21,值22...)...字币;
2.自動(dòng)增長(zhǎng)(auto_increment):
MySQL 中的自動(dòng)增長(zhǎng)類型要求:
1)一個(gè)表中只能有一個(gè)列為自動(dòng)增長(zhǎng)则披。?
2)自動(dòng)增長(zhǎng)的列的類型必須是整數(shù)類型。?
3)自動(dòng)增長(zhǎng)只能添加到具備主鍵約束與唯一性約束的列上洗出。?
4)刪除主鍵約束或唯一性約束士复,如果該列擁有自動(dòng)增長(zhǎng)能力,則需要先去掉自動(dòng)增長(zhǎng)然 后在刪除約束共苛。
(2)默認(rèn)值處理:
在 MySQL 中可以使用 DEFAULT 為字段設(shè)定一個(gè)默認(rèn)值判没。如果在插入數(shù)據(jù)時(shí)并未指
定該列的值,那么 MySQL 會(huì)將默認(rèn)值添加到該列中隅茎。
創(chuàng)建表時(shí)指定列的默認(rèn)值:
create table 表名(列名1 類型 約束 ,列名2 類型,列名3 類型 default 默認(rèn)值)嫉沽;
插入數(shù)據(jù)時(shí)的默認(rèn)值處理:
如果在插入數(shù)據(jù)時(shí)并未指定該列的值辟犀,那么 MySQL 會(huì)將默認(rèn)值添加到該列中。如果是 完全項(xiàng)插入需要使用 default 來占位绸硕。
3.更新數(shù)據(jù)(UPDATE):
語(yǔ)法:UPDATE 表名 SET 列名=值堂竟,列名=值 WHERE 條件;
(1)mysql 的 update 的特點(diǎn):
1)更新的表不能在 set 和 where 中用于子查詢;?
2)update 后面可以做任意的查詢玻佩。
4.刪除數(shù)據(jù)(DELETE):
(1)使用 DELETE 子句:
語(yǔ)法:DELETEFROM 表名 WHERE 條件出嘹;
(2)使用 TRUNCATE 清空表:
語(yǔ)法:TRUNCATETABLE 表名;
(3)DELETE 與 TRUNCATE 區(qū)別:
1)truncate 是整體刪除(速度較快)咬崔, delete 是逐條刪除(速度較慢)税稼;?
2)truncate 不寫服務(wù)器 log,delete 寫服務(wù)器 log垮斯,也就是 truncate 效率比 delete 高的原因郎仆;?
3)truncate 是會(huì)重置自增值,相當(dāng)于自增列會(huì)被置為初始值兜蠕,又重新從 1 開始記錄扰肌,而 不是接著原來的值。而 delete 刪除以后熊杨,自增值仍然會(huì)繼續(xù)累加曙旭。
5.MySQL 中的事務(wù)處理:
在 MySQL 中,默認(rèn)情況下晶府,事務(wù)是自動(dòng)提交的桂躏,也就是說,只要執(zhí)行一條 DML 語(yǔ)句 就開啟了事物郊霎,并且提交了事務(wù)沼头。
(1)關(guān)閉 MySQL 的事務(wù)自動(dòng)提交:
STARTTRANSACTION?
DML操作....?
COMMIT|ROLLBACK;
二、MySQL 查詢數(shù)據(jù)
1.MySQL 的基本查詢:
(1)MySQL 的列選擇:
SELECT*/投影列 FROM 表名;
(2)MySQL 的行選擇:
SELECT*| 投影列 FROM 表名 WHERE 選擇條件进倍;
2.SELECT 語(yǔ)句中的算術(shù)表達(dá)式:
1)+ :加法運(yùn)算土至;
2)- :減法運(yùn)算;
3)* :乘法運(yùn)算 猾昆;
4)/ :除法運(yùn)算陶因,返回商 ;
5)% :求余運(yùn)算垂蜗,返回余數(shù)楷扬;
3.MySQL 中定義空值:
包含空值的算術(shù)表達(dá)式計(jì)算結(jié)果為空。
4.MySQL 中的列別名:
語(yǔ)法:SELECT 列名 AS 列別名 FROM 表名 WHERE 條件贴见;
5.MySQL 中的連字符:
MySQL中并不支持||作為連字符烘苹,需要使用concat函數(shù)。在參數(shù)數(shù)量上與oracle的concat 函數(shù)有區(qū)別片部。
6.MySQL 中去除重復(fù):
在 SELECT 語(yǔ)句中用 DISTINCT 關(guān)鍵字除去相同的行镣衡。
7.約束和排序數(shù)據(jù):
(1)MySQL 中的比較條件:
比較運(yùn)算符:等于=;大于>档悠;大于等于>= 廊鸥;小于<;小于等于<=辖所;不等于!=或<>惰说;
(2)模糊查詢:
關(guān)鍵字:like
%表示任意多個(gè)任意字符 ;
_表示一個(gè)任意字符缘回。
(3)邏輯運(yùn)算符:
and 吆视、or 、not切诀;
(4)范圍查詢:
1)between...and揩环;
2)in 表示在一個(gè)非連續(xù)的范圍內(nèi)。
區(qū)別:
1)如果要讓選擇的結(jié)果在某一個(gè)范圍之內(nèi)的話可以用between和in這兩個(gè)關(guān)鍵字幅虑。
2)如果他們都為空的話丰滑,between會(huì)限制select語(yǔ)句讓它一條記錄都無法選出來,但是in的話則相反倒庵,這個(gè)限制條件不會(huì)起任何作用褒墨,會(huì)選擇出所有的記錄。
(5)空值判斷:
1)判斷空 isnull 擎宝;
2)判斷非空 is not null郁妈;
(6)使用 ORDERBY 排序:
用 ORDERBY 子句排序默認(rèn)升序;
1)ASC: 升序排序绍申;
2)DESC: 降序排序噩咪;
8.MySQL 中常見的單行函數(shù):
(1)大小寫控制函數(shù):
1)LOWER(str) 轉(zhuǎn)換大小寫混合的字符串為小寫字符串顾彰;
2)UPPER(str) 轉(zhuǎn)換大小寫混合的字符串為大寫字符串。
(2)字符處理:
1)CONCAT(str1,str2,...) 將 str1胃碾、str2 等字符串連接起來 涨享;
2)SUBSTR(str,pos,len) 從 str 的第 pos 位(范圍:1~str.length)開始,截取長(zhǎng)度為 len 的字符串仆百;
3)LENGTH(str) 獲取 str 的長(zhǎng)度 INSTR(str,substr) 獲取 substr 在 str 中的位置 厕隧;
4)TRIM(str) 從 str 中刪除開頭和結(jié)尾的空格(不會(huì)處理字符串中間含有的空格);
5)LTRIM(str) 從 str 中刪除左側(cè)開頭的空格 俄周;
6)RTRIM(str) 從 str 中刪除右側(cè)結(jié)尾的空格 吁讨;
(3)數(shù)字函數(shù):
1)ROUND(arg1,arg2):四舍五入指定小數(shù)的值。?
2)ROUND(arg1):四舍五入保留整數(shù)峦朗。?
3)TRUNC(arg1,arg2):截?cái)嘀付ㄐ?shù)的值建丧,不做四舍五入處理。?
4)MOD(arg1,arg2):取余甚垦。
(4)日期函數(shù):
1)SYSDATE() 或者 NOW() 返回當(dāng)前系統(tǒng)時(shí)間茶鹃,格式為 YYYY-MM-DDhh-mm-ss ;
2)CURDATE() 返回系統(tǒng)當(dāng)前日期艰亮,不返回時(shí)間 ;
3)CURTIME() 返回當(dāng)前系統(tǒng)中的時(shí)間挣郭,不返回日期 迄埃;
4)DAYOFMONTH(date) 計(jì)算日期 d 是本月的第幾天 ;
5)DAYOFWEEK(date) 日期 d 今天是星期幾兑障,1 星期日侄非,2 星期一,以此類推 流译;
6)DAYOFYEAR(date) 返回指定年份的天數(shù) 逞怨;
7)DAYNAME(date) 返回 date 日期是星期幾;
8)LAST_DAY(date) 返回 date 日期當(dāng)月的最后一天福澡。
(5)轉(zhuǎn)換函數(shù):
1)DATE_FORMAT(date,format) 將日期轉(zhuǎn)換成字符串(類似 oracle 中的 to_char())叠赦;
2)STR_TO_DATE(str,format) 將字符串轉(zhuǎn)換成日期(類似 oracle 中的 to_date());
(6)通用函數(shù):
1)IFNULL(expr1,expr2) 判斷 expr1 是否為 null革砸,如果為 null除秀,則用 expr2 來代替 null (類似 oracle 的 NVL()函數(shù));
2)NULLIF(expr1,expr2) 判斷 expr1 和 expr2 是否相等算利,如果相等則返回 null册踩,如果不 相等則返回 expr1 ;
3)IF(expr1,expr2,expr3) 判斷 expr1 是否為真(是否不為 null)效拭,如果為真暂吉,則使用 expr2 替代 expr1胖秒;如果為假,則使用 expr3 替代 expr1(類似 oracle 的 NVL2()函數(shù))慕的;
?4)COALESCE(value,...) 判斷 value 的值是否為 null阎肝,如果不為 null,則返回 value业稼;如 果為 null盗痒,則判斷下一個(gè) value 是否為 null……直至出現(xiàn)不為 null 的 value 并返回或者返回最 后一個(gè)為 null 的 value;
三低散、多表連接查詢
1)確定需要查詢的哪些列??
2)確定需要查詢的列分布在哪些表中??
3)確定表之間的關(guān)聯(lián)關(guān)系(主外鍵的關(guān)系)俯邓;
1.等值連接:
包含在內(nèi)連接和外連接中,因?yàn)閮?nèi)連接和外連接都是需要連接條件的熔号,條件為=則為等值連接稽鞭。
2.非等值連接:
使用between...and...或不等號(hào);
3.自連接:
自然連接是一種特殊的等值連接引镊,要求兩個(gè)關(guān)系表中進(jìn)行比較的必須是相同的屬性列朦蕴,無須添加連接條件,并且在結(jié)果中消除重復(fù)的屬性列弟头。
4.外連接(OUTERJOIN):
1)左外連接(LEFTOUTERJOIN)吩抓;
2)右外連接(RIGHTOUTERJOIN);
3)全外鏈接::MySQL 中不支持 FULLOUTERJOIN 連接 可以使用 union 實(shí)現(xiàn)全完連接赴恨。
4)union all:可以將兩個(gè)查詢結(jié)果集合并疹娶,返回的行都是唯一的,如同對(duì)整個(gè)結(jié)果集合使用了 DISTINCT伦连。
5)UNIONALL:只是簡(jiǎn)單的將兩個(gè)結(jié)果合并后就返回雨饺。這樣,如果返回的兩個(gè)結(jié)果集中有重復(fù)的數(shù)據(jù)惑淳, 那么返回的結(jié)果集就會(huì)包含重復(fù)的數(shù)據(jù)了额港。
語(yǔ)法:(SELECT 投影列 FROM 表名 LEFT OUTER JOIN 表名 ON 連接條件 )UNION (SELECT 投影列 FROM 表名 RIGHTOUTERJOIN 表名 ON 連接條件);
5.自然連接(NATURALJOIN):
自然連接是一種特殊的等值連接歧焦,要求兩個(gè)關(guān)系表中進(jìn)行比較的必須是相同的屬性列移斩,無須添加連接條件,并且在結(jié)果中消除重復(fù)的屬性列倚舀。
6.內(nèi)連接(INNERJOIN):
內(nèi)連接基本與自然連接相同叹哭,內(nèi)連接不要求兩屬性列同名,可以用using或on來指定某兩列字段相同的連接條件痕貌。
7.聚合函數(shù):
(1) AVG(arg)函數(shù):對(duì)分組數(shù)據(jù)做平均值運(yùn)算风罩;參數(shù)類型只能是數(shù)字類型。
(2)SUM(arg)函數(shù):對(duì)分組數(shù)據(jù)求和舵稠;參數(shù)類型只能是數(shù)字類型超升。
(3)MIN(arg)函數(shù):求分組中最小數(shù)據(jù)入宦;參數(shù)類型可以是字符、數(shù)字室琢、日期。
(4)MAX(arg)函數(shù):求分組中最大數(shù)據(jù)涯肩;參數(shù)類型可以是字符、數(shù)字病苗、日期。
(5)COUNT 函數(shù):返回一個(gè)表中的行數(shù)症汹。
8.數(shù)據(jù)組(group by):
通過group by子句對(duì)結(jié)果按某條件進(jìn)行分組硫朦;通過having子語(yǔ)句約束背镇。