日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

bcp out 带列名导出_从零开始学习 MySQL 系列索引、视图、导入和导出

發(fā)布時間:2024/7/23 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bcp out 带列名导出_从零开始学习 MySQL 系列索引、视图、导入和导出 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

閱讀本文大概需要 8?分鐘

前言上篇文章我們學(xué)習(xí)了數(shù)據(jù)庫和數(shù)據(jù)表操作語句,今天我們學(xué)習(xí)下數(shù)據(jù)庫索引,視圖,導(dǎo)入和導(dǎo)出的知識。作為基礎(chǔ)篇,不會涉及到關(guān)于索引和視圖的高級應(yīng)用和核心概念,但是基本操作大家會了解,尤其是關(guān)于索引的內(nèi)容,學(xué)會建立恰當(dāng)?shù)乃饕梢源蟠筇岣邤?shù)據(jù)庫的查詢效率,后續(xù)會深入拓展相關(guān)知識,敬請關(guān)注呀~(想看看周末還有多少愛學(xué)習(xí)的小伙伴,你們在哪里呀,O(∩_∩)O哈哈~)1、目錄
  • 索引

  • 視圖

  • 導(dǎo)入

  • 導(dǎo)出

2、步驟

在正式開始本實驗內(nèi)容之前,需要先下載相關(guān)代碼。

該代碼可以新建一個數(shù)據(jù)庫,名為 mysql_shiyan ,并在 mysql_shiyan 數(shù)據(jù)庫中建 4 個表(department,employee,project,table_1),然后向其中插入數(shù)據(jù)。

其中創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表語句可以在這里下載。

git?clone?https://github.com/rongweihe/MoreThanCode/tree/master/mysql_shiyan/SQL;下載完成后,輸入命令開啟 MySQL 服務(wù)并使用 root 用戶登錄:#打開 MySQL 服務(wù)sudo service mysql start#使用 root 用戶登錄mysql?-u?root下載的 SQL6 目錄下,有兩個文件 MySQL-06.sql 和 in.txt,其中第一個文件用于創(chuàng)建數(shù)據(jù)庫并向其中插入數(shù)據(jù),第二個文件用于測試數(shù)據(jù)導(dǎo)入功能。
如果之前的數(shù)據(jù)庫還存在,首先把 mysql_shiyan 數(shù)據(jù)庫刪掉,執(zhí)行命令:source?/home/MySQL_05_01.sql;輸入命令運行第一個文件,搭建數(shù)據(jù)庫并插入數(shù)據(jù):mysql>?source?/home/mysql_sql/SQL6/MySQL-06.sql;

3、索引

索引是一種可以提高數(shù)據(jù)庫檢索速度的一種數(shù)據(jù)結(jié)構(gòu)。它的作用相當(dāng)于一本書的目錄,可以根據(jù)目錄中的頁碼快速找到需要的內(nèi)容。

當(dāng)表中有大量記錄的時候,若需要對表進(jìn)行查詢,沒有索引的情況下,走的是全表搜索;將所有記錄一一取出,和查詢條件進(jìn)行對比,然后返回滿足條件的記錄。

這樣的方式會執(zhí)行大量磁盤 I/O 操作,并花費大量數(shù)據(jù)庫系統(tǒng)的時間。

而如果在表中已經(jīng)建立索引,在索引中找到符合查詢條件的索引值,通過索引值就可以快速找到表中的數(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的索引

索引的效果是加快查詢速度,當(dāng)表中數(shù)據(jù)不夠多的時候是感受不出它的效果的。這里我們使用命令 SHOW INDEX FROM 表名字; 查看剛才新建的索引:

在使用 SELECT 語句查詢的時候,語句中 WHERE 里面的條件,會自動判斷有沒有可用的索引。

比如有一個用戶表,它擁有用戶名(username)和個人簽名(note)兩個字段。其中用戶名具有唯一性,并且格式有一定的限制,我們給用戶名加上一個唯一索引;個性簽名格式多變,而且允許不同用戶使用重復(fù)的簽名,不加任何索引。

這時候,如果要查找某一用戶,使用語句

?select?*?from?user?where?username=??和?select?*?from?user?where?note=??

性能是有很大差距的,對建立了索引的用戶名進(jìn)行條件查詢會比沒有索引的個性簽名條件查詢快幾倍,在數(shù)據(jù)量大的時候,這個差距會更大。

但是也要注意:一些字段不適合創(chuàng)建索引,比如性別,這個字段存在大量的重復(fù)記錄,索引帶來的效率在這里就不太合適,甚至?xí)侠蹟?shù)據(jù)庫,導(dǎo)致數(shù)據(jù)冗余和額外的 CPU 開銷。

具體原因涉及到聚集索引和非聚集索引,我們后面在深入展開。

比如下面的例子:可以看到相同的 sql,加索引之后比不加索引慢許多。

4、視圖

視圖是從一個或多個表中導(dǎo)出來的表,是一種虛擬存在的表。它就像一個窗口,通過這個窗口可以看到系統(tǒng)專門提供的數(shù)據(jù),這樣,用戶可以視圖是從一個或多個表中導(dǎo)出來的表,是一種虛擬存在的表。

它就像一個窗口,通過這個窗口可以看到系統(tǒng)專門提供的數(shù)據(jù),這樣,用戶可以不用看到整個數(shù)據(jù)庫中的數(shù)據(jù),而只關(guān)心對自己有用的數(shù)據(jù)。

注意理解視圖是虛擬的表:

  • 數(shù)據(jù)庫中只存放了視圖的定義,而沒有存放視圖中的數(shù)據(jù),這些數(shù)據(jù)存放在原來的表中;

  • 使用視圖查詢數(shù)據(jù)時,數(shù)據(jù)庫系統(tǒng)會從原來的表中取出對應(yīng)的數(shù)據(jù);

  • 視圖中的數(shù)據(jù)依賴于原來表中的數(shù)據(jù),一旦表中數(shù)據(jù)發(fā)生改變,顯示在視圖中的數(shù)據(jù)也會發(fā)生改變;

  • 在使用視圖的時候,可以把它當(dāng)作一張表。

創(chuàng)建視圖的語句格式為:

CREATE?VIEW?視圖名(列a,列b,列c)?AS?SELECT?列1,列2,列3?FROM?表名字;

可見創(chuàng)建視圖的語句,后半句是一個 SELECT 查詢語句,所以視圖也可以建立在多張表上,只需在 SELECT 語句中使用子查詢或連接查詢。

現(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;

5、導(dǎo)入

我們來學(xué)習(xí)一下,如何導(dǎo)入一個純數(shù)據(jù)文件,該文件中將包含與數(shù)據(jù)表字段相對應(yīng)的多條數(shù)據(jù),這樣可以快速導(dǎo)入大量數(shù)據(jù),除此之外,還有可以用 SQL 語句的導(dǎo)入方式,語法為:source *.sql 這是實驗中經(jīng)常用到的。

兩者之間的不同是:數(shù)據(jù)文件導(dǎo)入方式只包含數(shù)據(jù),導(dǎo)入規(guī)則由數(shù)據(jù)庫系統(tǒng)完成;SQL 文件導(dǎo)入相當(dāng)于執(zhí)行該文件中包含的 SQL 語句,可以實現(xiàn)多種操作,包括刪除,更新,新增,甚至對數(shù)據(jù)庫的重建。

數(shù)據(jù)文件導(dǎo)入,可以把一個文件里的數(shù)據(jù)保存進(jìn)一張表。

導(dǎo)入語句格式為:

LOAD?DATA?INFILE?'文件路徑和文件名'?INTO?TABLE?表名字;

現(xiàn)在 SQL6 目錄下有一個名為 in.txt 的文件,我們嘗試把這個文件中的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫 mysql_shiyan 的 employee 表中。

由于導(dǎo)入導(dǎo)出大量數(shù)據(jù)都屬于敏感操作,根據(jù) mysql 的安全策略,導(dǎo)入導(dǎo)出的文件都必須在指定的路徑下進(jìn)行,在 mysql 終端中查看路徑變量:(我這里設(shè)置了任意目錄可以導(dǎo)入)

注意到 secure_file_priv 變量指定安全路徑 ,要導(dǎo)入數(shù)據(jù)文件,需要將該文件移動到安全路徑下。

secure-file-priv 參數(shù)是用來限制mysql導(dǎo)入導(dǎo)出到哪個目錄的。

查閱官方文檔找到secure-file-priv的值有以下幾種情況:

使用命令 vim SQL6/in.txt 查看 in.txt 文件中的內(nèi)容:

可以看到其中僅僅包含了數(shù)據(jù)本身,沒有任何的 SQL 語句
再使用以下命令以 root 用戶登錄數(shù)據(jù)庫,再連接 mysql_shiyan 數(shù)據(jù)庫:
查看一下沒有導(dǎo)入數(shù)據(jù)之前,employee 表中的數(shù)。

現(xiàn)在執(zhí)行導(dǎo)入語句,文件中的數(shù)據(jù)成功導(dǎo)入 employee 表:

6、導(dǎo)出

導(dǎo)出與導(dǎo)入是相反的過程,是把數(shù)據(jù)庫某個表中的數(shù)據(jù)保存到一個文件之中。導(dǎo)出語句基本格式為:

SELECT?列1,列2?INTO?OUTFILE?'文件路徑和文件名'?FROM?表名字;

注意:語句中 “文件路徑” 之下不能已經(jīng)有同名文件。

如果導(dǎo)出報錯,可能是 MySQL 沒有權(quán)限對相應(yīng)目錄進(jìn)行操作, 查看系統(tǒng)變量 tmpdir, 如下所示,tmpdir 變量指定路徑為 /tmp。

現(xiàn)在我們把整個 employee 表的數(shù)據(jù)導(dǎo)出到 /var/tmp/mysql-files/ 目錄下,導(dǎo)出文件命名為 out.txt 具體語句為:

SELECT?*?INTO?OUTFILE?'/var/tmp/mysql-files/out.txt'?FROM?employee;

用 vim 可以查看導(dǎo)出文件?/var/tmp/mysql-files/out.txt 的內(nèi)容:也可以使用 sudo cat /var/tmp/mysql-files/out.txt 命令查看。

數(shù)據(jù)導(dǎo)出成功。

7、總結(jié)

在本節(jié)實驗中我們學(xué)習(xí)了索引、視圖、導(dǎo)入和導(dǎo)出的知識。

今天的學(xué)習(xí)就到這里啦。

如果各位老鐵感覺寫的不錯,歡迎點在看、留言哦。

祝大家周末愉快~

PS:如果大家在閱讀的過程中,有什么建議和看法,非常歡迎在下方留言,每個留言我都會認(rèn)真看的。

參考:

https://www.shiyanlou.com/courses/9

—?【 THE END 】—本公眾號全部博文已整理成一個目錄,請在公眾號里回復(fù)「m」獲取!

3T技術(shù)資源大放送!包括但不限于:Java、C/C++,Linux,Python,大數(shù)據(jù),人工智能等等。在公眾號內(nèi)回復(fù)「1024」,即可免費獲取!!

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的bcp out 带列名导出_从零开始学习 MySQL 系列索引、视图、导入和导出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。