什么是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語法支持
插入數據——
數據庫經常被多個客戶訪問,對處理什么請求以及用什么次序處理進行管理是MySQL的任務波俄。INSERT操作可能很耗時(特別是有很多索引需要更新時)晨逝,而且它可能降低等待處理的SELECT語句的性能。懦铺,如果數據檢索是最重要的(通常是這樣)捉貌,則你可以通過在INSERT和INTO之間添加關鍵字LOW_PRIORITY,指示MySQL降低INSERT語句的優(yōu)先級。
從別的表里讀出來插入? insert into customers(列名)select xxx from another_table
更新和刪除數據——
創(chuàng)建和操縱表——
與其他DBMS一樣,MySQL有一個具體管理和處理數據的內部引擎胞锰。在你使用CREATE TABLE語句時灾锯,該引擎具體創(chuàng)建表,而在你使用SELECT語句或進行其他數據庫處理時胜蛉,該引擎在內部處理你的請求挠进。多數時候色乾,此引擎都隱藏在DBMS內誊册,不需要過多關注它。
alter table 表名 add column 列名 CHAR(20)
小心使用ALTER TABLE 使用ALTER TABLE要極為小心麦锯,應該在進行改動前做一個完整的備份(模式和數據的備份)。數據庫表的更改不能撤銷琅绅,如果增加了不需要的列扶欣,可能不能刪除它們。類似地,如果刪除了不應該刪除的列料祠,可能會丟失該列中的所有數據骆捧。
刪除表(刪除整個表而不是其內容)非常簡單,使用DROP TABLE語句即可
使用視圖——
視圖就是個虛擬表髓绽,與包含數據的表不一樣敛苇,視圖只包含使用時動態(tài)檢索數據的查詢。
應該將視圖用于檢索(SELECT語句)而不用于更新(INSERT、UPDATE和DELETE)驰徊,視圖提供了一種MySQL的SELECT語句層次的封裝笤闯,可用來簡化數據處理以及重新格式化基礎數據或保護基礎數據。
使用存儲過程——
? 一般來說航攒,存儲過程的編寫比基本SQL語句復雜磺陡,編寫存儲過程需要更高的技能,更豐富的經驗漠畜。
? 你可能沒有創(chuàng)建存儲過程的安全訪問權限币他。許多數據庫管理員限制存儲過程的創(chuàng)建權限,允許用戶使用存儲過程憔狞,但不允許他們創(chuàng)建存儲過程蝴悉。
之前工作時候有用到過一個獲取上一個交易日的函數瘾敢,應該就是個存儲過程拍冠,回頭看一下
使用游標——
由前幾章可知硝枉,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ā)布回退(與回退整個事務處理不同)说榆。
安全管理——
MySQL用戶賬號和信息存儲在名為mysql的MySQL數據庫中邦鲫。
use mysql;
select user from user;
show grants for hyd, 數據庫權限使用 grant select on 庫名.* 表名 hyd
改善性能——
重要>牡稹I裥凇!古今!
附錄——
mysql的數據類型
sql運行的慢是因為什么敦迄?
https://zhuanlan.zhihu.com/p/62941196