mysqldump导出数据库视图_mysql数据库的基本操作:索引、视图,导入和导出,备份和恢复...
1、索引:
索引是一種與表有關的結構,它的作用相當于書的目錄,可以根據(jù)目錄中的頁碼快速找到所需的內容。
當表中有大量記錄時,若要對表進行查詢,沒有索引的情況是全表搜索:將所有記錄一一取出,和查詢條件進行一一對比,然后返回滿足條件的記錄。這樣做會消耗大量數(shù)據(jù)庫系統(tǒng)時間,并造成大量磁盤 I/O 操作。
而如果在表中已建立索引,在索引中找到符合查詢條件的索引值,通過索引值就可以快速找到表中的數(shù)據(jù),可以大大加快查詢速度。
對一張表中的某個列建立索引,有以下兩種語句格式:
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的索引
索引的效果是加快查詢速度,當表中數(shù)據(jù)不夠多的時候是感受不出它的效果的。這里我們使用命令?SHOW INDEX FROM 表名字;?查看剛才新建的索引:
在使用 SELECT 語句查詢的時候,語句中 WHERE 里面的條件,會自動判斷有沒有可用的索引。
比如有一個用戶表,它擁有用戶名(username)和個人簽名(note)兩個字段。其中用戶名具有唯一性,并且格式具有較強的限制,我們給用戶名加上一個唯一索引;個性簽名格式多變,而且允許不同用戶使用重復的簽名,不加任何索引。
這時候,如果你要查找某一用戶,使用語句?select * from user where username=??和?select * from user where note=??性能是有很大差距的,對建立了索引的用戶名進行條件查詢會比沒有索引的個性簽名條件查詢快幾倍,在數(shù)據(jù)量大的時候,這個差距只會更大。
一些字段不適合創(chuàng)建索引,比如性別,這個字段存在大量的重復記錄無法享受索引帶來的速度加成,甚至會拖累數(shù)據(jù)庫,導致數(shù)據(jù)冗余和額外的 CPU 開銷。
2、視圖:
視圖是從一個或多個表中導出來的表,是一種虛擬存在的表。它就像一個窗口,通過這個窗口可以看到系統(tǒng)專門提供的數(shù)據(jù),這樣,用戶可以不用看到整個數(shù)據(jù)庫中的數(shù)據(jù),而只關心對自己有用的數(shù)據(jù)。
注意理解視圖是虛擬的表:
數(shù)據(jù)庫中只存放了視圖的定義,而沒有存放視圖中的數(shù)據(jù),這些數(shù)據(jù)存放在原來的表中;
使用視圖查詢數(shù)據(jù)時,數(shù)據(jù)庫系統(tǒng)會從原來的表中取出對應的數(shù)據(jù);
視圖中的數(shù)據(jù)依賴于原來表中的數(shù)據(jù),一旦表中數(shù)據(jù)發(fā)生改變,顯示在視圖中的數(shù)據(jù)也會發(fā)生改變;
在使用視圖的時候,可以把它當作一張表。
創(chuàng)建視圖的語句格式為:
CREATE VIEW 視圖名(列a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字;
可見創(chuàng)建視圖的語句,后半句是一個 SELECT 查詢語句,所以視圖也可以建立在多張表上,只需在 SELECT 語句中使用子查詢或連接查詢,這些在之前的實驗已經(jīng)進行過。
現(xiàn)在我們創(chuàng)建一個簡單的視圖,名為?v_emp,包含v_name,v_age,v_phone三個列:
例如:CREATE VIEW v_emp (v_name,v_age,v_phone) AS SELECT name,age,phone FROM employee;
3、導入:
此處講解的是導入一個純數(shù)據(jù)文件,該文件中將包含與數(shù)據(jù)表字段相對應的多條數(shù)據(jù),這樣可以快速導入大量數(shù)據(jù),除此之外,還有用 SQL 語句的導入方式,語法為:source *.sql?這是實驗中經(jīng)常用到的。兩者之間的不同是:數(shù)據(jù)文件導入方式只包含數(shù)據(jù),導入規(guī)則由數(shù)據(jù)庫系統(tǒng)完成;SQL 文件導入相當于執(zhí)行該文件中包含的 SQL 語句,可以實現(xiàn)多種操作,包括刪除,更新,新增,甚至對數(shù)據(jù)庫的重建。
數(shù)據(jù)文件導入,可以把一個文件里的數(shù)據(jù)保存進一張表。導入語句格式為:
LOAD DATA INFILE '文件路徑和文件名' INTO TABLE 表名字;
由于導入導出大量數(shù)據(jù)都屬于敏感操作,根據(jù) mysql 的安全策略,導入導出的文件都必須在指定的路徑下進行,在 mysql 終端中查看路徑變量:
注意到 secure_file_priv 變量指定安全路徑為?/var/lib/mysql-files/?,要導入數(shù)據(jù)文件,需要將該文件移動到安全路徑下。
查看文件里的內容為:
導入之前的表數(shù)據(jù):
導入之后的表數(shù)據(jù):
4、導出:
導出與導入是相反的過程,是把數(shù)據(jù)庫某個表中的數(shù)據(jù)保存到一個文件之中。導出語句基本格式為:
SELECT 列1,列2 INTO OUTFILE '文件路徑和文件名' FROM 表名字;
注意:語句中 “文件路徑” 之下不能已經(jīng)有同名文件。
現(xiàn)在我們把整個 employee 表的數(shù)據(jù)導出到 /var/lib/mysql-files/ 目錄下,導出文件命名為?out.txt?具體語句為:
SELECT * INTO OUTFILE '/var/lib/mysql-files/out.txt' FROM employee;
查看導出的文件:
4、備份:
數(shù)據(jù)庫中的數(shù)據(jù)十分重要,出于安全性考慮,在數(shù)據(jù)庫的使用中,應該注意使用備份功能。
備份與導出的區(qū)別:導出的文件只是保存數(shù)據(jù)庫中的數(shù)據(jù);而備份,則是把數(shù)據(jù)庫的結構,包括數(shù)據(jù)、約束、索引、視圖等全部另存為一個文件。
mysqldump?是 MySQL 用于備份數(shù)據(jù)庫的實用程序。它主要產生一個 SQL 腳本文件,其中包含從頭重新創(chuàng)建數(shù)據(jù)庫所必需的命令 CREATE TABLE INSERT 等。
使用 mysqldump 備份的語句:
mysqldump -u root 數(shù)據(jù)庫名>備份文件名; #備份整個數(shù)據(jù)庫
mysqldump -u root 數(shù)據(jù)庫名 表名字>備份文件名; #備份整個表
mysqldump 是一個備份工具,因此該命令是在終端中執(zhí)行的,而不是在 mysql 交互環(huán)境下。
5、恢復:
用備份文件恢復數(shù)據(jù)庫,其實我們早就使用過了。在本次實驗的開始,我們使用過這樣一條命令:
source /tmp/SQL6/MySQL-06.sql
也可以新建一個數(shù)據(jù)庫:
mysql -u root ??#因為在上一步已經(jīng)退出了MySQL,現(xiàn)在需要重新登錄
CREATEDATABASEtest;??#新建一個名為test的數(shù)據(jù)庫
mysql -u root #因為在上一步已經(jīng)退出了MySQL,現(xiàn)在需要重新登錄
use test #連接數(shù)據(jù)庫test
SHOW TABLES; #查看test數(shù)據(jù)庫的表
查看表中數(shù)據(jù):
練習:
使用子查詢或連接,建立多張表的視圖,再用 SELECT 語句展示出視圖的內容。
總結
以上是生活随笔為你收集整理的mysqldump导出数据库视图_mysql数据库的基本操作:索引、视图,导入和导出,备份和恢复...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: netmiko 记录日志_netmiko
- 下一篇: 支持字典_【多测师小课堂】python数