索引
索引的概念
數據庫中的索引與書籍中的目錄類似
在一本書中,無須閱讀整本書,利用目錄就可以快速查找所需信息
書中的目錄是一個詞語列表,其中註明了包含各個詞的頁碼
數據庫索引
在數據庫中,索引使數據庫程序無須對整個表進行掃描,就可以在其中找到所需數據
數據庫中的索引是某個表中一列或者若干列值的集合,以及物理標識這些值的數據頁的邏輯指針清單
優點 快速找到資源
缺點 佔用資源
索引的作用
設置了合適的索引之後,數據庫利用各種快速的定位技術,能夠大大加快查詢速率
特別是當表很大時,或者查詢涉及到多個表時,使用索引可使查詢加快成幹倍
可以降低數據庫的IO成本,並且索引還可以降低數據庫的排序成本
通過創建唯一性索引保證數據表數據的唯一性可以加快表與表之間的連接
在使用分組和排序時,可大大減少分組和排廓時間
索引的分類
普通索引
這是最基本的索引類型,而且它沒有唯一性之類的限制
唯一性索引
這種索引和前面的“普通索引"基本相同,但有一個區別:索引列的所有值都只能出現一次,即必須唯一(允許爲空,只能有一個)
主鍵
主鍵是一種唯一性索引,但它必須指定爲"PRIMARY KEY”
全文索引
MySQL從3.23.23版開始支持全文索引和全文檢索。在MySQL中,全文索引的索引類型爲FULLTEXT,全文索引可以在VARCHAR或者TEXT類型的列上創建
單列索引與多列索引
索引可以是單列上創建的索引,也可以是在多列上創建的索引
創建索引的原則依據
表的主鍵、外鍵必須有索引(外鍵:另一個表的主鍵)
數據量超過300行的表應該有索引
經常與其他表進行連接的表,在連接字段上應該建立索引口
唯一性太差的字段不適合建立索引
更新太頻繁地字段不適合創建索引
經常出現在Where子句中的字段,特別是大表的字段,應該建立索引
索引應該建在選擇性高的字段上
索引應該建在小字段上,對於大的文本字段甚至超長字段,不要建索引
創建索引
根據企業需求選擇了合適的索引之後,可使用CREATE INDEX創建索引
CREATE INDEX加上各個索引關鍵字便可創建各個類型的索引
創建普通索引
CREATE INDEX <索引的名字> ON tablename(列的列表);
普通索引例子
CREATE INDEX salary_index ON IT_salary(薪資);
創建唯一性索引
CREATE UNIQUE INDEX <索引的名字> ON tablename(列的列表);
創建唯一性索引例子
CREATE UNIQUE INDEX salary_unique_index ON IT_salary(姓名);
創建主鍵索引
CREATE TABLE tablename([.…],PRIMARY KEY(列的列表));
ALTER TABLE tablename ADD PRIMARY KEY(列的列表);
主鍵索引例子
ALTER TABLE IT_salary ADD PRIMARY KEY(員工ID);
索引查看
SHOW INDEX FROM tablename;
SHOW KEYS FROM tablename;
查看索引例子
SHOW INDEX FROM IT_salary;
SHOW KEYS FROM IT_salary;
事務
事務是一種機制、一個操作序列,包含了一組數據庫操作命令,並且把所有的命令作爲一個整體一起向系統提交或撤銷操作請求,即這一組數據庫命令要麼都執行,要麼都不執行
事務是一個不可分割的工作邏輯單元,在數據庫系統上執行併發操作時,事務是最小的控制單元
適用於多用戶同時操作的數據庫系統的場景,如銀行、保險公司及證券交易系統等等
通過事務的整體性以保證數據的一致性
特點
原子性(Atomicity)
事務是一個完整的操作,事務的各元素是不可分的(原子的)
事務中的所有元素必須作爲一個整體提交或回滾
如果事務中的任何元素失敗,則整個事務將失敗
一致性(Consistency)
當事務完成時,數據必須處於一致狀態:在事務開始之前,數據庫中存儲的數據處於一致狀態;在正在進行的事務中,數據可能處於不一致的狀態;當事務成功完成時,數據必須再次回到已知的一致狀態
隔離性(lsolation)
對數據進行修改的所有併發事務是彼此隔離的,這表明事務必須是獨立的,它不應以任何方式依賴於或影響其他事務
修改數據的事務可以在另一個使用相同數據的事務開始之前訪問這些數據,或者在另一個使用相同數據的事務結束之後訪問這些數據
持久性(Durability)
事務持久性指不管系統是否發生故障,事務處理的結果都是永久的
一旦事務被提交,事務的效果會被永久地保留在數據庫中
事務的操作
默認情況下MySQL的事務是自動提交的,當sql語句提交時事務便自動提交
手動對事務進行控制的方法
事務處理命令控制
使用set設置事務處理方式
事務處理命令控制事務
begin:開始一個事務
savepoint :存檔點
commit:提交一個事務
rolback [to point_name]:回滾一個事務
使用set命令進行控制
set autocommit=0:禁止自動提交
set autocommit=1:開啓自動提交(默認)
視圖
是一張虛擬的表,數據不存在視圖中,真實表的一個映射
利用條件篩選,分組,排序等產生出一個結果集並且做成持久化保存
真實的表中數據發生變化,視圖也會發生變化
作用
-
方便sql操作,就像一個查詢的快捷鍵
-
不同權限用戶的信息瀏覽
-
安全
創建視圖
create view view_name as 查詢語句
查看視圖
select * from view_name 和查表一樣