文章目錄
1、索引:
(1)數據庫索引:
(2)索引的做用:
(3)索引分類:
(4)建立索引的原則依據:
(5)建立索引的辦法:
2、事務:
(1)事務概念:
(2)事務的四大特性:
(3)事務的操做:
3、兩表相連查詢:
1、索引:
(1)數據庫索引:
一、在數據庫中,索引使數據程序無須對整個表進行掃描,就能夠在其中找到所需數據;
二、數據庫中的索引是某個表中一列或者若干列值的集合,以及物理標識這些值的數據頁的邏輯指針清單。
(2)索引的做用:
一、數據庫可以大大加快查詢速率;
二、下降數據庫的 IO 成本,而且索引還能夠下降數據庫的排序成本;
三、經過建立惟一性索引保證數據表數據的惟一性;
四、加快表與表之間的鏈接;
五、分組和排序的時候,能夠大大減小分組和排序時間
(3)索引分類:
一、普通索引 :最基本的索引類型,並且沒有惟一性之類的限制;
二、惟一性索引 :與普通索引基本類似,區別在於,索引列的全部值都只能出現一次,即必須惟一;
三、主鍵 :主鍵是一種惟一性索引,必須指定爲 「 primary key 」 ;
四、全文索引 :mysql 從3.23.23版本開始支持全文索引和全文檢索,在mysql 中,全文索引的索引類型爲 fulltext ,全文索引能夠在 varchar 或者 text 類型的列上建立;
五、單列索引與多列索引:索引能夠是單列上建立的索引,也能夠是在多列上建立的索引。
(4)建立索引的原則依據:
表的主鍵、外鍵必須有索引;
數據量超過 300 行的表應該有索引;
常常與其餘表進行鏈接的表,在鏈接字段上應該創建索引;
惟一性太差的字段不適合創建索引;
更新太頻繁的字段不適合建立索引;
常常出如今 where 子句中的字段,特別是大表的字段,應該創建索引;
索引應該創建在選擇性高的字段上;
索引應該創建在小字段上,對於大的文本字段甚至超長字段,不要創建索引。
(5)建立索引的辦法:
一、建立普通索引:
##建立普通索引
create index 要定義索引名稱 on 表名 (列名1,列名2....);
##查看索引
show index from info;
##刪除索引
drop index index_age on info;
例如,咱們針對下面這張表,給年齡這列建立一個索引:mysql
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
二、建立惟一性索引:
create unique index <索引的名字> on tablename(列的列表);
##另種方式:
更改表建構方式建立:alter table 表名 add index 索引名稱 (列名);
##第三種方式:能夠在建立表的時候直接定義
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
三、建立主鍵索引:
##在建立新表的時候
creata table tablename ([..],primary key (列的列表));
##在已有的表上設置一個
alter table tablename add primary key (列的列表);
四、建立全文索引:
create fulltext index 索引名稱 on 表名(列的列表);
五、建立組合索引:
create index 索引名稱 on 表名 (列的列表1,列的列表2.....);
六、查看索引:
show index from tablename;
show keys from tablename;
2、事務:
(1)事務概念:
簡單的說就是把全部的命令做爲一個總體一塊兒提交或者撤銷,要麼一塊兒都執行,要麼一塊兒都不執行。
(2)事務的四大特性:
一、原子性:全部元素都必須做爲一個總體提交或回滾,任何元素失敗,則整個事務都失敗;
例如,咱們平時下載軟件等,若是中途遇到故障等致使安裝失敗,就會退回到安裝軟件前的狀態。
二、一致性:事務開始以前,數據處於統1、一致的狀態;事務完成以後,再次回到一致轉態。
三、隔離性:全部併發事務彼此獨立,互不相干、影響。
四、持久性:一旦事務被提交,就會被永久地保留在數據庫中。
(3)事務的操做:
默認狀況下,mysql 的事務都是自動提交的,當 sql 語句提交時事務便自動提交;
手動對事務進行控制的辦法(事務處理命令控制或者使用 set命令控制):
一、事務處理命令控制事務:
begin :開始一個事務;
commit :提交一個事務;
rollback :回滾一個事務;
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
接下來,咱們開始作回滾操做,想回到哪一個節點,就回到那個存檔點便可:
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
要想回滾到最初狀態,直接使用 rollback 命令:
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
二、使用 set 命令進行控制:
set autocommit=0 :禁止自動提交;
set autocommit=1 :開啓自動提交;
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
3、兩表相連查詢:
例如,下面有兩張表,第一張名爲 suer;第二種名爲 hob,由於這兩張表中有部分信息時相關聯的,如何操做:
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
輸入如下命令,將兩張表相關聯:
一、直接關聯:
select * from user inner join hob on user.hobby=hob.id;
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)
二、還能夠按條件關聯:
select user.name,hob.name from user inner join hob on user.hobby=hob.id;
![Mysql ------ 索引+ 事務](http://static.javashuo.com/static/loading.gif)