bcp out 带列名导出_从零开始学习 MySQL 系列索引、视图、导入和导出
閱讀本文大概需要 8?分鐘
前言上篇文章我們學習了數據庫和數據表操作語句,今天我們學習下數據庫索引,視圖,導入和導出的知識。作為基礎篇,不會涉及到關于索引和視圖的高級應用和核心概念,但是基本操作大家會了解,尤其是關于索引的內容,學會建立恰當的索引可以大大提高數據庫的查詢效率,后續會深入拓展相關知識,敬請關注呀~(想看看周末還有多少愛學習的小伙伴,你們在哪里呀,O(∩_∩)O哈哈~)1、目錄索引
視圖
導入
導出
2、步驟
在正式開始本實驗內容之前,需要先下載相關代碼。
該代碼可以新建一個數據庫,名為 mysql_shiyan ,并在 mysql_shiyan 數據庫中建 4 個表(department,employee,project,table_1),然后向其中插入數據。
其中創建數據庫和數據表語句可以在這里下載。
git?clone?https://github.com/rongweihe/MoreThanCode/tree/master/mysql_shiyan/SQL;下載完成后,輸入命令開啟 MySQL 服務并使用 root 用戶登錄:#打開 MySQL 服務sudo service mysql start#使用 root 用戶登錄mysql?-u?root下載的 SQL6 目錄下,有兩個文件 MySQL-06.sql 和 in.txt,其中第一個文件用于創建數據庫并向其中插入數據,第二個文件用于測試數據導入功能。如果之前的數據庫還存在,首先把 mysql_shiyan 數據庫刪掉,執行命令:source?/home/MySQL_05_01.sql;輸入命令運行第一個文件,搭建數據庫并插入數據:mysql>?source?/home/mysql_sql/SQL6/MySQL-06.sql;
3、索引
索引是一種可以提高數據庫檢索速度的一種數據結構。它的作用相當于一本書的目錄,可以根據目錄中的頁碼快速找到需要的內容。
當表中有大量記錄的時候,若需要對表進行查詢,沒有索引的情況下,走的是全表搜索;將所有記錄一一取出,和查詢條件進行對比,然后返回滿足條件的記錄。
這樣的方式會執行大量磁盤 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 表名字; 查看剛才新建的索引:
在使用 SELECT 語句查詢的時候,語句中 WHERE 里面的條件,會自動判斷有沒有可用的索引。
比如有一個用戶表,它擁有用戶名(username)和個人簽名(note)兩個字段。其中用戶名具有唯一性,并且格式有一定的限制,我們給用戶名加上一個唯一索引;個性簽名格式多變,而且允許不同用戶使用重復的簽名,不加任何索引。
這時候,如果要查找某一用戶,使用語句
?select?*?from?user?where?username=??和?select?*?from?user?where?note=??性能是有很大差距的,對建立了索引的用戶名進行條件查詢會比沒有索引的個性簽名條件查詢快幾倍,在數據量大的時候,這個差距會更大。
但是也要注意:一些字段不適合創建索引,比如性別,這個字段存在大量的重復記錄,索引帶來的效率在這里就不太合適,甚至會拖累數據庫,導致數據冗余和額外的 CPU 開銷。
具體原因涉及到聚集索引和非聚集索引,我們后面在深入展開。
比如下面的例子:可以看到相同的 sql,加索引之后比不加索引慢許多。
4、視圖
視圖是從一個或多個表中導出來的表,是一種虛擬存在的表。它就像一個窗口,通過這個窗口可以看到系統專門提供的數據,這樣,用戶可以視圖是從一個或多個表中導出來的表,是一種虛擬存在的表。
它就像一個窗口,通過這個窗口可以看到系統專門提供的數據,這樣,用戶可以不用看到整個數據庫中的數據,而只關心對自己有用的數據。
注意理解視圖是虛擬的表:
數據庫中只存放了視圖的定義,而沒有存放視圖中的數據,這些數據存放在原來的表中;
使用視圖查詢數據時,數據庫系統會從原來的表中取出對應的數據;
視圖中的數據依賴于原來表中的數據,一旦表中數據發生改變,顯示在視圖中的數據也會發生改變;
在使用視圖的時候,可以把它當作一張表。
創建視圖的語句格式為:
CREATE?VIEW?視圖名(列a,列b,列c)?AS?SELECT?列1,列2,列3?FROM?表名字;可見創建視圖的語句,后半句是一個 SELECT 查詢語句,所以視圖也可以建立在多張表上,只需在 SELECT 語句中使用子查詢或連接查詢。
現在我們創建一個簡單的視圖,名為 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;5、導入
我們來學習一下,如何導入一個純數據文件,該文件中將包含與數據表字段相對應的多條數據,這樣可以快速導入大量數據,除此之外,還有可以用 SQL 語句的導入方式,語法為:source *.sql 這是實驗中經常用到的。
兩者之間的不同是:數據文件導入方式只包含數據,導入規則由數據庫系統完成;SQL 文件導入相當于執行該文件中包含的 SQL 語句,可以實現多種操作,包括刪除,更新,新增,甚至對數據庫的重建。
數據文件導入,可以把一個文件里的數據保存進一張表。
導入語句格式為:
LOAD?DATA?INFILE?'文件路徑和文件名'?INTO?TABLE?表名字;現在 SQL6 目錄下有一個名為 in.txt 的文件,我們嘗試把這個文件中的數據導入數據庫 mysql_shiyan 的 employee 表中。
由于導入導出大量數據都屬于敏感操作,根據 mysql 的安全策略,導入導出的文件都必須在指定的路徑下進行,在 mysql 終端中查看路徑變量:(我這里設置了任意目錄可以導入)
注意到 secure_file_priv 變量指定安全路徑 ,要導入數據文件,需要將該文件移動到安全路徑下。
secure-file-priv 參數是用來限制mysql導入導出到哪個目錄的。
查閱官方文檔找到secure-file-priv的值有以下幾種情況:
使用命令 vim SQL6/in.txt 查看 in.txt 文件中的內容:
可以看到其中僅僅包含了數據本身,沒有任何的 SQL 語句
再使用以下命令以 root 用戶登錄數據庫,再連接 mysql_shiyan 數據庫:
查看一下沒有導入數據之前,employee 表中的數。
現在執行導入語句,文件中的數據成功導入 employee 表:
6、導出
導出與導入是相反的過程,是把數據庫某個表中的數據保存到一個文件之中。導出語句基本格式為:
SELECT?列1,列2?INTO?OUTFILE?'文件路徑和文件名'?FROM?表名字;注意:語句中 “文件路徑” 之下不能已經有同名文件。
如果導出報錯,可能是 MySQL 沒有權限對相應目錄進行操作, 查看系統變量 tmpdir, 如下所示,tmpdir 變量指定路徑為 /tmp。
現在我們把整個 employee 表的數據導出到 /var/tmp/mysql-files/ 目錄下,導出文件命名為 out.txt 具體語句為:
SELECT?*?INTO?OUTFILE?'/var/tmp/mysql-files/out.txt'?FROM?employee;用 vim 可以查看導出文件?/var/tmp/mysql-files/out.txt 的內容:也可以使用 sudo cat /var/tmp/mysql-files/out.txt 命令查看。
數據導出成功。
7、總結
在本節實驗中我們學習了索引、視圖、導入和導出的知識。
今天的學習就到這里啦。
如果各位老鐵感覺寫的不錯,歡迎點在看、留言哦。
祝大家周末愉快~
PS:如果大家在閱讀的過程中,有什么建議和看法,非常歡迎在下方留言,每個留言我都會認真看的。
參考:
https://www.shiyanlou.com/courses/9
—?【 THE END 】—本公眾號全部博文已整理成一個目錄,請在公眾號里回復「m」獲取!3T技術資源大放送!包括但不限于:Java、C/C++,Linux,Python,大數據,人工智能等等。在公眾號內回復「1024」,即可免費獲取!!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的bcp out 带列名导出_从零开始学习 MySQL 系列索引、视图、导入和导出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: access驱动程序_Linux驱动程序
- 下一篇: excel表格不够怎么添加_Excel表