根據《MySQL必知必會》差缺補漏知識點(時隔3個月,我又回來啦)
目錄
前言:
上一篇部落格還是在10月份的時候發的,現在讓我們再次開啟技術之海吧。首先簡單的談談我對這本書的看法,它真的很適合快速開發入手(特別是當你僅僅只是想開發一個小demo的時候),基本上你簡單的看完關於資料庫的建立刪除以及表的增刪改查操作之後,你就可以結合自己學到的JDBC來進行開發。因為現在的一些demo都是很簡單的,也很少會用到子查詢這些較複雜的地方,所以很快就可以入門,而且它的知識點還是很全的。
不過我們從學校方面來看,正常入門都是先學習SQL,然後才是去寫各種語句,如果要進一步去學習理論,那麼SQL是必須的。
好啦,現在我們從書裡面去找到我們遺漏掉的知識點吧,和我一起看看,看看你是否也遺漏了呢?
第一章 瞭解SQL
1、資料庫和資料庫管理系統的區別(DBMS):雖然沒有那麼重要,但是還是要注意一下,我們經常使用的其實是DBMS,而不是資料庫。
第二章 MySQL簡介
1、MySQL是一種DBMS,即它是一種資料庫軟體。(這裡我自己對於為什麼會有MySQL、Oracle、SQLserver的理解是:SQL是標準委員會定製用來操作DBMS的,但是對於不同的資料庫軟體它們的語法略有不同,所以才會有專門針對MySQL的SQL,專門針對SQLserver的SQL,如果你都用過,你就會發現其實區別不是很大,但是也一定要注意使用呀!)。
2、DBMS可分為兩類:一類為基於共享檔案系統的DBMS(例如Microsoft Access),還有一類就是基於客戶機-伺服器的DBMS(例如:MySQL)。
第三章 使用MySQL
1、現在用Windows系統開發一些小demo比較多,所以很少用到命令列執行操作,但是這裡我們還是很有必要熟悉一下,因為之後會在Unix/Linux系統開發比較多。
你可以看看還記得以下的幾個命令嗎?
user database; show databases; show tables; show columns from table; show status; show create database; show create table;
我在這篇部落格裡面都列舉了主要的操作,可以去康康哦。
第四章 檢索資料
1、關於萬用字元(*)用起來的確很爽,但是除非你確實需要表中的每個列,否則最好不要用,雖然會省事(的確,哈哈哈),但是檢索不需要的列通常會降低檢索和應用程式的效能。
2、還記得DISTINCT關鍵字嗎?就是指示MySQL只返回不同的值(例如:select distinct id from student)。
3、記住limit 1是第二行,這點和java的索引相似(即0是第一行)。還有limit 4 offset 3意為從第三行開始取4行,也有(limit offset,size;)
第五章 排序檢索資料
1、有一個概念需要解釋一下,我們檢索出來的資料並不是以純粹的隨機順序顯示的,如果不排序,資料一般將以它在底層表中出現的順序顯示(這可以是最初新增到表中的順序,但是如果資料後來進行更新或刪除,則此順序將會受到MySQL重用回收儲存空間的影響)。
第六章 過濾資料
1、還記得在同時使用order by和where字句的時候,order by應該在where之後。當然還有having它是對子句結果的過濾。
2、還記得空值檢查嗎?例如:select id from student where name is null;(這裡需要注意,我們在過濾返回的時候不會返回具有NULL值的行)。
第七章 資料過濾
1、我們要記住and操作符優先順序是比or操作符優先順序高的,所以某些時候我們可以使用圓括號來達到我們設定計算次序的目的。
2、MySQL中的NOT,支援NOT對IN、BETWEEN和EXISTS字句取反。
第八章 用萬用字元進行過濾
1、回憶一下萬用字元:LIKE(其實從技術上來說是謂詞)、%、_
第九章 用正則表示式進行搜尋
1、正則表示式是用來匹配文字的特殊的串(字元集合)。
2、舉個例子,檢索列name包含文字100的所有行:
select name from student where name REGEXP '100' order by name;
我們這裡回顧一下REGEXP的知識
(1)基本字元匹配
輸入:select name from student where name REGEXP '.000' order by name;
輸出:name
jj 1000
kk 2000
分析:這裡使用了正則表示式.000。其中.是正則表示式中一個特殊的字元(表示匹配任意的一個字元)。
(2)進行OR匹配,使用|,例如select name from student where name REGEXP '1000|2000' order by name;
(3)匹配任意單一字元,可通過指定一組[和]括起來的字元來完成,例如:
輸入:select name from student where name REGEXP '[123] Ton' order by name;
輸出:name
1 ton anil
2 ton anvil
分析:這裡使用了正則表示式[123] Ton。[123]定義一組字元,它的意思是匹配1或2或3。
(4)匹配範圍
集合可用來定義要匹配的一個或多個字元。例如有[0-9]或者[a-z]。
(5)匹配特殊字元
為了匹配特殊字元,必須使用\\為前導,\\-表示查詢-。
(6)匹配字元類
我們可以使用預定義的字符集,有:
(7)匹配多個例項
對匹配的數目進行更強的控制,可以使用正則表示式重複元字元來完成,有:
(8)定位符
為了匹配特定位置的文字,使用定位符有:
第十章 建立計算欄位
1、Concat()拼接串,即把多個串連線起來形成一個較長的串。
2、函式RTrim()函式去掉值右邊的所有空格;Trim函式去掉左右兩邊的空格,以及LTrim去掉串左邊的空格。
例如句子:select Concat(RTrim(name),'(',RTrim(id),')') from student order by name;
第十一章 使用資料處理函式
1、這裡介紹了日期處理函式和文字處理函式,在我自己的開發中其實大多都是在後端進行處理,而不是資料庫,不過還是有必要了解這個的。
第十二章 彙總資料
1、這幾個聚集函式要記住哦:
第十三章 分組資料
1、這裡需要注意一下having和where的差別,where在資料分組前進行過濾,having在資料分組後進行過濾。
第十四章 使用子查詢,第十五章 聯結表,第十六章 建立高階聯結,第十七章 組合查詢
這部分的知識在SQL還是挺重要的,如果沒有掌握的話建議去找例子學習,只有自己敲才可更好的掌握,我們這裡就很快走過啦~
第十八章 全文字搜尋
1、並非所有引擎都支援全文字搜尋,最常用的引擎MyISAM和InnoDB,前者支援全文字搜尋,後者不支援。
2、可以使用Match()和Against()執行全文字搜尋。
第十九章 插入資料
1、還記得insert插入多行的寫法嗎?
insert into student(id,name,sex,age) values('123','jj','man','34'),values('1234','kk','man','34');
第二十章 更新和刪除資料
1、update和delete應該記得把。
第二十一章 建立和操縱表
1、需要知道幾個引擎:
InnoDB是一個可靠的事務處理引擎,不支援全文字搜尋;
MEMORY在功能上等同於MuISAM,但由於資料儲存在記憶體(不是磁碟)中,速度很快,特別適合於臨時表;
MyISAM是一個性能極高的引擎,它支援全文字搜尋,但不支援事務處理。
2、更新表的操作,例如新增一個列:alter table student add hobby CHAR(20);刪除一個列:alter table student drop column hobby;
3、重命名錶有:rename table studnt to student11;
第二十二章 使用檢視
1、create view建立,drop view viewname刪除。我自己在開發中沒有怎麼使用到,所以在合理就大致看看吧,但是要知道它的作用我覺得就是讓我們寫語句更加簡潔。
第二十三章 使用儲存過程,第二十四章 使用遊標,第二十五章 使用觸發器
這一部分的知識算是高階部分吧,可以去學習一下
第二十六章 控制事務處理
1、這個在開發中挺多的,JDBC中我們就自己使用,所以要記住一些簡單的命令。
第二十七章 全球化和本地化
1、這個其實就是設定好字符集,必過一般挺長的,都是找度娘康康(doge)。
第二十八 安全管理,第二十九章 資料庫維護,第三十章 改善效能
1、就看看就好吧。
總結:
如果學過SQL的語法再來看《MySQL必知必會》真的很快,也可以當做自己複習的書籍來進行閱讀,我是根據自己遺漏來進行整理的文章,所以有很多地方是有所欠缺的,後半部分覺得需要自己投入時間去琢磨,僅僅是看概念是不行的,所以也沒有過多的提及(高階部分)。這個專欄終於推薦了一本書emmmm,之後每個月都保持學習更新,沖沖衝!