索引:
索引是一種與表有關的結構,它的作用相當于書的目錄,可以根據目錄中的頁碼快速找到所需的內容。
當表中有大量記錄時,若要對表進行查詢,沒有索引的情況是全表搜索:將所有記錄一一取出,和查詢條件進行一一對比,然后返回滿足條件的記錄。這樣做會消耗大量數據庫系統時間,并造成大量磁盤 I/O 操作。
而如果在表中已建立索引,在索引中找到符合查詢條件的索引值,通過索引值就可以快速找到表中的數據,可以大大加快查詢速度。
對一張表中的某個列建立索引,有以下兩種語句格式:
ALTER TABLE 表名字 ADD INDEX 索引名 (列名);
CREATE INDEX 索引名 ON 表名字 (列名);
ALTER TABLE employee ADD INDEX idx_id (id); #在employee表的id列上建立名為idx_id的索引
CREATE INDEX idx_name ON employee (name); #在employee表的name列上建立名為idx_name的索引
索引的效果是加快查詢速度,當表中數據不夠多的時候是感受不出它的效果的。這里我們使用命令 SHOW INDEX FROM 表名字; 查看剛才新建的索引
視圖:
視圖是從一個或多個表中導出來的表,是一種虛擬存在的表。它就像一個窗口,通過這個窗口可以看到系統專門提供的數據,這樣,用戶可以不用看到整個數據庫中的數據,而只關心對自己有用的數據。
注意理解視圖是虛擬的表:
數據庫中只存放了視圖的定義,而沒有存放視圖中的數據,這些數據存放在原來的表中;
使用視圖查詢數據時,數據庫系統會從原來的表中取出對應的數據;
視圖中的數據依賴于原來表中的數據,一旦表中數據發生改變,顯示在視圖中的數據也會發生改變;
在使用視圖的時候,可以把它當作一張表。
創建視圖的語句格式為:
CREATE VIEW 視圖名(列a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字;
可見創建視圖的語句,后半句是一個SELECT查詢語句,所以視圖也可以建立在多張表上,只需在SELECT語句中使用子查詢或連接查詢。
可見創建視圖的語句,后半句是一個SELECT查詢語句,所以視圖也可以建立在多張表上,只需在SELECT語句中使用子查詢或連接查詢,這些在之前的實驗已經進行過。
CREATE VIEW v_emp(v_name,v_age,v_phone) AS SELECT name,age,phone FROM employee;
導入:
導入操作,可以把一個文件里的數據保存進一張表。導入語句格式為:
LOAD DATA INFILE '文件路徑' INTO TABLE 表名字;
原表:
LOAD DATA INFILE '/tmp/SQL6/in.txt' INTO TABLE employee;
導入數據后:
導出:
導出與導入是相反的過程,是把數據庫某個表中的數據保存到一個文件之中。導出語句基本格式為:
SELECT 列1,列2 INTO OUTFILE '文件路徑和文件名' FROM 表名字;
注意:語句中 “文件路徑” 之下不能已經有同名文件。
現在我們把整個employee表的數據導出到 /tmp 目錄下,導出文件命名為 out.txt 具體語句為:
SELECT * INTO OUTFILE '/tmp/out.txt' FROM employee;
備份:
數據庫中的數據或許十分重要,出于安全性考慮,在數據庫的使用中,應該注意使用備份功能。
備份與導出的區別:導出的文件只是保存數據庫中的數據;而備份,則是把數據庫的結構,包括數據、約束、索引、視圖等全部另存為一個文件。
mysqldump 是 MySQL 用于備份數據庫的實用程序。它主要產生一個 SQL 腳本文件,其中包含從頭重新創建數據庫所必需的命令CREATE TABLE INSERT 等。
使用 mysqldump 備份的語句:
mysqldump -u root 數據庫名>備份文件名; #備份整個數據庫
mysqldump -u root 數據庫名 表名字>備份文件名; #備份整個表
例如我要備份一個叫mysql_shiyan的數據庫,備份出來的叫做bak.sql
mysqldump -u root mysql_shiyan > bak.sql;
用ls命令進行查看
你可以用gedit查看備份文件的內容,可以看見里面不僅保存了數據,還有所備份的數據庫的其他信息。
恢復:
source /tmp/bak.sql
還有另一種方式恢復數據庫,但是在這之前我們先使用命令新建一個空的數據庫 test:
mysql -u root #因為在上一步已經退出了MySQL,現在需要重新登錄
CREATE DATABASE test; #新建一個名為test的數據庫
quit命令退出MySQL,然后輸入語句進行恢復,把剛才備份的 bak.sql 恢復到 test 數據庫:
mysql -u root test < bak.sql
我們輸入命令查看 test 數據庫的表,便可驗證是否恢復成功
mysql -u root #因為在上一步已經退出了MySQL,現在需要重新登錄
use test #連接數據庫test
SHOW TABLES; #查看test數據庫的表