1旨巷、SQL中的字符串都要用單引號(hào)
不用單引號(hào)也可能會(huì)執(zhí)行,但是會(huì)有類型轉(zhuǎn)換,而類型轉(zhuǎn)換設(shè)計(jì)函數(shù)操作寸宏,引起索引失效或邏輯錯(cuò)誤的問(wèn)題歧蒋。
2土砂、SQL書寫順序和邏輯順序要一致
- order by要放在句末
- select a,b from t order by c ,c不在select項(xiàng)中谜洽,數(shù)據(jù)庫(kù)引擎是怎么處理的萝映?
MySQL進(jìn)行數(shù)據(jù)的邏輯存儲(chǔ),以page為單位阐虚,會(huì)抽取所有數(shù)據(jù)序臂。 - select id1 as fid from t where fid = 2 能執(zhí)行嗎?
不能;執(zhí)行順序是先where奥秆,再select逊彭。
3、內(nèi)連接與外鏈接
內(nèi)聯(lián)接(典型的聯(lián)接運(yùn)算构订,使用像 = 或 <> 之類的比較運(yùn)算符)
包括相等聯(lián)接和自然聯(lián)接侮叮。
內(nèi)聯(lián)接使用比較運(yùn)算符根據(jù)每個(gè)表共有的列的值匹配兩個(gè)表中的行。例如悼瘾,檢索 students和courses表中學(xué)生標(biāo)識(shí)號(hào)相同的所有行囊榜。外聯(lián)接
外聯(lián)接可以是左向外聯(lián)接、右向外聯(lián)接或完整外部聯(lián)接亥宿。
在 FROM子句中指定外聯(lián)接時(shí)卸勺,可以由下列幾組關(guān)鍵字中的一組指定:
1)LEFT JOIN或LEFT OUTER JOIN
左向外聯(lián)接的結(jié)果集包括 LEFT OUTER子句中指定的左表的所有行,而不僅僅是聯(lián)接列所匹配的行烫扼。如果左表的某行在右表中沒(méi)有匹配行曙求,則在相關(guān)聯(lián)的結(jié)果集行中右表的所有選擇列表列均為空值。
2)RIGHT JOIN 或 RIGHT OUTER JOIN
右向外聯(lián)接是左向外聯(lián)接的反向聯(lián)接映企。將返回右表的所有行悟狱。如果右表的某行在左表中沒(méi)有匹配行,則將為左表返回空值卑吭。
3)FULL JOIN 或 FULL OUTER JOIN
完整外部聯(lián)接返回左表和右表中的所有行芽淡。當(dāng)某行在另一個(gè)表中沒(méi)有匹配行時(shí),則另一個(gè)表的選擇列表列包含空值豆赏。如果表之間有匹配行挣菲,則整個(gè)結(jié)果集行包含基表的數(shù)據(jù)值。-
考慮這個(gè)SQL語(yǔ)句:
select count(*) from a2 left join b2 on a2.id = b2.id
這個(gè)語(yǔ)句沒(méi)有意義:因?yàn)閍2作為左表掷邦,數(shù)據(jù)項(xiàng)都會(huì)被顯示白胀,而count將每次都得到相同的結(jié)果。
-
外鏈接的內(nèi)部處理方式:(可以從擴(kuò)展執(zhí)行計(jì)劃中查看具體的執(zhí)行過(guò)程抚岗,類似于單步調(diào)試)
有where條件的left join查詢或杠,內(nèi)部將以內(nèi)連接處理。
4宣蔚、語(yǔ)法細(xì)節(jié)
-
update同時(shí)更新多條向抢,以逗號(hào)“,”將update的值分隔,一并執(zhí)行:
update a1 set a = 1,b = 2 where ...
delete from t where id;
可以正常執(zhí)行:id有值的數(shù)據(jù)都滿足胚委。truncate和delete *
truncate是原子事務(wù)挟鸠,沒(méi)有日志記錄(或者說(shuō)只有一條語(yǔ)句執(zhí)行的日志),所以不能進(jìn)行事務(wù)回滾亩冬。
delete操作將產(chǎn)生詳細(xì)的日志艘希,IO頻繁,支持事務(wù)回滾。
5覆享、Quanr數(shù)據(jù)庫(kù)命名規(guī)范
庫(kù)佳遂、表、字段命名
- 必須使用小寫字母撒顿,并采用下劃線分割丑罪;
- 不超過(guò)32個(gè)字符;
- 必須見名知意核蘸,與事務(wù)巍糯、產(chǎn)品線相關(guān);
- 禁用MySQL保留字客扎;
- 臨時(shí)表以tmp_做前綴,日期做后綴罚斗,如:tmp_hourse_xxx_20170301
- 備份表以bak_做前綴徙鱼,日期做后綴,如:bak_hourse_xxx_20170301
索引命名
- 小寫字母针姿,下劃線分割袱吆,禁用駝峰式;
- 非唯一索引:idx_字段名稱[_字段名稱]
- 唯一索引:uniq_字段名稱[_字段名稱]
6距淫、Quanr數(shù)據(jù)操作基礎(chǔ)規(guī)范
- 使用INNODB存儲(chǔ)引擎并且使用業(yè)務(wù)不相關(guān)自增ID為主鍵绞绒;
- 使用UTF8 / UTFMB4字符集;
- 所有表榕暇、字段都要加注釋蓬衡;
- 禁止在數(shù)據(jù)庫(kù)中存放圖片、文件等彤枢;
- 每張數(shù)據(jù)表數(shù)據(jù)量控制在5000W以內(nèi)狰晚;
- 禁止在線上做數(shù)據(jù)庫(kù)壓力測(cè)試;
- 禁止從測(cè)試缴啡、開發(fā)環(huán)境直連數(shù)據(jù)庫(kù)壁晒。