Mysql學(xué)習(xí)筆記(三)對(duì)表數(shù)據(jù)的增刪改查。

? ? ? ? 這一部分是最簡(jiǎn)單的,也是最麻煩的。簡(jiǎn)單是因?yàn)槠鋵?shí)只包括增刪該插四個(gè)部分。大體上看,增加數(shù)據(jù)、刪除數(shù)據(jù)、修改數(shù)據(jù)、查詢數(shù)據(jù)都不麻煩啊,我們?nèi)粘6际浅S玫摹_@個(gè)誰不會(huì)呢?以前在培訓(xùn)機(jī)構(gòu)學(xué)mysql的時(shí)候,我就知道,程序員的成長(zhǎng)路程上的一個(gè)瓶頸就在于數(shù)據(jù)庫。如何書寫高維護(hù)性的sql語句,如何能保持高維護(hù)性的同時(shí)又保持執(zhí)行的高效率,這是個(gè)難題。我最近在做一個(gè)比較棘手的項(xiàng)目,常常left join 5~6張表,掃表10幾萬,查詢速度慢的驚人。10幾萬還僅僅是測(cè)試數(shù)據(jù),等真正的項(xiàng)目上線,數(shù)據(jù)量可能會(huì)達(dá)到百萬級(jí)別。因此低效率的mysql 語句,可能程序直接就崩潰了。

? ? ? ?因此關(guān)于數(shù)據(jù)這部分的增刪改插是最難的,也是至關(guān)重要的,一定要學(xué)好。但我們今天僅僅書寫最簡(jiǎn)單的增刪該插,后面的博客將會(huì)持續(xù)深入的去整理相關(guān)方面的知識(shí)。

增加數(shù)據(jù):

   insert into 表名 (字段1, 字段2, 字段3, 字段n) values (值1,值2,值3,值4);

? ? ? ?這個(gè)比較簡(jiǎn)單。這是一條通用語句。可以值inset一條數(shù)據(jù),也是insert多條數(shù)據(jù)。這個(gè)在《mysql學(xué)習(xí)筆記(二)對(duì)表結(jié)構(gòu)的增刪改查》的測(cè)試sql里面有。可以參考一下,這里就不重復(fù)貼代碼了。

? ? ? ?注意事項(xiàng):

? ? ? ? ? ? ? ? ? ? 向char 、varchar 、text 以及日期型的字段插入時(shí),字段值要用單引號(hào)括起來。

? ? ? ? ? ? ? ? ? ? 向自增型auto_increment字段插入數(shù)據(jù)時(shí),建議插入null值,此時(shí)字段將向自增型字段插入下一個(gè)編號(hào)。其實(shí)我平時(shí)都直接不寫。

? ? ? ? ? ? ? ? ? ? 向默認(rèn)值約束字段插入數(shù)據(jù)時(shí),字段值可以使用default關(guān)鍵字,表示插入的是該字段的默認(rèn)值。

? ? ? ? ? ? ? ? ? ? 插入新紀(jì)錄時(shí),需要注意表之間的外鍵約束關(guān)系,原則上先給父表插入數(shù)據(jù),然后給子表插入數(shù)據(jù)。

?

刪除數(shù)據(jù):

? ? ? 刪除數(shù)據(jù)是比較危險(xiǎn)的操作,平時(shí)在開發(fā)測(cè)試階段,可能會(huì)用到,但是到了真正的項(xiàng)目上線階段,是不會(huì)有delete權(quán)限的。

? ? ? 語法: delete ?from 表名 where 條件;

? ? ? delete from classes where class_no = 53; ? (可以繼續(xù)用《mysql學(xué)習(xí)筆記(二)對(duì)表結(jié)構(gòu)的增刪改查》中的測(cè)試sql);

? ? ? 強(qiáng)調(diào)一句,刪除數(shù)據(jù)與修改數(shù)據(jù),不加條件都是臭流氓。

?

修改數(shù)據(jù):

? ? ? 修改數(shù)據(jù)也是很危險(xiǎn)的操作,在項(xiàng)目上線的時(shí)候,只有某些表的某些字段允許更改。

? ? ? 語法:update 表名 set 字段名=字段值 ?where 條件。

? ? ? update classes set class_name=’roverliang’ where class_no=52;

? ? ? 強(qiáng)調(diào)一句,刪除數(shù)據(jù)與修改數(shù)據(jù),不加條件都是臭流氓。

?

查詢數(shù)據(jù):

? ? ?基本上項(xiàng)目中有90%以上關(guān)于數(shù)據(jù)庫的操作是查詢操作。因此查詢語句寫的好不好,將直接體現(xiàn)出一個(gè)程序員的編程能力。

? ? ?反對(duì)那些人,一看到很長(zhǎng)sql語句就搖頭表示否定。他們從一些資料中得知,sql語句寫的長(zhǎng)會(huì)使執(zhí)行效率下降、簡(jiǎn)直對(duì)長(zhǎng)長(zhǎng)的mysql語句是避而遠(yuǎn)之。將本來能一氣呵成的mysql硬生生的分成了幾個(gè)零散的片段。

? ? ?對(duì)于我們搞技術(shù)的人來說,憑感覺是不對(duì)的。一切要以事實(shí)為基礎(chǔ),sql執(zhí)行快慢優(yōu)劣不是憑感覺拍腦袋決定的。真正決定sql執(zhí)行速度的還是mysql本身,所以遇到疑惑的,就放進(jìn)mysql里跑一跑。那個(gè)快那個(gè)慢,就高下立見了。

? ? ?如果兩者執(zhí)行時(shí)間幾乎相當(dāng),當(dāng)然要毫不猶豫的選用一氣呵成的sql。好維護(hù)啊!能夠大大的減少代碼量。

? ? ?有些朋友可能會(huì)反駁說,那么長(zhǎng)一段sql,看著都煩人,怎么會(huì)好維護(hù)呢?這其實(shí)與個(gè)人習(xí)慣有關(guān),對(duì)于長(zhǎng)的sql語句,我個(gè)人平時(shí)是這么寫的,不知道對(duì)不對(duì),請(qǐng)大家給指點(diǎn)下。

? ? ??

復(fù)制代碼
#長(zhǎng)長(zhǎng)的sql;
?
select 字段1,字段2,字段3,字段n

from ?表一 ?as ?t1,表二 ?as ?t2 ,表三 ?as ?t3
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
left join ? ?表四 ?as ?t4 ?on t1.字段1 = ?t4.字段1
left join ? ?表五 ?as ?t5 ?on t1.字段2 = ?t5.字段2

where ? ? ? ?t1.字段1=1 and t2.字段2=2 and t3.字段3 > 3?

group ? ? ? ?by ? ? t1. 字段1 ? ?

order ? ? ? ?by ? ? t1

limit ? ? ? ?1,5;

?
復(fù)制代碼
總之,一切的原則是要邏輯清晰,排版美觀,能對(duì)齊的一定要對(duì)齊。

將代碼當(dāng)作白居易的詩歌來寫,力求簡(jiǎn)練,但要兼顧可讀性,讓三歲小兒與七十歲老嫗可懂。

將代碼當(dāng)作平面設(shè)計(jì)作品來寫, 等號(hào)之間、變量之間排版整齊。代碼段與代碼段之間錯(cuò)落有致,整齊劃一。

不要吝嗇空格與換行符。將代碼想象為數(shù)據(jù)流,讓代碼有流動(dòng)的空間。

?以上就是Mysql學(xué)習(xí)筆記(三)對(duì)表數(shù)據(jù)的增刪改查。的內(nèi)容,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)(www.php.cn)!?

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享