談?wù)凪ysql

首頁圖

本文對數(shù)據(jù)庫Mysql做了一些介紹滚澜,望對你有所幫助耕渴。


(1)使用了brew進行安裝

brew install mysql
/usr/bin/mysqladmin -u root password "111111"http://對初始密碼修改宿饱。

(2)文件所屬位置

   /usr/share/mysq/下是安裝目錄
    /var/lib/mysql/下是mysql數(shù)據(jù)庫塌忽、錯誤日志和socket文件
   /usr/bin/文件下存儲著mysql的各種命令
   /etc/init.d/ 可用來啟動和停止mysql服務(wù)
  /etc/my.cnf是mysql的配置文件
  netstat  -tanp | grep mysql 查看端口號(3306)

(3)初始登錄退出操作

   登錄mysql : mysql -u root -p 密碼
   啟動/關(guān)閉/重新啟動 service mysqld start/stop/restart 

(4)數(shù)據(jù)庫的增刪改查

  create database shujuku;//創(chuàng)建數(shù)據(jù)庫
 show databases;//顯示數(shù)據(jù)庫列表 
 drop database shujuku;//  刪除數(shù)據(jù)庫
 use shujuku;//選擇要使用的數(shù)據(jù)庫

 create table stud(name  varchar(20)  ,  age int  ,score float);//創(chuàng)建表 
 show tables;//顯示表
 drop table stud;刪除表 
 alter table stud rename to studinfo;修改表名

alter table stud add address char(40);//向表中增加字段 
alter table stud modify address char(10);//修改字段的數(shù)據(jù)類型
alter table stud drop address;//刪除字段
desc stud;//查看表中有哪些字段

insert into stud values(‘zhang san’,20,98.6),(‘xiao ming’,19,60);//插入數(shù)據(jù)  
select  *from stud  where age >= 20 and score < 60;//查詢信息
delete from stud where name = ‘zhang san’;//刪除信息
update  stud set age = 25 where name = ‘xiao ming’;//更新信息  

2院仿、數(shù)據(jù)庫中的視圖
視圖:它是一種虛擬的表毙玻,是從數(shù)據(jù)庫中一個或多個表中導(dǎo)出來的表豌蟋。使用視圖查詢數(shù)據(jù)時,數(shù)據(jù)庫會從原來的表中取出對應(yīng)的數(shù)據(jù)桑滩。
創(chuàng)建視圖:

創(chuàng)建視圖語句
參數(shù)解釋

a梧疲、在單表上創(chuàng)建視圖(這里列舉了一個例子)

  create  view  department_view1(name,function,location)  
  as select d_name,function,address 
  from department;

b、在多表上創(chuàng)建視圖(這里列舉了一個例子)

 create  algorithm = merge  view      
 worker_view1(name,deparment,sex,age,address)
 as select name,deparment.d_name,sex,2009-birthday,address
 from worker,deparment 
 where worker.d_id = deparment.d_id
 with local check option;

查看視圖

  DESCRIBE worker_view1;(縮寫:DESC worker_view1)//查看視圖的定義
  show table status like worker_view1;//查看視圖基本信息

3运准、使用正則表達式查詢信息

正則表達式查詢表

Example:

select * from info where name REGEXP ‘^l’;//從info 表的name 字段中查詢以字母‘l’開頭的記錄
select * from info where name REGEXP ‘c$’;//從info 表的name 字段中查詢以字母‘c’結(jié)尾的記錄
select * from info where name REGEXP ‘^l..y$’;//從info 表的name 字段中查詢以字母‘l’開頭,以字母y結(jié)尾幌氮,中間兩個任意字符的記錄
select * from info where name REGEXP ‘a(chǎn)*c’;//從info 表的name 字段中查詢字母‘c’之前出現(xiàn)過0個或多個‘a(chǎn)’的記錄
select * from info where name REGEXP ‘a(chǎn)+c’;//從info 表的name 字段中查詢字母‘c’之前出現(xiàn)過至少一個‘a(chǎn)’的記錄)

4、mysql性能優(yōu)化
目的:為了使mysql數(shù)據(jù)庫運行速度更快胁澳、占用的磁盤空間更小该互。
數(shù)據(jù)庫管理員可以使用如下語句查詢mysql數(shù)據(jù)庫的性能:

show status like 'value';
value參數(shù)的選擇項

(1)查詢優(yōu)化:

explain select * from student \G   //分析select 語句的執(zhí)行情況
上述語句執(zhí)行情況

上述字段的含義如下:


字段含義

使用索引,創(chuàng)建索引韭畸,如:

create index index_name on student(name);//在name字段上建立一個名為index_name 的索引

(2)優(yōu)化數(shù)據(jù)庫結(jié)構(gòu):
a宇智、將字段很多的表分解成為一個表

example分析

b、增加中間表
有時候需要經(jīng)常查詢兩個表中的幾個字段胰丁,如果經(jīng)常進行鏈表查詢随橘,會降低mysql的查詢速度,因此可將這幾個字段抽取出來單獨建立一個表锦庸,然后從兩個表中將數(shù)據(jù)導(dǎo)入進來机蔗。
c、增加冗余字段


解析

d甘萧、優(yōu)化插入記錄的速度
1>禁用索引


禁用索引

2>禁用唯一性檢查
禁用唯一性檢查

3>優(yōu)化insert語句
優(yōu)化insert語句

e萝嘁、分析表、檢查表和優(yōu)化表

分析表的作用是檢查關(guān)鍵字的分布---->


分析表
參數(shù)分析

檢查表的作用是檢查表是否存在錯誤---->

檢查表

優(yōu)化表的主要作用是消除刪除或者更新造成的空間浪費--->

優(yōu)化表
注:

5扬卷、數(shù)據(jù)庫中的觸發(fā)器
觸發(fā)器是由insert牙言、update、delete 等事件來觸發(fā)某種特定操作邀泉,滿足觸發(fā)器的觸發(fā)條件時嬉挡,數(shù)據(jù)庫系統(tǒng)就會執(zhí)行觸發(fā)器中定義的程序語句钝鸽,這樣做可以保證某些操作之間的一致性。
創(chuàng)建觸發(fā)器:
有一個執(zhí)行語句的觸發(fā)器:

一個執(zhí)行語句的觸發(fā)器

有多個執(zhí)行語句的觸發(fā)器:

多個執(zhí)行語句的觸發(fā)器

6庞钢、數(shù)據(jù)庫復(fù)制原理


數(shù)據(jù)庫復(fù)制

分三步:
(1)主服務(wù)器把數(shù)據(jù)更新記錄到二進制日志中拔恰;
(2)從服務(wù)器把主服務(wù)器的二進制日志拷貝到自己的中繼日志中;
(3)從服務(wù)器重做中繼日志的時間基括,把更新應(yīng)用到自己的數(shù)據(jù)庫上颜懊;
注:從服務(wù)器有兩個線程:一個是I/O線程,負(fù)責(zé)讀取主服務(wù)器的二進制日志风皿,并將其拷貝到自己的中繼日志中河爹;另一個是SQL 線程,負(fù)責(zé)復(fù)制執(zhí)行中繼日志桐款。


7咸这、數(shù)據(jù)庫中事務(wù)的概念
事務(wù):作為單個邏輯工作單元執(zhí)行的一系列操作。
事務(wù)滿足4個特性:
(1)原子性(Atomic):事務(wù)要么全部執(zhí)行魔眨,要么全都不執(zhí)行媳维,不可能只處理一個子集。
(2)一致性(Consistent):事務(wù)在完成時遏暴,必須確保所有的數(shù)據(jù)都處于一致狀態(tài)侄刽。
(3)隔離性(Insulation):由并發(fā)事務(wù)所做的修改必須與其他任何并發(fā)事務(wù)所做的修改隔離,通過“鎖”實現(xiàn)朋凉。通常有四種隔離級別:read uncommited(讀取未提交的內(nèi)容州丹,也稱為臟讀),read committed(讀取提交內(nèi)容杂彭,支持不可重復(fù)讀)墓毒,repeatable read(可重讀,這是MySQL 的默認(rèn)事務(wù)隔離級別盖灸,會導(dǎo)致幻讀蚁鳖,即當(dāng)用戶讀取某一范圍的數(shù)據(jù)行時,另一個事務(wù)又在該范圍內(nèi)插入了新行赁炎,當(dāng)用戶再讀取該范圍的數(shù)據(jù)行時醉箕,會發(fā)現(xiàn)有新的“幻影” 行),serializable(可串行化徙垫,它通過強制事務(wù)排序讥裤,使之不可能相互沖突,從而解決幻讀問題)
(4)持久性(Duration):事務(wù)完成之后姻报,它對于系統(tǒng)的影響是持久的己英,既使出現(xiàn)致命的系統(tǒng)故障。


8吴旋、myisam與innodb损肛、Memory的差別
(1)MyISAM引擎
MyISAM引擎是MySQL默認(rèn)的存儲引擎厢破,MyISAM不支持事務(wù)和行級鎖,所以MyISAM引擎速度很快治拿,性能優(yōu)秀摩泪。MyISAM可以對整張表加鎖,支持并發(fā)插入劫谅,支持全文索引见坑。
//如果你不需要事務(wù)支持,通常我們建表時都選用MyISAM存儲引擎捏检,像新聞表之類都沒有必要支持事務(wù)荞驴。
(2)InnoDB引擎
InnoDB是專為事務(wù)設(shè)計的存儲引擎,支持事務(wù)贯城,支持外鍵熊楼,擁有高并發(fā)處理能力。但是冤狡,InnoDB在創(chuàng)建索引和加載數(shù)據(jù)時孙蒙,比MyISAM慢项棠。
//涉及到貨幣操作一般都需要支持事務(wù)悲雳,什么都能錯,錢不能出錯香追。
(3)Memory引擎(采用哈希索引)
內(nèi)存表合瓢,Memory引擎將數(shù)據(jù)存儲在內(nèi)存中,表結(jié)構(gòu)不是存儲在內(nèi)存中的透典,查詢時不需要執(zhí)行磁盤I/O操作晴楔,所以要比MyISAM和InnoDB快很多倍,但是數(shù)據(jù)庫斷電或是重啟后峭咒,表中的數(shù)據(jù)將會丟失税弃,表結(jié)構(gòu)不會丟失.
//如果你需要將SESSION數(shù)據(jù)存在數(shù)據(jù)庫中,那么使用Memory引擎是個不錯的選擇凑队。

區(qū)別圖

9则果、數(shù)據(jù)庫范式的概念
1NF:第一范式。如果關(guān)系模式R的所有屬性的值域中每一個值都是不可再分解的值漩氨,則稱R屬于第一范式模式西壮。
2NF:第二范式。如果關(guān)系模式R是第一范式叫惊,并且R中每一個非主屬性完全函數(shù)依賴于R的某個候選鍵款青,則稱R為第二范式。
3NF:第三范式霍狰。如果關(guān)系模式R是第二范式抡草,并且R中每一個非主屬性都不傳遞依賴于R的候選鍵饰及,則稱R為第三范式。
BCNF:BC范式康震,如果關(guān)系模式R是第一范式旋炒,且且每個屬性都不傳遞依賴于R的候選鍵,則稱R為BCNF的模式签杈。
4NF:第四范式瘫镇。把同一表內(nèi)的多對多關(guān)系刪除。


10答姥、數(shù)據(jù)庫中索引的深入理解
索引是一種數(shù)據(jù)結(jié)構(gòu)铣除。
InnoDB存儲引擎支持的幾種常見索引:
B+樹索引:并不能找到一個給定健值的具體行,B+樹索引只能找到被查找數(shù)據(jù)行所在的頁鹦付,然后從數(shù)據(jù)庫將頁讀入內(nèi)存尚粘,在內(nèi)存中查找。B+樹索引可以分為聚集索引和輔助索引敲长。
(1)聚集索引

聚集索引

這棵樹的葉節(jié)點data域保存了完整的數(shù)據(jù)記錄郎嫁。這個索引的key是數(shù)據(jù)表的主鍵。按照表的主鍵構(gòu)建一顆B+樹祈噪。鍵值的邏輯順序決定了表中對應(yīng)行(記錄集)在邏輯地址上是連續(xù)的泽铛,注意:很多書上說是在物理地址上連續(xù),其實是指邏輯地址連續(xù)辑鲤。
聚集索引查詢速度快盔腔,葉子節(jié)點的數(shù)據(jù)就是用戶需要查詢的數(shù)據(jù)。聚集索引對于那些經(jīng)常要搜索范圍值的列特別有效月褥。
(2)輔助索引

輔助索引

葉節(jié)點的data域存放的是數(shù)據(jù)記錄的地址弛随,如果指定的Key存在,則取出其data域的值宁赤,然后以data域的值為地址舀透,讀取相應(yīng)數(shù)據(jù)記錄(MYISAM采用此種索引方式)
注:不建議使用過長的字段作為主鍵,因為所有輔助索引都引用主索引决左,過長的主索引會令輔助索引變得過大愕够。
Myisam 和InnoDB索引的區(qū)別:
第一個重大區(qū)別是InnoDB的數(shù)據(jù)文件本身就是索引文件。從上文知道哆窿,MyISAM索引文件和數(shù)據(jù)文件是分離的链烈,索引文件僅保存數(shù)據(jù)記錄的地址。挚躯。
第二個與MyISAM索引的不同是InnoDB的輔助索引data域存儲相應(yīng)記錄主鍵的值而不是地址强衡。


11、數(shù)據(jù)庫中倒排表的概念
對包含有大量數(shù)據(jù)對象的數(shù)據(jù)表或文件進行搜索時码荔,最常用的是針對對象的主關(guān)鍵碼建立索引漩勤。主關(guān)鍵碼可以唯一地標(biāo)識該對象感挥。用主關(guān)鍵碼建立的索引叫做主索引。主索引的每個索引項給出對象的關(guān)鍵碼和對象在表或文件中的存放地址越败。
但在實際應(yīng)用中有時需要針對其它屬性進行搜索触幼。
因此,除主關(guān)鍵碼外究飞,可以把一些經(jīng)常搜索的屬性設(shè)定為次關(guān)鍵碼置谦,并針對每一個作為次關(guān)鍵碼的屬性,建立次索引亿傅。在次索引中媒峡,列出該屬性的所有取值,并對每一個取值建立有序鏈表葵擎,把所有具有相同屬性值的對象按存放地址遞增的順序或按主關(guān)鍵碼遞增的順序鏈接在一起谅阿。次索引的索引項由次關(guān)鍵碼、鏈表長度和鏈表本身等三部分組成酬滤。
如下圖是一個關(guān)于主索引和次索引的例子:


主索引與次索引

倒排表或倒排文件是一種次索引的實現(xiàn)签餐。在次索引中記錄對象存放位置的指針可以用主關(guān)鍵碼表示,可以通過搜索次索引確定該對象的主關(guān)鍵碼盯串,再通過搜索主索引確定對象的存放地址氯檐。在倒排表中各個屬性鏈表的長度大小不一,管理起來比較困難嘴脾。為此引入單元式倒排表男摧。
在單元式倒排表中,索引項中不存放對象的存儲地址译打,存放該對象所在硬件區(qū)域的標(biāo)識。
硬件區(qū)域可以是磁盤柱面拇颅、磁道或一個頁塊奏司,以一次 I / O 操作能存取的存儲空間作為硬件區(qū)域為最好。為使索引空間最小樟插,在索引中標(biāo)識這個硬件區(qū)域時可以使用一個能轉(zhuǎn)換成地址的二進制數(shù)韵洋,整個次索引形成一個(二進制數(shù)的) 位矩陣。

12黄锤、mysql中的varchar與char
(1)varchar與char的區(qū)別
char是固定長度的搪缨,而varchar需要增加一個長度標(biāo)識,處理的時候需要多一次運算鸵熟,所以相對來說char比varchar更快副编。
(2)varchar(50)中50的含義
最多存放50個字節(jié)
(3)int(20)中20的含義
20代表整型的最大顯示寬度,整數(shù)的最大范圍是255

13流强、innodb 有多少種日志
錯誤日志:記錄出錯信息痹届,也記錄一些警告信息或者正確的信息
慢查詢?nèi)罩荆涸O(shè)置一個閾值呻待,將運行時間超過該值的所有SQL 語句都記錄到慢查詢的日志文件中。
二進制日志:記錄對數(shù)據(jù)庫執(zhí)行更改的所有操作
查詢?nèi)罩荆河涗浰袑?shù)據(jù)庫請求的信息队腐,不論這些請求是否得到了正確的執(zhí)行蚕捉。

14、存儲過程
是用戶定義的一系列SQL語句的集合柴淘,涉及特定表或其他對象的任務(wù)迫淹,用戶可以調(diào)用存儲過程。

15为严、SQL注入式攻擊:攻擊者將SQL命令插入到web表單的輸入域或頁面請求的查詢字符串中千绪,欺騙服務(wù)器執(zhí)行惡意的SQL命令。在某些表單中梗脾,用戶輸入的內(nèi)容直接用來構(gòu)造(或者影響)動態(tài)SQL命令荸型,或作為存儲過程的輸入?yún)?shù),這類表單特別容易受到SQL注入式攻擊炸茧。

防范SQL注入式攻擊:
思想-->在利用表單輸入的內(nèi)容構(gòu)造SQL命令之前瑞妇,把所有輸入的內(nèi)容過濾一番。過濾輸入內(nèi)容的方式有以下幾中:

一梭冠、替換單引號辕狰,把所有單獨出現(xiàn)的單引號改成兩個單引號,防止攻擊者修改SQL命令的含義控漠。

二蔓倍、對于用來執(zhí)行查詢的數(shù)據(jù)庫賬戶,限制其權(quán)限盐捷。用不同的用戶執(zhí)行查詢偶翅、插入、更新碉渡、刪除操作聚谁。

三、用存儲過程來執(zhí)行所有的查詢滞诺。SQL參數(shù)的傳遞方式將防止攻擊者利用單引號和連字符實施攻擊形导。此外,它使得數(shù)據(jù)庫權(quán)限可以被限制到只允許特定的存儲過程執(zhí)行习霹,所有的用戶輸入必須遵從被調(diào)用存儲過程的安全上下文朵耕。

四、檢查用戶輸入的合法性淋叶,確信輸入的內(nèi)容只包含合法的數(shù)據(jù)阎曹。數(shù)據(jù)檢查應(yīng)當(dāng)在客戶端和服務(wù)器端都執(zhí)行。

五、將用戶登錄名稱芬膝、密碼等數(shù)據(jù)加密保存望门。

六、檢查提取數(shù)據(jù)的查詢所返回的記錄數(shù)量锰霜。如果程序只要求返回一個記錄筹误,但實際返回的記錄卻超過一行,那就當(dāng)做出錯處理癣缅。

16厨剪、查詢:
Order by默認(rèn)的查詢結(jié)果是按升序排列的。加DESC是按降序排列的友存。

Group by將查詢結(jié)果按某個字段或多個字段進行分組查詢祷膳,字段中值相等的為一組:
(1)Group by與Group_Concat()函數(shù)一起使用,每個分組中的字段值都會顯示出來屡立。
eg:select sex,GROUP_CONCAT(name) from employee GROUP BY sex;
(2)Group by與集合函數(shù)一起使用直晨,可以通過集合函數(shù)計算分組中的總記錄、最大值膨俐、最小值勇皇。
eg:select sex,COUNT(sex) from employee GROUP BY sex;
(3)Group by與HAVING一起使用,可以限制輸出的結(jié)果,只有滿足條件表達式的結(jié)果才會顯示焚刺。
eg:select sex,COUNT(sex) from employee GROUP BY sex HAVING COUNT(sex)>=3;
(4)Group by與WITH ROLLUP一起使用,將會在所有記錄的最后加上一條記錄敛摘,這條記錄是上面所有記錄的總和。

使用SQL語句建立一張臨時表:
create table #Temp(字段1 類型乳愉,字段2 類型)兄淫;

                                                      ------end--------
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蔓姚,隨后出現(xiàn)的幾起案子捕虽,更是在濱河造成了極大的恐慌,老刑警劉巖赂乐,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件薯鳍,死亡現(xiàn)場離奇詭異,居然都是意外死亡挨措,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門崩溪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浅役,“玉大人,你說我怎么就攤上這事伶唯【跫龋” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瞪讼。 經(jīng)常有香客問我钧椰,道長,這世上最難降的妖魔是什么符欠? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任嫡霞,我火速辦了婚禮,結(jié)果婚禮上希柿,老公的妹妹穿的比我還像新娘诊沪。我一直安慰自己,他們只是感情好曾撤,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布端姚。 她就那樣靜靜地躺著,像睡著了一般挤悉。 火紅的嫁衣襯著肌膚如雪渐裸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天装悲,我揣著相機與錄音昏鹃,去河邊找鬼。 笑死衅斩,一個胖子當(dāng)著我的面吹牛盆顾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播畏梆,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼您宪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奠涌?” 一聲冷哼從身側(cè)響起宪巨,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎溜畅,沒想到半個月后捏卓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡慈格,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年怠晴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浴捆。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒜田,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出选泻,到底是詐尸還是另有隱情冲粤,我是刑警寧澤美莫,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站梯捕,受9級特大地震影響厢呵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜傀顾,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一襟铭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锣笨,春花似錦蝌矛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至椭岩,卻和暖如春茅逮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背判哥。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工献雅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人塌计。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓挺身,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锌仅。 傳聞我的和親對象是個殘疾皇子章钾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容