閱讀——mysql必知必會

什么是sql?

SQL(發(fā)音為字母S-Q-L或sequel)是結構化查詢語言(Structured QueryLanguage)的縮寫宰啦。SQL是一種專門用來與數據庫通信的語言展氓。與其他語言(如沙兰,英語以及Java和Visual Basic這樣的程序設計語言)不一樣北秽,SQL由很少的詞構成锄蹂,這是有意而為的畴蹭。設計SQL的目的是很好地完成一項任務坦仍,即提供一種從數據庫中讀寫數據的簡單有效的方法。

什么是mysql叨襟?

我們在前一章中介紹了數據庫和SQL繁扎。正如所述,數據的所有存儲、檢索梳玫、管理和處理實際上是由數據庫軟件——DBMS(數據庫管理系統(tǒng))完成的爹梁。MySQL是一種DBMS(database manage system),即它是一種數據庫軟件提澎。

DBMS可分為兩類:一類為基于共享文件系統(tǒng)的DBMS姚垃,另一類為基于客戶機——服務器的DBMS。前者(包括諸如Microsoft Access和FileMaker)用于桌面用途盼忌,通常不用于高端或更關鍵的應用积糯。MySQL、Oracle以及Microsoft SQL Server等數據庫是基于客戶機——服務器的谦纱。服務器部分是負責所有數據訪問和處理的一個軟件看成,運行在稱為數據庫服務器的計算機上,數據跨嘉、數據添加川慌、刪除和數據更新的所有請求都由服務器軟件完成〕ズ桑客戶機是與用戶打交道的軟件。

? 服務器軟件為MySQL DBMS唠椭。你可以在本地安裝的副本上運行跳纳,也可以連接到運行在你具有訪問權的遠程服務器上的一個副本。

? 客戶機可以是MySQL提供的工具贪嫂、腳本語言(如Perl)寺庄、Web應用開發(fā)語言(如ASP、ColdFusion力崇、JSP和PHP)斗塘、程序設計語言(如C、C++亮靴、Java)等馍盟。

MySQL關系型數據庫于1998年1月發(fā)行第一個版本。它使用系統(tǒng)核心提供的多線程機制提供完全的多線程運行模式茧吊,提供了面向C贞岭、C++、Eiffel搓侄、Java瞄桨、Perl、PHP讶踪、Python以及Tcl等編程語言的編程接口(APIs)芯侥,支持多種字段類型并且提供了完整的操作符支持查詢中的SELECT和WHERE操作。


mysql必知必會講了些啥?

數據篩選——where —— xxx between min and max柱查、xxx is null

數據通配符——like——h%d, d%,%hyd%廓俭、正則表達式

創(chuàng)建計算字段——concat?

數據處理函數—— Trim() 去除空格

匯總數據——AVG()?忽略列值為NULL的行,min,max,sum

分組數據——group by, having過濾分組

使用子查詢——

連結表——

等價于
這種寫法更加被鼓勵物赶,因為不會忘記關聯條件白指,且效率通常會高
聚集函數也可以和聯結一起使用

組合查詢——? union會自動去除重復的行,如果想返回所有匹配行酵紫,可使用UNION ALL而不是UNION告嘲。

全文本搜索——功能與like差不多,但是會返回類似相似度的東西奖地,like不支持相似度排序橄唬,fulltext類型的match & against語法支持

基礎用法,全文本搜索提供了簡單LIKE搜索不能提供的功能参歹。而且仰楚,由于數據是索引的,全文本搜索還相當快犬庇。


拓展搜索僧界,第一行包含詞anvils,因此等級最高臭挽。第二行與anvils無關捂襟,但因為它包含第一行中的兩個詞(customer和recommend),所以也被檢索出來欢峰。第3行也包含這兩個相同的詞葬荷,但它們在文本中的位置更靠后且分開得更遠,因此也包含這一行纽帖,但等級為第三宠漩。


布爾搜索,這次只返回一行懊直。這一次仍然匹配詞heavy扒吁,但-rope*明確地指示MySQL排除包含rope*(任何以rope開始的詞,包括ropes)的行室囊,這就是為什么上一個例子中的第一行被排除的原因瘦陈。

插入數據——

數據庫經常被多個客戶訪問,對處理什么請求以及用什么次序處理進行管理是MySQL的任務波俄。INSERT操作可能很耗時(特別是有很多索引需要更新時)晨逝,而且它可能降低等待處理的SELECT語句的性能。懦铺,如果數據檢索是最重要的(通常是這樣)捉貌,則你可以通過在INSERT和INTO之間添加關鍵字LOW_PRIORITY,指示MySQL降低INSERT語句的優(yōu)先級。

從別的表里讀出來插入? insert into customers(列名)select xxx from another_table

更新和刪除數據——

更新數據語法
刪除數據語法趁窃,如果想從表中刪除所有行牧挣,不要使用DELETE⌒崖剑可使用TRUNCATE TABLE語句瀑构,它完成相同的工作,但速度更快(TRUNCATE實際是刪除原來的表并重新創(chuàng)建一個表刨摩,而不是逐行刪除表中的數據)寺晌。

創(chuàng)建和操縱表——

如果你僅想在一個表不存在時創(chuàng)建它,應該在表名后給出IF NOT EXISTS澡刹。
主鍵值必須唯一呻征。即,表中的每個行必須具有唯一的主鍵值罢浇。如果主鍵使用單個列陆赋,則它的值必須唯一。如果使用多個列嚷闭,則這些列的組合值必須唯一攒岛。

與其他DBMS一樣,MySQL有一個具體管理和處理數據的內部引擎胞锰。在你使用CREATE TABLE語句時灾锯,該引擎具體創(chuàng)建表,而在你使用SELECT語句或進行其他數據庫處理時胜蛉,該引擎在內部處理你的請求挠进。多數時候色乾,此引擎都隱藏在DBMS內誊册,不需要過多關注它。

外鍵不能跨引擎暖璧,那么案怯,你應該使用哪個引擎?這有賴于你需要什么樣的特性澎办。MyISAM由于其性能和特性可能是最受歡迎的引擎嘲碱。但如果你需要可靠的事務處理,可以使用其他引擎局蚀。

alter table 表名 add column 列名 CHAR(20)

小心使用ALTER TABLE 使用ALTER TABLE要極為小心麦锯,應該在進行改動前做一個完整的備份(模式和數據的備份)。數據庫表的更改不能撤銷琅绅,如果增加了不需要的列扶欣,可能不能刪除它們。類似地,如果刪除了不應該刪除的列料祠,可能會丟失該列中的所有數據骆捧。

刪除表(刪除整個表而不是其內容)非常簡單,使用DROP TABLE語句即可

使用視圖——

視圖就是個虛擬表髓绽,與包含數據的表不一樣敛苇,視圖只包含使用時動態(tài)檢索數據的查詢。

重要的是知道視圖僅僅是用來查看存儲在別處的數據的一種設施顺呕。視圖本身不包含數據枫攀,因此它們返回的數據是從其他表中檢索出來的。在添加或更改這些表中的數據時塘匣,視圖將返回改變過的數據脓豪。
select * from productcustomers where xxx = xxx, 就是一個復用的概念
還有一個用途就是用來格式化數據,比如經常要的格式和原始數據不一致的時候忌卤,創(chuàng)建一個所需格式的視圖往往很方便扫夜,比如這里在供應商后面加上了來源的國家

應該將視圖用于檢索(SELECT語句)而不用于更新(INSERT、UPDATE和DELETE)驰徊,視圖提供了一種MySQL的SELECT語句層次的封裝笤闯,可用來簡化數據處理以及重新格式化基礎數據或保護基礎數據。

使用存儲過程——

使用存儲過程有3個主要的好處棍厂,即簡單颗味、安全、高性能牺弹。顯然浦马,它們都很重要。不過张漂,在將SQL代碼轉換為存儲過程前晶默,也必須知道它的一些缺陷。

? 一般來說航攒,存儲過程的編寫比基本SQL語句復雜磺陡,編寫存儲過程需要更高的技能,更豐富的經驗漠畜。

? 你可能沒有創(chuàng)建存儲過程的安全訪問權限币他。許多數據庫管理員限制存儲過程的創(chuàng)建權限,允許用戶使用存儲過程憔狞,但不允許他們創(chuàng)建存儲過程蝴悉。

如果想要看一個存儲過程的詳情,也是show create procedure ordertotal

之前工作時候有用到過一個獲取上一個交易日的函數瘾敢,應該就是個存儲過程拍冠,回頭看一下

使用游標——

由前幾章可知硝枉,MySQL檢索操作返回一組稱為結果集的行。這組返回的行都是與SQL語句相匹配的行(零行或多行)倦微。使用簡單的SELECT語句妻味,例如,沒有辦法得到第一行欣福、下一行或前10行责球,也不存在每次一行地處理所有行的簡單方法(相對于成批地處理它們)。有時拓劝,需要在檢索出來的行中前進或后退一行或多行雏逾。這就是使用游標的原因。

這邊已經感覺不怎么常用了

使用觸發(fā)器——

insert的時候觸發(fā)觸發(fā)器

管理事務處理——

并非所有引擎都支持事務處理 正如第21章所述郑临,MySQL支持幾種基本的數據庫引擎栖博。正如本章所述,并非所有引擎都支持明確的事務處理管理厢洞。MyISAM和InnoDB是兩種最常使用的引擎仇让。前者不支持明確的事務處理管理,而后者支持躺翻。這就是為什么本書中使用的樣例表被創(chuàng)建來使用InnoDB而不是更經常使用的MyISAM的原因丧叽。如果你的應用中需要事務處理功能,則一定要使用正確的引擎類型公你。事務處理(transaction processing)可以用來維護數據庫的完整性踊淳,它保證成批的MySQL操作要么完全執(zhí)行,要么完全不執(zhí)行陕靠。

在使用事務和事務處理時迂尝,有幾個關鍵詞匯反復出現。下面是關于事務處理需要知道的幾個術語:

? 事務(transaction)指一組SQL語句剪芥;

? 回退(rollback)指撤銷指定SQL語句的過程垄开;

? 提交(commit)指將未存儲的SQL語句結果寫入數據庫表;

? 保留點(savepoint)指事務處理中設置的臨時占位符(place-holder)粗俱,你可以對它發(fā)布回退(與回退整個事務處理不同)说榆。

哪些語句可以回退虚吟? 事務處理用來管理INSERT寸认、UPDATE和DELETE語句。你不能回退SELECT語句串慰。(這樣做也沒有什么意義偏塞。)你不能回退CREATE或DROP操作。

安全管理——

MySQL用戶賬號和信息存儲在名為mysql的MySQL數據庫中邦鲫。

use mysql;

select user from user;

show grants for hyd, 數據庫權限使用 grant select on 庫名.* 表名 hyd

改善性能——

重要>牡稹I裥凇!古今!

附錄——

mysql的數據類型


你可能會認為電話號碼和郵政編碼應該存儲在數值字段中(數值字段只存儲數值數據)屁魏,但是,這樣做卻是不可取的捉腥。如果在數值字段中存儲郵政編碼01234氓拼,則保存的將是數值1234,實際上丟失了一位數字抵碟。需要遵守的基本規(guī)則是:如果數值是計算(求和桃漾、平均等)中使用的數值,則應該存儲在數值數據類型列中拟逮。如果作為字符串(可能只包含數字)使用撬统,則應該保存在串數據類型列中。

sql運行的慢是因為什么敦迄?

https://zhuanlan.zhihu.com/p/62941196


https://mp.weixin.qq.com/s/RemJcqPIvLArmfWIhoaZ1g

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末恋追,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子罚屋,更是在濱河造成了極大的恐慌几于,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沿后,死亡現場離奇詭異沿彭,居然都是意外死亡,警方通過查閱死者的電腦和手機尖滚,發(fā)現死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門喉刘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人漆弄,你說我怎么就攤上這事睦裳。” “怎么了撼唾?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵廉邑,是天一觀的道長。 經常有香客問我倒谷,道長蛛蒙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任渤愁,我火速辦了婚禮牵祟,結果婚禮上,老公的妹妹穿的比我還像新娘抖格。我一直安慰自己诺苹,他們只是感情好咕晋,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著收奔,像睡著了一般掌呜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坪哄,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天站辉,我揣著相機與錄音,去河邊找鬼损姜。 笑死饰剥,一個胖子當著我的面吹牛,可吹牛的內容都是我干的摧阅。 我是一名探鬼主播汰蓉,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼棒卷!你這毒婦竟也來了顾孽?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤比规,失蹤者是張志新(化名)和其女友劉穎若厚,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體蜒什,經...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡测秸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了灾常。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霎冯。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钞瀑,靈堂內的尸體忽然破棺而出沈撞,到底是詐尸還是另有隱情,我是刑警寧澤雕什,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布缠俺,位于F島的核電站,受9級特大地震影響贷岸,放射性物質發(fā)生泄漏壹士。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一凰盔、第九天 我趴在偏房一處隱蔽的房頂上張望墓卦。 院中可真熱鬧倦春,春花似錦户敬、人聲如沸落剪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忠怖。三九已至,卻和暖如春抄瑟,著一層夾襖步出監(jiān)牢的瞬間凡泣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工皮假, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鞋拟,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓惹资,卻偏偏與公主長得像贺纲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子褪测,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355