欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      我的MYSQL學(xué)習(xí)心得

      時(shí)間:2019-05-12 06:12:49下載本文作者:會(huì)員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《我的MYSQL學(xué)習(xí)心得》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《我的MYSQL學(xué)習(xí)心得》。

      第一篇:我的MYSQL學(xué)習(xí)心得

      我的MYSQL學(xué)習(xí)心得

      (十一)視圖

      我的MYSQL學(xué)習(xí)心得

      (一)簡單語法 我的MYSQL學(xué)習(xí)心得

      (二)數(shù)據(jù)類型寬度 我的MYSQL學(xué)習(xí)心得

      (三)查看字段長度

      我的MYSQL學(xué)習(xí)心得

      (四)數(shù)據(jù)類型 我的MYSQL學(xué)習(xí)心得

      (五)運(yùn)算符 我的MYSQL學(xué)習(xí)心得

      (六)函數(shù) 我的MYSQL學(xué)習(xí)心得

      (七)查詢

      我的MYSQL學(xué)習(xí)心得

      (八)插入 更新 刪除 我的MYSQL學(xué)習(xí)心得

      (九)索引

      我的MYSQL學(xué)習(xí)心得

      (十)自定義存儲(chǔ)過程和函數(shù) 我的MYSQL學(xué)習(xí)心得

      (十二)觸發(fā)器 我的MYSQL學(xué)習(xí)心得

      (十三)權(quán)限管理 我的MYSQL學(xué)習(xí)心得

      (十四)備份和恢復(fù) 我的MYSQL學(xué)習(xí)心得

      (十五)日志 我的MYSQL學(xué)習(xí)心得(十六)優(yōu)化 我的MYSQL學(xué)習(xí)心得(十七)復(fù)制

      這一篇《我的MYSQL學(xué)習(xí)心得

      (十一)》將會(huì)講解MYSQL的視圖 使用視圖的理由是什么?

      1、安全性:一般是這樣做的:創(chuàng)建一個(gè)視圖,定義好該視圖所操作的數(shù)據(jù)。

      之后將用戶權(quán)限與視圖綁定,這樣的方式是使用到了一個(gè)特性:grant語句可以針對視圖進(jìn)行授予權(quán)限。

      2、查詢性能提高

      3、有靈活性的功能需求后,需要改動(dòng)表的結(jié)構(gòu)而導(dǎo)致工作量比較大,那么可以使用虛擬表的形式達(dá)到少修改的效果。這是在實(shí)際開發(fā)中比較有用的

      4、復(fù)雜的查詢需求,可以進(jìn)行問題分解,然后將創(chuàng)建多個(gè)視圖獲取數(shù)據(jù)。將視圖聯(lián)合起來就能得到需要的結(jié)果了。

      創(chuàng)建視圖 創(chuàng)建視圖的語法

      CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

      VIEW view_name [(column_list)]

      AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION] 其中,CREATE:表示新建視圖; REPLACE:表示替換已有視圖 ALGORITHM :表示視圖選擇算法 view_name :視圖名 column_list:屬性列

      select_statement:表示select語句

      [WITH [CASCADED | LOCAL] CHECK OPTION]參數(shù)表示視圖在更新時(shí)保證在視圖的權(quán)限范圍之內(nèi)

      可選的ALGORITHM子句是對標(biāo)準(zhǔn)SQL的MySQL擴(kuò)展。

      ALGORITHM可取三個(gè)值:MERGE、TEMPTABLE或UNDEFINED。

      如果沒有ALGORITHM子句,默認(rèn)算法是UNDEFINED(未定義的)。算法會(huì)影響MySQL處理視圖的方式。

      對于MERGE,會(huì)將引用視圖的語句的文本與視圖定義合并起來,使得視圖定義的某一部分取代語句的對應(yīng)部分。

      對于TEMPTABLE,視圖的結(jié)果將被置于臨時(shí)表中,然后使用它執(zhí)行語句。

      對于UNDEFINED,MySQL自己選擇所要使用的算法。如果可能,它傾向于MERGE而不是TEMPTABLE,這是因?yàn)镸ERGE通常更有效,而且如果使用了臨時(shí)表,視圖是不可更新的。

      LOCAL和CASCADED為可選參數(shù),決定了檢查測試的范圍,默認(rèn)值為CASCADED。腳本 視圖的數(shù)據(jù)來自于兩個(gè)表

      CREATE TABLE student(stuno INT ,stuname NVARCHAR(60))CREATE TABLE stuinfo(stuno INT ,class NVARCHAR(60),city NVARCHAR(60))

      INSERT INTO student VALUES(1,'wanglin'),(2,'gaoli'),(3,'zhanghai')

      INSERT INTO stuinfo VALUES(1,'wuban','henan'),(2,'liuban','hebei'),(3,'qiban','shandong')

      --創(chuàng)建視圖

      CREATE VIEW stu_class(id,NAME,glass)AS SELECT student.`stuno`,student.`stuname`,stuinfo.`class` FROM student ,stuinfo WHERE student.`stuno`=stuinfo.`stuno`

      SELECT * FROM stu_class

      查看視圖

      查看視圖必須要有SHOW VIEW權(quán)限

      查看視圖的方法包括:DESCRIBE、SHOW TABLE STATUS、SHOW CREATE VIEW DESCRIBE查看視圖基本信息

      DESCRIBE 視圖名 DESCRIBE stu_class 結(jié)果顯示了視圖的字段定義、字段的數(shù)據(jù)類型、是否為空、是否為主/外鍵、默認(rèn)值和額外信息

      DESCRIBE一般都簡寫成DESC

      SHOW TABLE STATUS語句查看查看視圖基本信息 查看視圖的信息可以通過SHOW TABLE STATUS的方法

      SHOW TABLE STATUS LIKE 'stu_class'

      Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      stu_class(NULL)(NULL)(NULL)(NULL)(NULL)(NULL)(NULL)(NULL)(NULL)(NULL)(NULL)(NULL)(NULL)(NULL)(NULL)(NULL)VIEW

      COMMENT的值為VIEW說明該表為視圖,其他的信息為NULL說明這是一個(gè)虛表,如果是基表那么會(huì)基表的信息,這是基表和視圖的區(qū)別

      SHOW CREATE VIEW語句查看視圖詳細(xì)信息

      SHOW CREATE VIEW stu_class View Create View character_set_client collation_connection-----------------------------------------------------------------

      stu_class CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `stu_class` AS select `student`.`stuno` AS `id`,`student`.`stuname` AS `name`,`stuinfo`.`class` AS `class` from(`student` join `stuinfo`)where(`student`.`stuno` = `stuinfo`.`stuno`)utf8 utf8_general_ci 執(zhí)行結(jié)果顯示視圖的名稱、創(chuàng)建視圖的語句等信息

      在VIEWS表中查看視圖的詳細(xì)信息

      在MYSQL中,INFORMATION_SCHEMA VIEWS表存儲(chǔ)了關(guān)于數(shù)據(jù)庫中的視圖的信息 通過對VIEWS表的查詢可以查看數(shù)據(jù)庫中所有視圖的詳細(xì)信息

      SELECT * FROM `information_schema`.`VIEWS` TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION-------------------------------------------------------------------------------------------------------------------------------------------def school stu_class select

      `school`.`student`.`stuno` AS `id`,`school`.`student`.`stuname` AS `name`,`school`.`stuinfo`.`class` AS `class` from `school`.`student` join `school`.`stuinfo` where(`school`.`student`.`stuno` = `school`.`stuinfo`.`stuno`)NONE YES root@localhost DEFINER utf8 utf8_general_ci 當(dāng)前實(shí)例下只有一個(gè)視圖stu_class

      修改視圖

      修改視圖是指修改數(shù)據(jù)庫中存在的視圖,當(dāng)基本表的某些字段發(fā)生變化時(shí),可以通過修改視圖來保持與基本表的一致性。

      MYSQL中通過CREATE OR REPLACE VIEW 語句和ALTER語句來修改視圖 語法如下:

      ALTER OR REPLACE [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION] 該語句用于更改已有視圖的定義。其語法與CREATE VIEW類似。當(dāng)視圖不存在時(shí)創(chuàng)建,存在時(shí)進(jìn)行修改

      修改視圖 DELIMITER $$

      CREATE OR REPLACE VIEW `stu_class` AS SELECT

      `student`.`stuno` AS `id` FROM(`student` JOIN `stuinfo`)WHERE(`student`.`stuno` = `stuinfo`.`stuno`)$$

      DELIMITER;

      通過DESC來查看更改之后的視圖定義

      DESC stu_class 可以看到只查詢一個(gè)字段

      ALTER語句修改視圖

      ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION] 這里關(guān)鍵字跟前面的一樣,這里不做介紹

      使用ALTER語句修改視圖 stu_class ALTER VIEW stu_class AS SELECT stuno FROM student;使用DESC查看

      DESC stu_class

      更新視圖

      更新視圖是指通過視圖來插入、更新、刪除表數(shù)據(jù),因?yàn)橐晥D是虛表,其中沒有數(shù)據(jù)。通過視圖更新的時(shí)候都是轉(zhuǎn)到基表進(jìn)行更新,如果對視圖增加或者刪除記錄,實(shí)際上是對基表增加或刪除記錄

      我們先修改一下視圖定義

      ALTER VIEW stu_class AS SELECT stuno,stuname FROM student;查詢視圖數(shù)據(jù)

      UPDATE

      UPDATE stu_class SET stuname='xiaofang' WHERE stuno=2

      查詢視圖數(shù)據(jù)

      更新成功

      INSERT INSERT INTO stu_class VALUES(6,'haojie')

      插入成功

      DELETE

      DELETE FROM stu_class WHERE stuno=1

      刪除成功 當(dāng)視圖中包含如下內(nèi)容的時(shí)候,視圖的更新操作將不能被執(zhí)行(1)視圖中包含基本中被定義為非空的列

      (2)定義視圖的SELECT語句后的字段列表中使用了數(shù)學(xué)表達(dá)式(3)定義視圖的SELECT語句后的字段列表中使用聚合函數(shù)

      (4)定義視圖的SELECT語句中使用了DISTINCT、UNION、TOP、GROUP BY、HAVING子句

      第二篇:我的MYSQL學(xué)習(xí)心得

      我的MYSQL學(xué)習(xí)心得

      一、使用視圖的理由是什么?

      1.安全性。一般是這樣做的:創(chuàng)建一個(gè)視圖,定義好該視圖所操作的數(shù)據(jù)。之后將用戶權(quán)限與視圖綁定。這樣的方式是使用到了一個(gè)特性:grant語句可以針對視圖進(jìn)行授予權(quán)限。2.查詢性能提高。

      3.有靈活性的功能需求后,需要改動(dòng)表的結(jié)構(gòu)而導(dǎo)致工作量比較大。那么可以使用虛擬表的形式達(dá)到少修改的效果。這是在實(shí)際開發(fā)中比較有用的

      例子:假如因?yàn)槟撤N需要,a表與b表需要進(jìn)行合并起來組成一個(gè)新的表c。最后a表與b表都不會(huì)存在了。而由于原來程序中編

      寫sql分別是基于a表與b表查詢的,這就意味著需要重新編寫大量的sql(改成向c表去操作數(shù)據(jù))。而通過視圖就可以做到不修改。定義兩個(gè)視圖名字還是原來的表名a和b。a、b視圖完成從c表中取出內(nèi)容。說明:使用這樣的解決方式,基于對視圖的細(xì)節(jié)了解越詳細(xì)越好。因?yàn)槭褂靡晥D還是與使用表的語法上沒區(qū)別。比如視圖名a,那么查詢還是“select * from a”。

      4.復(fù)雜的查詢需求??梢赃M(jìn)行問題分解,然后將創(chuàng)建多個(gè)視圖獲取數(shù)據(jù)。將視圖聯(lián)合起來就能得到需要的結(jié)果了。

      視圖的工作機(jī)制:當(dāng)調(diào)用視圖的時(shí)候,才會(huì)執(zhí)行視圖中的sql,進(jìn)行取數(shù)據(jù)操作。視圖的內(nèi)容沒有存儲(chǔ),而是在視圖被引用的時(shí)候才派生出數(shù)據(jù)。這樣不會(huì)占用空間,由于是即時(shí)引用,視圖的內(nèi)容總是與真實(shí)表的內(nèi)容是一致的。視圖這樣設(shè)計(jì)有什么好處?節(jié)省空間,內(nèi)容是總是一致的話,那么我們不需要維護(hù)視圖的內(nèi)容,維護(hù)好真實(shí)表的內(nèi)容,就可以保證視圖的完整性了。

      二、通過更新視圖實(shí)現(xiàn)更新真實(shí)表

      看到很多例子,更新視圖可以更新真實(shí)表。原因,我是這樣理解的:視圖并沒有保存內(nèi)容。只是引用數(shù)據(jù)。那么,更新視圖,其實(shí)就是以引用的方式操作了真實(shí)表 with check option:對視圖進(jìn)行更新操作的時(shí),需要檢查更新后的值是否還是滿足視圖公式定義的條件。通俗點(diǎn),就是所更新的結(jié)果是否還會(huì)在視圖中存在。如果更新后的值不在視圖范圍內(nèi),就不允許更新如果創(chuàng)建視圖的時(shí)候,沒有加上with check option,更新視圖中的某項(xiàng)數(shù)據(jù)的話,mysql并不會(huì)進(jìn)行有效性檢查。刪掉了就刪掉了。在視圖中將看不到了。

      使用有效性檢查,實(shí)際意義是什么?

      視圖的實(shí)踐:重新組織表的需求

      CREATE TABLE `result`(`MATH_NO` INT(10)NOT NULL unsigned AUTO_INCREMENT PRIMARY KEY, `TEAMNO` INT(10)NOT NULL, `PLAYERNO` INT(10)NOT NULL, `WON` VARCHAR(10)NOT NULL, `LOST` VARCAHR(10)NOT NULL, `CAPTAIN` INT(10)NOT NULL COMMIT '就是PLAYERNO的另外名字', `DIVISION` VARCHAR(10)NOT NULL)ENGINE=MYISAM DEFAULT CHARSET=utf8 COMMIT='重新組的新表' AUTO_INCREMENT=1

      針對每個(gè)表創(chuàng)建一個(gè)視圖,將數(shù)據(jù)保存進(jìn)去: CREATE VIEW teams(TEAMNO,PLAYERNO,DIVISION)AS SELECT DISTINCT TEAMNO,CAPTAIN,DIVISION FROM result

      報(bào)錯(cuò):#1050-Table 'teams' already exists

      說明,因?yàn)橐晥D也是一種表,是虛擬表。不能與已有的表(視圖)出現(xiàn)重名

      接下來,刪掉表teams,再執(zhí)行創(chuàng)建視圖的代碼。

      將視圖看成與表一樣的東西,更加容易理解使用規(guī)則。下面這樣對比也許使自己更好理解:

      1.在使用視圖的時(shí)候,就是與使用表的語法一樣的。2.創(chuàng)建視圖的時(shí)候,該視圖的名字如果與已經(jīng)存在表重名的話,那么會(huì)報(bào)錯(cuò),不允許創(chuàng)建。視圖就是一種特殊的表

      3.創(chuàng)建視圖的時(shí)候,可以這樣使用CREATE VIEW teams(TEAMNO,PLAYERNO,DIVISION),可以定義視圖表的結(jié)構(gòu)。

      4.在phpmyadmin中。左邊的表列表中將視圖與表列在了一起。只有通過右側(cè)的狀態(tài)“View:teams”可以知道該表是視圖表。

      視圖在mysql中的內(nèi)部管理機(jī)制:

      視圖的記錄都保存在information_schema數(shù)據(jù)庫中的一個(gè)叫views的表中。具體某個(gè)視圖的定義代碼以及屬于哪個(gè)數(shù)據(jù)庫等信息可以從里面看到理解視圖的兩種工作機(jī)制:

      語句:select * from teams

      針對上面語句,總結(jié)幾個(gè)知識(shí)點(diǎn)

      1.確認(rèn)是視圖的過程:teams也可以是表名。由于表與視圖的物理機(jī)制不同。視圖本身是不存儲(chǔ)內(nèi)容的。所以,在使用sql的 時(shí)候,mysql是怎么知道teams是一個(gè)視圖還是表。是因?yàn)橛幸粋€(gè)查看目錄的例程在做這件事。

      2.mysql對處理視圖的兩種方法:替代方式和具體化方式。替換方式理解,視圖名直接使用視圖的公式替換掉了。針對上面視圖teams,mysql會(huì)使用該視圖的公式進(jìn)行替換,視圖公式合并到了select中。結(jié)果就是變成了如下sql語句: select * from(SELECT DISTINCT TEAMNO,CAPTAIN,DIVISION FROM result)。也就是最后提交給mysql處理該sql語句。

      具體化方式理解,mysql先得到了視圖執(zhí)行的結(jié)果,該結(jié)果形成一個(gè)中間結(jié)果暫時(shí)存在內(nèi)存中。之后,外面的select語句就調(diào)用了這些中間結(jié)果(臨時(shí)表)。

      看起來都是要得到結(jié)果,形式上有區(qū)別,好像沒體會(huì)到本質(zhì)上的區(qū)別。兩種方式又有什么樣的不同呢?

      替換方式,將視圖公式替換后,當(dāng)成一個(gè)整體sql進(jìn)行處理了。具體化方式,先處理視圖結(jié)果,后處理外面的查詢需求。替換方式可以總結(jié)為,先準(zhǔn)備,后執(zhí)行。具體化方式總結(jié)理解為,分開處理。

      哪種方式好?不知道。mysql會(huì)自己確定使用哪種方式進(jìn)行處理的。自己在定義視圖的時(shí)候也可以指定使用何種方式。像這樣使用:

      CREATE ALGORITHM=merge VIEW teams as SELECT DISTINCT TEAMNO,CAPTAIN,DIVISION FROM result

      ALGORITHM有三個(gè)參數(shù)分別是:merge、TEMPTABLE、UNDEFINED

      看mysql手冊中提到,替換與具體化的方式的各自適用之處,可以這樣理解:

      因?yàn)榕R時(shí)表中的數(shù)據(jù)不可更新。所以,如果使用參數(shù)是TEMPTABLE,無法進(jìn)行更新。

      當(dāng)你的參數(shù)定義是UNDEFINED(沒有定義ALGORITHM參數(shù))。mysql更傾向于選擇合并方式。是因?yàn)樗佑行А?/p>

      第三篇:MySQL學(xué)習(xí)心得

      MySQL學(xué)習(xí)心得

      第一章

      一、數(shù)據(jù)庫管理系統(tǒng)(DBMS)是操作和管理數(shù)據(jù)庫的大型軟件,它按一定的數(shù)據(jù)模型組織數(shù)據(jù)。

      例如:Oracle、SQL Server、MySQL、Access。

      二、數(shù)據(jù)庫應(yīng)用系統(tǒng)在數(shù)據(jù)庫管理系統(tǒng)(DBMS)支持下建立的計(jì)算機(jī)應(yīng)用系統(tǒng),簡寫:DBAS。

      例如:.net Java。

      三、字符集從大到小排序:utf8--gbk--gb2312。

      四、mysql的特點(diǎn):

      適用于中小型網(wǎng)站中,體積小、速度快、總體擁有成本低,尤其是有開放源碼這一特點(diǎn)。

      五、目前Internet上滸的網(wǎng)站構(gòu)架方式是LAMP(Linux+apache+mysql+php)即使用Linux作為操作系統(tǒng),Apache作為Web服務(wù)器,MySQL作為數(shù)據(jù)庫,PHP作為服務(wù)器端腳本解釋器,由于4個(gè)軟件都是遵循GPL的開放源碼軟件,因此使用這種方式不用花一分錢就可以建立起一個(gè)穩(wěn)定、免費(fèi)的網(wǎng)站系統(tǒng)。

      第二章

      一、安裝過程中遇到的問題及解決方法:

      安裝過程中沒有完成時(shí)計(jì)算機(jī)關(guān)機(jī)。(沒有刪除完文件)安裝完成時(shí)找不到所配置的路徑。(可以從配置文件中找到)

      安裝完成后無法正常使用。(在計(jì)算機(jī)管理中重新啟動(dòng)MySQL服務(wù))安裝到一半時(shí)沒有出現(xiàn)下一步。(誤把配置文件刪除了)安裝到最后一步時(shí)start service錯(cuò)誤。到控制面板里面先把mysql刪除.到c盤C:Program Files目錄下把mysql目錄刪除.如果在其他盤還有設(shè)置目錄也要?jiǎng)h除.空目錄也要?jiǎng)h除 到regedit把注冊表

      HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Applications/MySQL HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Applications/MySQL HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Applications/MySQL 有的話,全部刪除?。记桑河肍3循環(huán)查找“mysql”)如果任務(wù)管理器里有關(guān)mysql內(nèi)容也刪除 把防火墻關(guān)了

      重新裝mysql(這里我沒有重啟計(jì)算機(jī))

      重裝時(shí)候有必要的話,重啟計(jì)算機(jī),停用IIS,和刪除temp里的臨時(shí)文件.實(shí)在不行的話,配置mysql時(shí)候,把mysql服務(wù)換個(gè)服務(wù)名.使用時(shí)輸入中文會(huì)出錯(cuò)。(在配置時(shí)在“Character Set”選框中將latinl修改為gb2312;也可以在配置文件中修改)

      二、啟動(dòng)服務(wù)器的方法: ① 方法1:

      在 “計(jì)算機(jī)管理”中的“服務(wù)”項(xiàng)目中啟動(dòng)與停止。② 方法2: 使用命令(net start mysql和net stop mysql)

      三、連接MySQL 格式: mysql-h主機(jī)地址-u用戶名 -p用戶密碼

      ①先在打開DOS窗口,然后進(jìn)入目錄 mysqlbin(如果設(shè)置了環(huán)境變量,則直接輸入命令即可。)②鍵入命令mysql-uroot-proot ③接回車即可進(jìn)入到MYSQL中了 MYSQL的提示符是:mysql> 注明:直接打開Mysql command line client

      四、MySQL注釋符有三種: ①#...②“--...” ③

      五、忘記密碼重新更改密碼

      先停止mysql服務(wù),修改D:MySQLMySQL Server 5.0 目錄下的my.ini文件,在[mysqld]下添加skip-grant-tables 啟動(dòng)mysql服務(wù)后就可以以空密碼登錄,之后別忘記修改root密碼

      use mysql update user set password=password('hanaixia')where user='root';(分號不能少)password('hanaixia')此處必須用函數(shù)設(shè)置。

      修改密碼后需要重新啟動(dòng)服務(wù)或者使用 flush privileges;語句,用于從mysql數(shù)據(jù)庫中的授權(quán)表重新載入權(quán)限。

      把 skip-grant-tables 這一句刪掉再重啟mysql服務(wù)。

      第四篇:Mysql數(shù)據(jù)庫學(xué)習(xí)心得

      Mysql數(shù)據(jù)庫學(xué)習(xí)心得(1)

      由于工作中需要使用mysql,筆者通過網(wǎng)上學(xué)習(xí),動(dòng)手實(shí)踐,終于從一個(gè)“數(shù)據(jù)庫菜鳥”變成了能熟練操作mysql的“準(zhǔn)大蝦”了,:)。現(xiàn)將學(xué)習(xí)心得整理如下。

      MySQL是完全網(wǎng)絡(luò)化的跨平臺(tái)關(guān)系型數(shù)據(jù)庫系統(tǒng),一個(gè)真正的多用戶、多線程SQL數(shù)據(jù)庫服務(wù)器,同時(shí)是具有客戶機(jī)/服務(wù)器體系結(jié)構(gòu)的分布式數(shù)據(jù)庫管理系統(tǒng)。它具有功能強(qiáng)、使

      用簡便、管理方便、運(yùn)行速度快、安全可靠性強(qiáng)等優(yōu)點(diǎn),用戶可利用許多語言編寫訪問MySQL數(shù)據(jù)庫的程序,對于中、小型應(yīng)用系統(tǒng)是非常理想的。除了支持標(biāo)準(zhǔn)的ANSI SQL語句,更重要的是,它還支持多種平臺(tái),而在Unix系統(tǒng)上該軟件支持多線程運(yùn)行方式,從而能獲得相當(dāng)好的性能。對于不使用Unix的用戶,它可以在Windows NT系統(tǒng)上以系統(tǒng)服務(wù)方式運(yùn)行,或者在Windows 95/98系統(tǒng)上以普通進(jìn)程方式運(yùn)行。而在Unix/Linux系統(tǒng)上,MySQL支持多線程運(yùn)行方式,從而能獲得相當(dāng)好的性能,而且它是屬于開放源代碼軟。

      MySQL是以一個(gè)客戶機(jī)/服務(wù)器結(jié)構(gòu)的實(shí)現(xiàn),它由一個(gè)服務(wù)器守護(hù)程序mysqld和很多不同的客戶程序和庫組成,MySQL的執(zhí)行性能非常高,運(yùn)行速度非常快,并非常容易使用,是一個(gè)非常棒的數(shù)據(jù)庫。MySQL的官方發(fā)音是“My Ess Que Ell”(不是MY-SEQUEL)。

      一.獲得MySQL

      首先必須下載MySQL。Mysql的官方網(wǎng)站是:004km.cnf copy為c:my.cnf,并把c:mysqlibgwinb19.dll copy到winntsystem32。

      3。啟動(dòng)mysql的方法是:

      c:mysqlinmysqld-shareware--install

      net start mysql

      這么簡單,就可以啟動(dòng)了。

      4。更改超級用戶(root)的密碼:

      C:mysqlinmysql mysql

      mysql> UPDATE user SET password=PASSWORD('your password')swheresuser='root';

      mysql> QUIT

      C:mysqlinmysqladmin reload

      使用命令C:mysqlinmysqlshow去看看檢測一下。在這里應(yīng)該顯示:

      +-----------+

      | Databases |

      +-----------+

      | mysql |

      | test |

      +-----------+

      看到這些信息這一步就證明沒問題了

      再來:

      C:mysqlinmysqlshow--user=root--password=your password mysql

      在這里應(yīng)該顯示:

      Database: mysql

      +--------------+

      | Tables |

      +--------------+

      | columns_priv |

      | db |

      | host |

      | tables_priv |

      | user |

      +--------------+

      一切搞定!

      5。C:mysqlinmysqladmin version status proc

      應(yīng)該可以看到這些版本信息的:

      mysqladmin Ver 8.0 Distrib 3.22.32, for Win95/Win98 on i586

      TCX Datakonsult AB, by Monty

      Server version 3.22.32-shareware-debug

      Protocol version 10

      Connection localhost via TCP/IP

      TCP port 3306

      Uptime: 1 hour 29 min 30 sec

      Threads: 1 Questions: 72 Slow queries: 0 Opens: 16 Flush tables: 1 Open tables: 0 Memory in use: 16423K Max memory

      used: 16490K

      Uptime: 5370 Threads: 1 Questions: 72 Slow queries: 0 Opens: 16 Flush tables: 1 Open tables: 0 Memory in use: 16423K

      Max memory used: 16490K

      +----+------+-----------+----+---------+------+-------+------------------+

      | Id | User | Host | db | Command | Time | State | Info |

      +----+------+-----------+----+---------+------+-------+------------------+

      | 35 | ODBC | localhost | | Query | 0 | | show processlist |

      +----+------+-----------+----+---------+------+-------+------------------+

      接著,用show databases命令可以將安裝的數(shù)據(jù)庫列出來:

      mysql> show databases;

      你就可以看到:

      +----------+

      | Database |

      +----------+

      | mysql |

      | test |

      +----------+ rows in set(0.00 sec)

      如果一切正常的話,那說明MySQL可以完全工作了!如果要退出程序,輸入:exit

      mysql> exit;

      Bye

      Mysql數(shù)據(jù)庫學(xué)習(xí)心得(3)------------------

      三.Mysql常識(shí)

      (一)字段類型

      1.INT[(M)]

      正常大小整數(shù)類型

      2.DOUBLE[(M,D)] [ZEROFILL]

      正常大小(雙精密)浮點(diǎn)數(shù)字類型

      3.DATE

      日期類型。支持的范圍是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式來顯示DATE值,但是允許你使用字符串或數(shù)字把值賦給

      DATE列

      4.CHAR(M)

      定長字符串類型,當(dāng)存儲(chǔ)時(shí),總是是用空格填滿右邊到指定的長度

      5.BLOB TEXT

      BLOB或TEXT類型,最大長度為65535(2^16-1)個(gè)字符。

      6.VARCHAR

      變長字符串類型,最常用的類型。

      (二)基本操作

      1:顯示數(shù)據(jù)庫

      mysql>SHOW DATABASES;

      2:當(dāng)前選擇的數(shù)據(jù)庫,mysql> SELECT DATABASE();

      +------------+

      | DATABASE()|

      +------------+

      | test |

      +------------+

      3.當(dāng)前數(shù)據(jù)庫包含的表信息:

      mysql> SHOW TABLES;

      +---------------------+

      | Tables in test |

      +---------------------+

      | mytable1 |

      | mytable2 |

      +---------------------+

      4.獲取表結(jié)構(gòu)

      mysql> desc mytable1;

      +---------+-------------+------+-----+---------+-------+

      | Field | Type | Null | Key | Default | Extra |

      +---------+-------------+------+-----+---------+-------+

      | s1 | varchar(20)| YES | | NULL | |

      +---------+-------------+------+-----+---------+-------+

      5.創(chuàng)建表

      表是數(shù)據(jù)庫的最基本元素之一,表與表之間可以相互獨(dú)立,也可以相互關(guān)聯(lián)。創(chuàng)建表的基本語法如下:

      create table table_name

      (column_name datatype {identity |null|not null},…)

      其中參數(shù)table_name和column_name必須滿足用戶數(shù)據(jù)庫中的識(shí)別器(identifier)的要求,參數(shù)datatype是一個(gè)標(biāo)準(zhǔn)的SQL類型或由用戶數(shù)

      據(jù)庫提供的類型。用戶要使用non-null從句為各字段輸入數(shù)據(jù)。

      create table還有一些其他選項(xiàng),如創(chuàng)建臨時(shí)表和使用select子句從其他的表中讀取某些字段組成新表等。還有,在創(chuàng)建表是可用PRIMARY

      KEY、KEY、INDEX等標(biāo)識(shí)符設(shè)定某些字段為主鍵或索引等。書寫上要注意:在一對圓括號里的列出完整的字段清單。字段名間用逗號隔開

      。字段名間的逗號后要加一個(gè)空格。最后一個(gè)字段名后不用逗號。所有的SQL陳述都以分號“;”結(jié)束。

      例:

      mysql>CREATE TABLE guest(name varchar(10),sex varchar(2),age int(3),career varchar(10));

      6.創(chuàng)建索引

      索引用于對數(shù)據(jù)庫的查詢。一般數(shù)據(jù)庫建有多種索引方案,每種方案都精于某一特定的查詢類。索引可以加速對數(shù)據(jù)庫的查詢過程。創(chuàng)建

      索引的基本語法如下:

      create index index_name

      on table_name(col_name[(length)],...)

      例:

      mysql> CREATE INDEX number ON guest(number(10));

      7.執(zhí)行查詢

      查詢是使用最多的SQL命令。查詢數(shù)據(jù)庫需要憑借結(jié)構(gòu)、索引和字段類型等因素。大多數(shù)數(shù)據(jù)庫含有一個(gè)優(yōu)化器(optimizer),把用戶的查

      詢語句轉(zhuǎn)換成可選的形式,以提高查詢效率。

      值得注意的是MySQL不支持SQL92標(biāo)準(zhǔn)的嵌套的where子句,即它只支持一個(gè)where子句。其基本語法如下:

      SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY]

      [DISTINCT | DISTINCTROW | ALL]

      select_expression,...[INTO {OUTFILE | DUMPFILE} 'file_name' export_options]

      [FROM table_references

      [WHERE where_definition]

      [GROUP BY col_name,...]

      [HAVING where_definition]

      [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]

      [LIMIT [offset,] rows]

      [PROCEDURE procedure_name] ]

      其中where從句是定義選擇標(biāo)準(zhǔn)的地方,where_definition可以有不同的格式,但都遵循下面的形式:

      字段名操作表達(dá)式

      字段名操作字段名

      在第一種形式下,標(biāo)準(zhǔn)把字段的值與表達(dá)式進(jìn)行比較;在第二種形式下,把兩個(gè)字段的值進(jìn)行比較。根據(jù)所比較的數(shù)據(jù)類型,search_condition中的操作可能選以下幾種:

      =檢查是否相等

      !=檢查是否不等

      >(或>=)檢查左邊值是否大于(或大于等于)右邊值

      <(或<=)檢查左邊值是否小于(或小于等于)右邊值

      [not] between檢查左邊值是否在某個(gè)范圍內(nèi)

      [not] in檢查左邊是否某個(gè)特定集的成員

      [not] like檢查左邊是否為右邊的子串

      is [not] null檢查左邊是否為空值

      在這里,可以用通配符_代表任何一個(gè)字符,%代表任何字符串。使用關(guān)鍵字、和可以生成復(fù)雜的詞,它們運(yùn)行檢查時(shí)使用

      布爾表達(dá)式的多重標(biāo)準(zhǔn)集。

      例:

      mysql> select t1.name, t2.salary from employee AS t1, info AS t2swherest1.name = t2.name;

      mysql> select college, region, seed from tournament

      ORDER BY region, seed;

      mysql> select col_name from tbl_nameswherescol_name > 0;

      8.改變表結(jié)構(gòu)

      在數(shù)據(jù)庫的使用過程中,有時(shí)需要改變它的表結(jié)構(gòu),包括改變字段名,甚至改變不同數(shù)據(jù)庫字段間的關(guān)系??梢詫?shí)現(xiàn)上述改變的命令是

      alter,其基本語法如下:

      alter table table_name alter_spec [, alter_spec...]

      例:

      mysql> alter table dbname add column userid int(11)not null primary key auto_increment;

      這樣,就在表dbname中添加了一個(gè)字段userid,類型為int(11)。

      9.修改表中數(shù)據(jù)

      在使用數(shù)據(jù)庫過程中,往往要修改其表中的數(shù)據(jù),比如往表中添加新數(shù)據(jù),刪除表中原有數(shù)據(jù),或?qū)Ρ碇性袛?shù)據(jù)進(jìn)行更改。它們的基本

      語法如下:

      數(shù)據(jù)添加:

      insert [into] table_name [(column(s))]

      values(expression(s))

      例:

      mysql>insertsintosmydatabase values('php','mysql','asp','sqlserver','jsp','oracle');Mysql數(shù)據(jù)庫學(xué)習(xí)心得(4)------------------

      10.表的數(shù)據(jù)更新

      (1)一次修改一個(gè)字段,再次注意語法。文本需要加引號但數(shù)字不要。

      mysql>update table01 set field03='new info'swheresfield01=1;

      Query OK, 1 row affected(0.00 sec)

      (2)一次改變多個(gè)字段,記住在每一個(gè)更新的字段間用逗號隔開。

      mysql>update table01 set field04=19991022, field05=062218swheresfield01=1;

      Query OK, 1 row affected(0.00 sec)

      (3)一次更新多個(gè)數(shù)據(jù)

      mysql>update table01 set field05=152901swheresfield04>19990101;

      Query OK, 3 rows affected(0.00 sec)

      11.刪除數(shù)據(jù)

      mysql>delete from table01swheresfield01=3;

      Query OK, 1 row affected(0.00 sec)

      12.導(dǎo)入數(shù)據(jù)庫表

      (1)創(chuàng)建.sql文件

      (2)先產(chǎn)生一個(gè)庫如auction.c:mysqlin>mysqladmin-u root-p creat auction,會(huì)提示輸入密碼,然后成功創(chuàng)建。

      (3)導(dǎo)入auction.sql文件

      c:mysqlin>mysql-u root-p auction < auction.sql。

      通過以上操作,就可以創(chuàng)建了一個(gè)數(shù)據(jù)庫auction以及其中的一個(gè)表auction。

      13.mysql數(shù)據(jù)庫的授權(quán)

      mysql>grant select,insert,delete,create,drop

      on *.*(或test.*/user.*/..)

      to用戶名@localhost

      identified by '密碼';

      如:新建一個(gè)用戶帳號以便可以訪問數(shù)據(jù)庫,需要進(jìn)行如下操作:

      mysql> grant usage

      -> ON test.*

      -> TO testuser@localhost;

      Query OK, 0 rows affected(0.15 sec)

      此后就創(chuàng)建了一個(gè)新用戶叫:testuser,這個(gè)用戶只能從localhost連接到數(shù)據(jù)庫并可以連接到test數(shù)據(jù)庫。下一步,我們必須指定

      testuser這個(gè)用戶可以執(zhí)行哪些操作:

      mysql> GRANT select, insert, delete,update

      -> ON test.*

      -> TO testuser@localhost;

      Query OK, 0 rows affected(0.00 sec)

      此操作使testuser能夠在每一個(gè)test數(shù)據(jù)庫中的表執(zhí)行SELECT,INSERT和DELETE以及UPDATE查詢操作。現(xiàn)在我們結(jié)束操作并退出MySQL客戶

      程序:

      mysql> exit

      Bye

      14.授權(quán)MySQL用戶密碼

      MySQL數(shù)據(jù)庫的默認(rèn)用戶名為“root”(MS SQL Server的sa相似),密碼默認(rèn)為空。在DOS提示符(注 意,不是mysql提示符)下輸入

      c:mysqlin>“mysqladmin-u root-p password newpassword

      回車后會(huì)提示你輸入原來的密碼,由于原來密碼為空,直接回車,root用戶的密碼便改為”newpassword“了。

      Mysql數(shù)據(jù)庫學(xué)習(xí)心得(5)------------------

      四.安裝phpMyAdmin

      MySQL圖形界面管理器phpMyAdmin是一套以php3寫成,針對MySQL數(shù)據(jù)庫系統(tǒng)的Web管理界面。它可以很方便地以圖形化界面,來對MySQL數(shù)據(jù)庫里的字段、數(shù)據(jù)進(jìn)行增加、刪除等的動(dòng)作,更可以做數(shù)據(jù)庫本身的增刪管理;phpMyAdmin可以管理整個(gè)MySQL服務(wù)器(需要超級用戶),也可以管理單個(gè)數(shù)據(jù)庫。另外,您也可以通過使用這個(gè)圖形化界面來學(xué)習(xí)SQL正確的語法,直至熟練掌握。那要等到你看過MySQL手冊中相關(guān)的部分。你可以到http://www.phpwizard.net/phpMyAdmin/去下載最新的版本。

      首先,將phpMyAdmin軟件包解到一個(gè)目錄下。

      1.修改文檔config.inc.php3。

      將原來的設(shè)定:

      §cfgServers[1]['host'] = '';// MySQL hostname

      §cfgServers[1]['port'] = '';// MySQL port-leave blank fordefault port

      §cfgServers[1]['adv_auth'] = false;// Use advanced authentication?

      §cfgServers[1]['stduser'] = '';// MySQL standard user(only needed with advanced auth)

      §cfgServers[1]['stdpass'] = '';// MySQL standard password(only needed with advanced auth)

      §cfgServers[1]['user'] = '';// MySQL user(only needed withbasic auth)

      §cfgServers[1]['password'] = '';// MySQL password(only needed with basic auth)

      §cfgServers[1]['only_db'] = '';// If set to a db-name, only this db is accessible

      §cfgServers[1]['verbose'] = '';// Verbose name for this host-leave blank to show the hostname

      :

      :

      require(”english.inc.php3“);

      修改成:

      §cfgServers[1]['host'] = 'MySQL Server的hostname';//填入您的MySQL Server的主機(jī)名稱

      §cfgServers[1]['port'] = '';//填入連結(jié)MySQL的port,不填則以預(yù)設(shè)的port進(jìn)行連結(jié)

      §cfgServers[1]['adv_auth'] = true;//改成true則進(jìn)入phpMyAdmin必須先身份認(rèn)證

      §cfgServers[1]['stduser'] = 'root';// MySQL使用者的帳號

      §cfgServers[1]['stdpass'] = '密碼';// MySQL使用者的密碼

      §cfgServers[1]['user'] = 'root';// MySQL管理帳號

      §cfgServers[1]['password'] = '密碼';// MySQL管理密碼

      §cfgServers[1]['only_db'] = '';//指定管理的資庫名稱,不填則可以管理整個(gè)Server

      §cfgServers[1]['verbose'] = '';//指定MySQL的名稱,不填則使用系統(tǒng)本身的hostname

      :

      :

      require(”chinese_gb.inc.php3");//將語言改成中文

      說明:

      (1)因本管理接口,可以以一個(gè)接口,管理多個(gè)MySQL Server,所以可以在config.inc.php3中找到

      §cfgServers[1]...§cfgServers[1]...§cfgServers[1]...:

      §cfgServers[2]...§cfgServers[2]...§cfgServers[2]...其中[1]代表第一個(gè)MySQL Server,[2]代表第二個(gè)MySQL Server,您要管理的MySQL Server超過三臺(tái)以上,您可以依照同樣的?述,增加[4].....下去!

      (2)若您的MySQL Server與http Server是同一臺(tái),則§cfgServers[1]['host'] =可直接填入localhost。

      最后,打開流覽器,輸入你的網(wǎng)址/phpMyAdmin之后您會(huì)看到一個(gè)密碼驗(yàn)證的小窗口,輸入您的MySQL管理帳號及密碼,即可成功地看到phpMyAdmin的管理畫面。通過phpmyadmin,你就可以圖形化的、方便的管理你的所有數(shù)據(jù)庫了。

      五.小結(jié)

      通過以上的學(xué)習(xí)和操作,終于可以自由操作mysql數(shù)據(jù)庫了,也可以輕車熟路的使用php或者asp調(diào)用mysql了。最后,筆者要特別感謝開發(fā)了mysql并且免費(fèi)貢獻(xiàn)的天才以及在網(wǎng)上提供mysql使用說明的大蝦們。

      第五篇:我的MYSQL學(xué)習(xí)心得備份和恢復(fù)

      備份

      邏輯備份方法

      使用MYSQLDUMP命令備份

      MYSQLDUMP是MYSQL提供的一個(gè)非常有用的數(shù)據(jù)庫備份工具。mysqldump命令執(zhí)行時(shí)將數(shù)據(jù)庫備份成一個(gè)文本文件,該文件中實(shí)際上包含了多個(gè)CREATE 和INSERT語句,使用這些語句可以重新創(chuàng)建表和插入數(shù)據(jù)

      MYSQLDUMP的語法和選項(xiàng)

      mysqldump-u user-p pwd-h host dbname[tbname,[tbname...]]>filename.sql

      選項(xiàng)/Option 作用/Action Performed--add-drop-table

      這個(gè)選項(xiàng)將會(huì)在每一個(gè)表的前面加上DROP TABLE IF EXISTS語句,這樣可以保證導(dǎo)回MySQL數(shù)據(jù)庫的時(shí)候不會(huì)出錯(cuò),因?yàn)槊看螌?dǎo)回的時(shí)候,都會(huì)首先檢查表是否存在,存在就刪除--add-locks這個(gè)選項(xiàng)會(huì)在INSERT語句中捆上一個(gè)LOCK TABLE和UNLOCK TABLE語句。這就防止在這些記錄被再次導(dǎo)入數(shù)據(jù)庫時(shí)其他用戶對表進(jìn)行的操作-c or-complete_insert 這個(gè)選項(xiàng)使得mysqldump命令給每一個(gè)產(chǎn)生INSERT語句加上列(field)的名字。當(dāng)把數(shù)據(jù)導(dǎo)出導(dǎo)另外一個(gè)數(shù)據(jù)庫時(shí)這個(gè)選項(xiàng)很有用。--delayed-insert 在INSERT命令中加入DELAY選項(xiàng)-F or-flush-logs 使用這個(gè)選項(xiàng),在執(zhí)行導(dǎo)出之前將會(huì)刷新MySQL服務(wù)器的log.-f or-force 使用這個(gè)選項(xiàng),即使有錯(cuò)誤發(fā)生,仍然繼續(xù)導(dǎo)出--full 這個(gè)選項(xiàng)把附加信息也加到CREATE TABLE的語句中-l or-lock-tables 使用這個(gè)選項(xiàng),導(dǎo)出表的時(shí)候服務(wù)器將會(huì)給表加鎖。-t or-no-create-info 這個(gè)選項(xiàng)使的mysqldump命令不創(chuàng)建CREATE TABLE語句,這個(gè)選項(xiàng)在您只需要數(shù)據(jù)而不需要DDL(數(shù)據(jù)庫定義語句)時(shí)很方便。-d or-no-data 這個(gè)選項(xiàng)使的mysqldump命令不創(chuàng)建INSERT語句。

      在您只需要DDL語句時(shí),可以使用這個(gè)選項(xiàng)。--opt 此選項(xiàng)將打開所有會(huì)提高文件導(dǎo)出速度和創(chuàng)造一個(gè)可以更快導(dǎo)入的文件的選項(xiàng)。-q or-quick 這個(gè)選項(xiàng)使得MySQL不會(huì)把整個(gè)導(dǎo)出的內(nèi)容讀入內(nèi)存再執(zhí)行導(dǎo)出,而是在讀到的時(shí)候就寫入導(dǎo)文件中。-T path or-tab = path 這個(gè)選項(xiàng)將會(huì)創(chuàng)建兩個(gè)文件,一個(gè)文件包含DDL語句或者表創(chuàng)建語句,另一個(gè)文件包含數(shù)據(jù)。DDL文件被命名為table_name.sql,數(shù)據(jù)文件被命名為table_name.txt.路徑名是存放這兩個(gè)文件的目錄。目錄必須已經(jīng)存在,并且命令的使用者有對文件的特權(quán)。-w “WHERE Clause” or-where = “Where clause ” 如前面所講的,您可以使用這一選項(xiàng)來過篩選將要放到 導(dǎo)出文件的數(shù)據(jù)。

      假定您需要為一個(gè)表單中要用到的帳號建立一個(gè)文件,經(jīng)理要看今年(2004年)所有的訂單(Orders),它們并不對DDL感興趣,并且需要文件有逗號分隔,因?yàn)檫@樣就很容易導(dǎo)入到Excel中。為了完成這個(gè)任務(wù),您可以使用下面的句子:

      bin/mysqldump –p –where “Order_Date >='2000-01-01'” –tab = /home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders 這將會(huì)得到您想要的結(jié)果。schema:模式

      The set of statements, expressed in data definition language, that completely describe the structure of a data base.一組以數(shù)據(jù)定義語言來表達(dá)的語句集,該語句集完整地描述了數(shù)據(jù)庫的結(jié)構(gòu)。SELECT INTO OUTFILE :

      mysqldump提供了很多選項(xiàng),包括調(diào)試和壓縮的,在這里只是列舉最有用的。運(yùn)行幫助命令mysqldump--help可以獲得特定版本的完整選項(xiàng)列表

      user表示用戶名稱;

      host表示登錄用戶的主機(jī)名稱; pwd為登錄密碼;

      dbname為需要備份的數(shù)據(jù)庫名稱;

      tbname為dbname數(shù)據(jù)庫中需要備份的數(shù)據(jù)表,可以指定多個(gè)需要備份的表; 右箭頭“>”告訴mysqldump將備份數(shù)據(jù)庫表定義和數(shù)據(jù)寫入備份文件; filename為備份文件的名稱

      1、使用mysqldump備份單個(gè)數(shù)據(jù)庫中的所有表 數(shù)據(jù)庫的記錄是這樣的

      打開cmd,然后執(zhí)行下面的命令

      可以看到C盤下面已經(jīng)生成了school_2014-7-10.sql文件

      使用editplus來打開這個(gè)sql文件

      --MySQL dump 10.13 Distrib 5.5.20, for Win32(x86)----Host: 127.0.0.1 Database: school---------------------------Server version 5.5.20-log

      /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;/*!40103 SET TIME_ZONE='+00:00' */;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;----Table structure for table `book`--DROP TABLE IF EXISTS `book`;/*!40101 SET @saved_cs_client = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `book`(`bookid` int(11)NOT NULL, `bookname` varchar(255)NOT NULL, `authors` varchar(255)NOT NULL, `info` varchar(255)DEFAULT NULL, `comment` varchar(255)DEFAULT NULL, `year_publication` year(4)NOT NULL, KEY `BkNameIdx`(`bookname`))ENGINE=MyISAM DEFAULT CHARSET=utf8;/*!40101 SET character_set_client = @saved_cs_client */;----Dumping data for table `book`--

      LOCK TABLES `book` WRITE;/*!40000 ALTER TABLE `book` DISABLE KEYS */;INSERT INTO `book` VALUES(1,'鍓戝湥','灝忔槑','13','hao',2013);/*!40000 ALTER TABLE `book` ENABLE KEYS */;UNLOCK TABLES;----Table structure for table `student`--DROP TABLE IF EXISTS `student`;/*!40101 SET @saved_cs_client = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `student`(`stuno` int(11)DEFAULT NULL, `stuname` varchar(60)DEFAULT NULL)ENGINE=InnoDB DEFAULT CHARSET=utf8;/*!40101 SET character_set_client = @saved_cs_client */;----Dumping data for table `student`--

      LOCK TABLES `student` WRITE;/*!40000 ALTER TABLE `student` DISABLE KEYS */;INSERT INTO `student` VALUES

      (2,'xiaofang'),(3,'zhanghai'),(6,'haojie');/*!40000 ALTER TABLE `student` ENABLE KEYS */;UNLOCK TABLES;----Table structure for table `stuinfo`--DROP TABLE IF EXISTS `stuinfo`;/*!40101 SET @saved_cs_client = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `stuinfo`(`stuno` int(11)DEFAULT NULL, `class` varchar(60)DEFAULT NULL, `city` varchar(60)DEFAULT NULL)ENGINE=InnoDB DEFAULT CHARSET=utf8;/*!40101 SET character_set_client = @saved_cs_client */;----Dumping data for table `stuinfo`--

      LOCK TABLES `stuinfo` WRITE;/*!40000 ALTER TABLE `stuinfo` DISABLE KEYS */;INSERT INTO `stuinfo` VALUES

      (1,'wuban','henan'),(2,'liuban','hebei'),(3,'qiban','shandong');/*!40000 ALTER TABLE `stuinfo` ENABLE KEYS */;UNLOCK TABLES;/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;--Dump completed on 2014-07-23 22:04:16

      可以看到,備份文件包含了一些信息,文件開頭首先寫明了mysqldump工具的版本號; 然后是主機(jī)信息,以及備份的數(shù)據(jù)庫名稱,最后是mysql服務(wù)器的版本號5.5.20

      備份文件接下來的部分是一些SET語句,這些語句將一些系統(tǒng)變量賦值給用戶定義變量,以確保被恢復(fù)的數(shù)據(jù)庫的系統(tǒng)變量和原來 備份時(shí)的變量相同 例如:

      /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;該set語句將當(dāng)前系統(tǒng)變量character_set_client的值賦值給用戶變量@OLD_CHARACTER_SET_CLIENT 備份文件的最后幾行mysql使用set語句恢復(fù)服務(wù)器系統(tǒng)變量原來的值,例如:

      /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;該語句將用戶定義變量@OLD_CHARACTER_SET_CLIENT 中保存的值賦值給實(shí)際的系統(tǒng)變量OLD_CHARACTER_SET_CLIENT 備份文件中的“--”字符開頭的行為注釋語句;以“/*!”開頭、以“*/”結(jié)尾的語句為可執(zhí)行的mysql注釋,這些語句可以被mysql執(zhí)行

      但在其他數(shù)據(jù)庫管理系統(tǒng)將被作為注釋忽略,這可以提高數(shù)據(jù)庫的可移植性

      另外注意到,備份文件開始的一些語句以數(shù)字開頭,這些數(shù)字代表了mysql版本號,該數(shù)字告訴我們這些語句只有在指定的mysql版本 或者比該版本高的情況下才能執(zhí)行。

      例如:40101,表明這些語句只有在mysql版本為4.01.01或者更高版本的條件下才可以執(zhí)行

      2、使用mysqldump備份數(shù)據(jù)庫中的某個(gè)表 備份school數(shù)據(jù)庫里面的book表

      --MySQL dump 10.13 Distrib 5.5.20, for Win32(x86)----Host: 127.0.0.1 Database: school---------------------------Server version 5.5.20-log

      /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;/*!40103 SET TIME_ZONE='+00:00' */;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;----Table structure for table `book`--DROP TABLE IF EXISTS `book`;/*!40101 SET @saved_cs_client = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `book`(`bookid` int(11)NOT NULL, `bookname` varchar(255)NOT NULL, `authors` varchar(255)NOT NULL, `info` varchar(255)DEFAULT NULL, `comment` varchar(255)DEFAULT NULL, `year_publication` year(4)NOT NULL, KEY `BkNameIdx`(`bookname`))ENGINE=MyISAM DEFAULT CHARSET=utf8;/*!40101 SET character_set_client = @saved_cs_client */;----Dumping data for table `book`--

      LOCK TABLES `book` WRITE;/*!40000 ALTER TABLE `book` DISABLE KEYS */;INSERT INTO `book` VALUES(1,'劍圣','小明','13','hao',2013);/*!40000 ALTER TABLE `book` ENABLE KEYS */;UNLOCK TABLES;/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;--Dump completed on 2014-07-23 22:24:29

      備份文件中的內(nèi)容跟前面的介紹是一樣的,唯一不同的是只包含了book表的CREATE語句和INSERT語句

      3、使用mysqldump備份多個(gè)數(shù)據(jù)庫

      如果要使用mysqldump備份多個(gè)數(shù)據(jù)庫,需要使用--databases參數(shù)。

      使用--databases參數(shù)之后,必須指定至少一個(gè)數(shù)據(jù)庫的名稱,多個(gè)數(shù)據(jù)庫名稱之間用空格隔開

      使用mysqldump備份school庫和test庫

      備份文件里的內(nèi)容,基本上跟第一個(gè)例子一樣,但是指明了里面的內(nèi)容那一部分屬于test庫,哪一部分屬于school庫

      View Code

      4、使用--all-databases參數(shù)備份系統(tǒng)中所有的數(shù)據(jù)庫 使用--all-databases不需要指定數(shù)據(jù)庫名稱

      執(zhí)行完畢之后會(huì)產(chǎn)生all_2014-7-10.sql的備份文件,里面會(huì)包含了所有數(shù)據(jù)庫的備份信息

      提示:如果在服務(wù)器上進(jìn)行備份,并且表均為myisam,應(yīng)考慮使用mysqlhotcopy 因?yàn)榭梢愿斓剡M(jìn)行備份和恢復(fù)

      使用mysqlhotcopy,如果是Windows操作系統(tǒng),需要先安裝perl腳本組件才能使用,因?yàn)閙ysqlhotcopy是使用perl來編寫的提示

      (1)如果你未使用--quick或者--opt選項(xiàng),那么mysqldump將在轉(zhuǎn)儲(chǔ)結(jié)果之前把全部內(nèi)容載入到內(nèi)存中。這在你轉(zhuǎn)儲(chǔ)大數(shù)據(jù)量的數(shù)據(jù)庫時(shí)將會(huì)有些問題。該選項(xiàng)默認(rèn)是打開的,但可以使用--skip-opt來關(guān)閉它。

      (2)使用--skip-comments可以去掉導(dǎo)出文件中的注釋語句

      (3)使用--compact選項(xiàng)可以只輸出最重要的語句,而不輸出注釋及刪除表語句等等(4)使用--database或-B選項(xiàng),可以轉(zhuǎn)儲(chǔ)多個(gè)數(shù)據(jù)庫,在這個(gè)選項(xiàng)名后的參數(shù)都被認(rèn)定為數(shù)據(jù)庫名

      SQLSERVER邏輯備份

      我發(fā)現(xiàn)SQLSERVER的備份概念并沒有ORACLE和MYSQL那么多 我們通常都會(huì)使用下面的兩個(gè)SQL語句來備份SQLSERVER數(shù)據(jù)庫,例如備份test庫

      BACKUP DATABASE test TO DISK='c:test.bak' BACKUP LOG test TO DISK='c:test_log.bak'

      第一個(gè)SQL是完整備份test庫,如果加上WITH DIFFERENTIAL就是差異備份 第二個(gè)SQL是備份test庫的日志

      實(shí)際上從我眼中的理解,SQLSERVER就是將數(shù)據(jù)文件和必要的日志信息放入一個(gè)壓縮包里面,類似于MYSQL的物理備份,直接復(fù)制文件,只是MYSQL并沒有進(jìn)行打包壓縮

      SQLSERVER的邏輯備份

      邏輯備份就是生成表定義腳本和數(shù)據(jù)插入腳本,SQLSERVER2008開始支持生成數(shù)據(jù)腳本,在SQLSERVER2008之前只支持生成表定義腳本 我所用的數(shù)據(jù)庫是SQLSERVER2012 SP1 選中需要生成腳本的數(shù)據(jù)庫

      比如我要導(dǎo)出test表的數(shù)據(jù)和表定義

      要選擇架構(gòu)和數(shù)據(jù),并且要選擇索引,這樣就會(huì)生成表的數(shù)據(jù)、定義、索引

      生成的腳本如下

      USE [sss]GO/****** Object: Table [dbo].[test] Script Date: 2014/7/24 11:27:44 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[test]([a] [int] NULL)ON [PRIMARY]

      GOINSERT [dbo].[test]([a])VALUES(10)GO

      由于test表是沒有任何索引的,所以腳本里看不到CREATE INDEX語句

      實(shí)際上各種數(shù)據(jù)庫的備份恢復(fù)方法都是大同小異的 ORACLE冷備份與恢復(fù)

      邏輯備份和物理備份

      1、導(dǎo)出create table、create index、insert into 表等語句(邏輯備份)mysql:mysqldump、load data infile、select into outfile sqlserver:生成腳本、導(dǎo)入導(dǎo)出向?qū)?oracle:(exp/imp)

      2、直接復(fù)制文件(物理備份)

      sqlserver:backup database語句、backup log語句、停SQLSERVER服務(wù)直接拷貝數(shù)據(jù)文件

      mysql:mysqlhotcopy、innobackupex oracle:rman、直接將關(guān)鍵性文件拷貝到另外的位置、(exp/imp)、(expdp/impdp)相似點(diǎn):上面的各種數(shù)據(jù)庫的各種備份還原方法,每一種基本上都會(huì)有一個(gè)單獨(dú)的工具來做 例如sqlserver導(dǎo)入導(dǎo)出向?qū)Ь褪且粋€(gè)單獨(dú)的exe來做 oracle的rman也是一個(gè)單獨(dú)的工具

      冷備份和熱備份:無論oracle、sqlserver、mysql都有冷備份和熱備份的概念 冷備份其實(shí)可以簡單理解為:停止服務(wù)進(jìn)行備份

      熱備份其實(shí)可以簡單理解為:不停止服務(wù)進(jìn)行備份(在線)上面的停止服務(wù),正確的來講應(yīng)該是停止數(shù)據(jù)庫的寫入

      為什么mysql的myisam引擎只支持冷備份呢? 大家可以先想一下innodb引擎,innodb引擎是事務(wù)性存儲(chǔ)引擎,每一條語句都會(huì)寫日志,并且每一條語句在日志里面都有時(shí)間點(diǎn)

      那么在備份的時(shí)候,mysql可以根據(jù)這個(gè)日志來進(jìn)行redo和undo,將備份的時(shí)候沒有提交的事務(wù)進(jìn)行回滾,已經(jīng)提交了的進(jìn)行重做

      但是myisam不行,myisam是沒有日志的,為了保證一致性,只能停機(jī)或者鎖表進(jìn)行備份

      在書《MYSQL性能調(diào)優(yōu)和架構(gòu)設(shè)計(jì)》里面說到了事務(wù)的作用

      大家可以想一想,為什么sqlserver支持從某一個(gè)lsn或者時(shí)刻進(jìn)行恢復(fù)數(shù)據(jù)庫,他也是從日志里面讀取日志的lsn號來進(jìn)行恢復(fù)到某一個(gè)lsn時(shí)刻的數(shù)據(jù)或者某一個(gè)時(shí)刻的數(shù)據(jù) 假如沒有事務(wù)日志,那么sqlserver是做不到時(shí)點(diǎn)還原的熱備份、冷備份

      為什么SQLSERVER需要停止SQLSERVER服務(wù)才可以拷貝物理數(shù)據(jù)文件,為的都是保證數(shù)據(jù)一致性

      物理備份方法

      1、直接復(fù)制整個(gè)數(shù)據(jù)庫目錄

      因?yàn)镸YSQL表保存為文件方式,所以可以直接復(fù)制MYSQL數(shù)據(jù)庫的存儲(chǔ)目錄以及文件進(jìn)行備份。

      MYSQL的數(shù)據(jù)庫目錄位置不一定相同,在Windows平臺(tái)下,MYSQL5.6存放數(shù)據(jù)庫的目錄通常默認(rèn)為

      C:Documents and SettingsAll UserApplication DataMySQLMYSQL Server 5.6data 或者其他用戶自定義的目錄;

      在Linux平臺(tái)下,數(shù)據(jù)庫目錄位置通常為/var/lib/mysql/,不同Linux版本下目錄會(huì)有不同

      這是一種簡單、快速、有效的備份方式。要想保持備份一致,備份前需要對相關(guān)表執(zhí)行LOCK TABLES操作,然后對表執(zhí)行 FLUSH TABLES。這樣當(dāng)復(fù)制數(shù)據(jù)庫目錄中的文件時(shí),允許其他客戶繼續(xù)查詢表。需要FLUSH TABLES語句來確保開始 備份前將所有激活的索引頁寫入磁盤。當(dāng)然,也可以停止MYSQL服務(wù)再進(jìn)行備份操作

      這種方法雖然簡單,但并不是最好的方法。因?yàn)檫@種方法對INNODB存儲(chǔ)引擎的表不適用。使用這種方法備份的數(shù)據(jù)最好還原

      到相同版本的服務(wù)器中,不同的版本可能不兼容。

      注意:在mysql版本中,第一個(gè)數(shù)字表示主版本號,主版本號相同的MYSQL數(shù)據(jù)庫文件格式相同

      2、使用mysqlhotcopy工具快速備份

      mysqlhotcopy是一個(gè)perl腳本,最初由Tim Bunce編寫并提供。他使用LOCK TABLES、FLUSH TABLES和cp或scp 來快速備份數(shù)據(jù)庫。他是備份數(shù)據(jù)庫或單個(gè)表的最快途徑,但他只能運(yùn)行在數(shù)據(jù)庫目錄所在機(jī)器上,并且只能備份myisam類型的表。語法

      mysqlhotcopy db_name_1,...db_name_n /path/to/new_directory db_name_1...n代表要備份的數(shù)據(jù)庫的名稱; path/to/new_directory指定備份文件目錄

      示例

      在Linux下面使用mysqlhotcopy備份test庫到/usr/backup mysqlhotcopy-u root-p test /usr/backup

      要想執(zhí)行mysqlhotcopy,必須可以訪問備份的表文件,具有那些表的SELECT權(quán)限、RELOAD權(quán)限(以便能夠執(zhí)行FLUSH TABLES)和LOCK TABLES權(quán)限

      提示:mysqlhotcopy只是將表所在目錄復(fù)制到另一個(gè)位置,只能用于備份myisam和archive表。備份innodb表會(huì)出現(xiàn)錯(cuò)誤信息

      由于他復(fù)制本地格式的文件,故也不能移植到其他硬件或操作系統(tǒng)下

      邏輯還原

      1、使用mysql命令進(jìn)行還原

      對于已經(jīng)備份的包含CREATE、INSERT語句的文本文件,可以使用myslq命令導(dǎo)入數(shù)據(jù)庫中

      還原

      備份的sql文件中包含CREATE、INSERT語句(有時(shí)也會(huì)有DROP語句)。mysql命令可以直接執(zhí)行文件中的這些語句 其語法如下:

      mysql-u user-p [dbname]

      用mysql命令將school_2014-7-10.sql文件中的備份導(dǎo)入到數(shù)據(jù)庫中

      mysql-u root-h 127.0.0.1-p school

      如果已經(jīng)登錄mysql,那么可以使用source命令導(dǎo)入備份文件 使用source命令導(dǎo)入備份文件school_2014-7-10.sql

      執(zhí)行source命令前必須使用use 語句選擇好數(shù)據(jù)庫,不然會(huì)出現(xiàn)ERROR 1046(3D000):NO DATABASE SELECTED 的錯(cuò)誤

      還有一點(diǎn)要注意的是只能在cmd界面下執(zhí)行,不能在mysql工具里面執(zhí)行source命令,否則會(huì)報(bào)錯(cuò)

      因?yàn)閏md是直接調(diào)用mysql.exe來執(zhí)行命令的

      而這些mysql 編輯工具只是利用mysql connector連接mysql,來管理mysql并不是直接調(diào)用mysql.exe,所以執(zhí)行source會(huì)報(bào)錯(cuò)

      物理還原

      2、直接復(fù)制到數(shù)據(jù)庫目錄

      如果數(shù)據(jù)庫通過復(fù)制數(shù)據(jù)庫文件備份,可以直接復(fù)制備份文件到MYSQL數(shù)據(jù)目錄下實(shí)現(xiàn)還原。通過這種方式還原時(shí),必須保證備份數(shù)據(jù)的數(shù)據(jù)庫和待還原的數(shù)據(jù)庫服務(wù)器的主版本號相同。而且這種方式只對MYISAM引擎有效,對于innodb引擎的表不可用

      執(zhí)行還原以前關(guān)閉mysql服務(wù),將備份的文件或目錄覆蓋mysql的data目錄,啟動(dòng)mysql服務(wù)。

      對于Linux操作系統(tǒng)來說,復(fù)制完文件需要將文件的用戶和組更改為mysql運(yùn)行的用戶和組,通常用戶是mysql,組也是mysql

      3、mysqlhotcopy快速恢復(fù)

      mysqlhotcopy備份后的文件也可以用來恢復(fù)數(shù)據(jù)庫,在mysql服務(wù)器停止運(yùn)行時(shí),將備份的數(shù)據(jù)庫文件復(fù)制到mysql存放數(shù)據(jù)的位置

      (mysql的data文件夾),重新啟動(dòng)mysql服務(wù)即可。

      如果根用戶執(zhí)行該操作,必須指定數(shù)據(jù)庫文件的所有者,輸入語句如下:

      chown-R mysql.mysql /var/lib/mysql/dbname

      從mysqlhotcopy復(fù)制的備份恢復(fù)數(shù)據(jù)庫

      cp-R /usr/backup/test usr/local/mysql/data 執(zhí)行完該語句,重啟服務(wù)器,mysql將恢復(fù)到備份狀態(tài)

      注意:如果需要恢復(fù)的數(shù)據(jù)庫已經(jīng)存在,則在使用DROP語句刪除已經(jīng)存在的數(shù)據(jù)庫之后,恢復(fù)才能成功。另外mysql不同版本之間必須兼容,恢復(fù)之后的數(shù)據(jù)才可以使用!

      數(shù)據(jù)庫遷移

      數(shù)據(jù)庫遷移就是把數(shù)據(jù)從一個(gè)系統(tǒng)移動(dòng)到另一個(gè)系統(tǒng)上。遷移的一般原因:

      1、需要安裝新的數(shù)據(jù)庫服務(wù)器

      2、mysql版本更新

      3、數(shù)據(jù)庫管理系統(tǒng)變更(從SQLSERVER遷移到mysql)

      相同版本的MYSQL數(shù)據(jù)庫之間遷移

      相同版本mysql數(shù)據(jù)庫間的遷移就是主版本號相同的mysql數(shù)據(jù)庫直接進(jìn)行數(shù)據(jù)庫移動(dòng)。前面講解備份和還原的時(shí)候,知道最簡單的方法就是復(fù)制數(shù)據(jù)庫文件目錄,但是這種方法只適合于myisam表

      對于innodb表,不能直接復(fù)制文件來備份數(shù)據(jù)庫

      最常用的方法是使用mysqldump導(dǎo)出數(shù)據(jù),然后在目標(biāo)數(shù)據(jù)庫服務(wù)器使用mysql命令導(dǎo)入

      將004km.cn/2001/XMLSchema-instance“>

      1

      green

      29

      lawer

      2

      suse

      26

      dancer

      3

      evans

      27

      sports man

      4

      mary

      26 singer

      導(dǎo)入

      1、使用LOAD DATA INFILE 方式導(dǎo)入文本文件

      mysql允許將數(shù)據(jù)導(dǎo)出到外部文件,也可以從外部文件導(dǎo)入數(shù)據(jù)。

      MYSQL提供了一些導(dǎo)入數(shù)據(jù)的工具,這些工具有:LOAD DATA語句、source命令、mysql命令

      LOAD DATA INFILE語句用于高速地從一個(gè)文本文件中讀取行,并裝入一個(gè)表中。文件名稱必須為文字字符串 語法如下:

      LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name [FIELDS [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char' ] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ] [IGNORE number LINES] [(col_name_or_user_var,...)] [SET col_name = expr,...]] load data infile語句從一個(gè)文本文件中以很高的速度讀入一個(gè)表中。使用這個(gè)命令之前,mysqld進(jìn)程(服務(wù))必須已經(jīng)在運(yùn)行。

      當(dāng)讀取的文本文件不在本機(jī),而是位于服務(wù)器上的文本文件時(shí),使用load data infile語句,在服務(wù)器主機(jī)上你必須有file的權(quán)限。、如果你指定關(guān)鍵詞low_priority,那么MySQL將會(huì)等到?jīng)]有其他人讀取這個(gè)表的時(shí)候,才插入數(shù)據(jù)。例如如下的命令:

      load data low_priority infile ”/home/mark/data.sql“ into table Orders;2、如果指定local關(guān)鍵詞,則表明讀取的文件在本機(jī),那么必須指定local參數(shù)。3、replace和ignore參數(shù)控制對現(xiàn)有表的唯一鍵記錄重復(fù)的處理。如果你指定replace,新行將代替有相同的唯一鍵值的現(xiàn)有行。

      (1)如果你指定ignore,跳過有唯一鍵的現(xiàn)有行的重復(fù)行的輸入。

      (2)如果你不指定任何一個(gè)選項(xiàng),當(dāng)找到重復(fù)鍵時(shí),出現(xiàn)一個(gè)錯(cuò)誤,并且文本文件的余下部分被忽略。

      FIELDS TERMINATED BY ','表示字段之間用逗號分隔 ENCLOSED BY '''表示每個(gè)字段用雙引號括起來

      ESCAPED BY '''表示將系統(tǒng)默認(rèn)的轉(zhuǎn)移字符替換為單引號 LINES STARTING BY ''表示每行數(shù)據(jù)開頭的字符,可以為單個(gè)或多個(gè),默認(rèn)不是有任何字符

      LINES TERMINATED BY 'rn'表示每行以回車換行符結(jié)尾,保證每一條記錄占一行 [IGNORE number LINES] 選項(xiàng)表示忽略文件開始處的行數(shù),number表示忽略的行數(shù)。

      基本上格式上的參數(shù)跟SELECT...INTO OUTFILE是一樣的

      使用LOAD DATA命令將C:person0。txt文件中的數(shù)據(jù)導(dǎo)入到test庫中的test表

      LOAD DATA INFILE 'C:person0.txt' INTO TABLE test.person 先刪除person表里的數(shù)據(jù),然后執(zhí)行LOAD DATA命令

      使用mysqlimport命令導(dǎo)入文本文件

      2、使用mysqlimport命令導(dǎo)入文本文件 mysqlimport是一個(gè)單獨(dú)的exe,他提供了許多與LOAD DATA INFILE語句相同的功能 大多數(shù)選項(xiàng)直接對應(yīng)LOAD DATA INFILE子句

      mysqlimport的語法如下

      mysqlimport-u root-p dbname filename.txt [OPTIONS]--[OPTIONS] 選項(xiàng)

      FIELDS TERMINATED BY 'value' ENCLOSED BY 'value' ESCAPED BY 'value'

      LINES TERMINATED BY 'value' IGNORE LINES [OPTIONS] 選項(xiàng)基本上與LOAD DATA INFILE 語句是一樣的,這里不做介紹了 mysqlimport不能指定導(dǎo)入的表名稱,表名稱由導(dǎo)入文件名稱確定,即文件名作為表名,導(dǎo)入數(shù)據(jù)之前該表必須存在

      使用mysqlimport命令將C:目錄下person.txt文件內(nèi)容導(dǎo)入到test庫 先刪除test庫的person表的數(shù)據(jù)

      DELETE FROM `person`;

      person.txt文件內(nèi)容 1 green 29 lawer2 suse 26 dancer3 evans 27 sports man4 mary 26 singer 命令如下

      mysqlimport-u root-p test C:person.txt

      導(dǎo)入成功

      mysqlimport的常見選項(xiàng):

      顯示幫助消息并退出。

      ·--columns=column_list,-c column_list

      該選項(xiàng)采用用逗號分隔的列名作為其值。列名的順序指示如何匹配數(shù)據(jù)文件列和表列。

      ·--compress,-C

      壓縮在客戶端和服務(wù)器之間發(fā)送的所有信息(如果二者均支持壓縮)。

      ·---debug[=debug_options],-# [debug_options] 寫調(diào)試日志。debug_options字符串通常是'd:t:o,file_name'。·--delete,-D 導(dǎo)入文本文件前清空表。

      ·--fields-terminated-by=...,--fields-enclosed-by=...,--fields-optionally-enclosed-by=...,--fields-escaped-by=...,--lines-terminated-by=...這些選項(xiàng)與LOAD DATA INFILE相應(yīng)子句的含義相同。參見13.2.5節(jié),“LOAD DATA INFILE語法”。

      ·--force,-f

      忽視錯(cuò)誤。例如,如果某個(gè)文本文件的表不存在,繼續(xù)處理其它文件。不使用--force,如果表不存在則mysqlimport退出。

      ·--host=host_name,-h host_name

      將數(shù)據(jù)導(dǎo)入給定主機(jī)上的MySQL服務(wù)器。默認(rèn)主機(jī)是localhost。

      ·--ignore,-i 參見--replace選項(xiàng)的描述?!?-ignore-lines=n 忽視數(shù)據(jù)文件的前n行。

      ·--local,-L 從本地客戶端讀入輸入文件。

      ·--lock-tables,-l

      處理文本文件前鎖定所有表以便寫入。這樣可以確保所有表在服務(wù)器上保持同步。

      ·--password[=password],-p[password]

      當(dāng)連接服務(wù)器時(shí)使用的密碼。如果使用短選項(xiàng)形式(-p),選項(xiàng)和 密碼之間不能有空格。如果在命令行中--password或-p選項(xiàng)后面沒有 密碼值,則提示輸入一個(gè)密碼?!?-port=port_num,-P port_num 用于連接的TCP/IP端口號。

      ·--protocol={TCP | SOCKET | PIPE | MEMORY} 使用的連接協(xié)議。

      ·--replace,-r

      --replace和--ignore選項(xiàng)控制復(fù)制唯一鍵值已有記錄的輸入記錄的處理。如果指定--replace,新行替換有相同的唯一鍵值的已有行。如果指定--ignore,復(fù)制已有的唯一鍵值的輸入行被跳過。如果不指定這兩個(gè)選項(xiàng),當(dāng)發(fā)現(xiàn)一個(gè)復(fù)制鍵值時(shí)會(huì)出現(xiàn)一個(gè)錯(cuò)誤,并且忽視文本文件的剩余部分?!?-silent,-s 沉默模式。只有出現(xiàn)錯(cuò)誤時(shí)才輸出。

      ·--socket=path,-S path

      當(dāng)連接localhost時(shí)使用的套接字文件(為默認(rèn)主機(jī))。

      ·--user=user_name,-u user_name 當(dāng)連接服務(wù)器時(shí)MySQL使用的用戶名。

      ·--verbose,-v

      冗長模式。打印出程序操作的詳細(xì)信息。

      ·--version,-V 顯示版本信息并退出。

      提示:

      LOAD DATA INFILE語句中有一個(gè)mysqlimport工具中沒有特點(diǎn): LOAD DATA INFILE 可以按指定的字段把文件導(dǎo)入到數(shù)據(jù)庫中。當(dāng)我們要把數(shù)據(jù)的一部分內(nèi)容導(dǎo)入的時(shí)候,這個(gè)特點(diǎn)就很重要。

      比方說,我們要從Access數(shù)據(jù)庫升級到MySQL數(shù)據(jù)庫的時(shí)候,需要加入一些字段(列/字 段/field)到MySQL數(shù)據(jù)庫中,以適應(yīng)一些額外的需要。

      這個(gè)時(shí)候,我們的Access數(shù)據(jù)庫中的數(shù)據(jù)仍然是可用的,但是因?yàn)檫@些數(shù)據(jù)的字段(field)與MySQL中的不再匹配,因此而無法再使用mysqlimport工具。

      盡管如此,我們?nèi)匀豢梢允褂肔OAD DATA INFILE,下面的例子顯示了如何向指定的字段(field)中導(dǎo)入數(shù)據(jù):

      LOAD DATA INFILE ”/home/Order.txt" INTO TABLE Orders(Order_Number, Order_Date, Customer_ID);

      如您所見,我們可以指定需要的字段(fields)。這些指定的字段依然是以括號括起,由逗號分隔的,如果您遺漏了其中任何一個(gè),MySQL將會(huì)提醒您^_^

      如何選擇備份工具?

      直接復(fù)制數(shù)據(jù)文件是最為直接、快速的備份方法,但缺點(diǎn)是基本上不能實(shí)現(xiàn)增量備份。備份時(shí)必須確保沒有使用這些表。如果在復(fù)制一個(gè)表的物理數(shù)據(jù)文件的同時(shí)服務(wù)器正在修改他,則復(fù)制無效。

      備份文件時(shí),最好關(guān)閉服務(wù)器,然后重新啟動(dòng)服務(wù)器,為了保證數(shù)據(jù)的一致性,需要在備份文件前執(zhí)行以下SQL FLUSH TABLES WITH READ LOCK;也就是把內(nèi)存中的數(shù)據(jù)刷新到磁盤中,同時(shí)鎖定數(shù)據(jù)表,以保證復(fù)制過程中不會(huì)有新的數(shù)據(jù)寫入。

      這種方法備份出來的數(shù)據(jù)恢復(fù)很簡單,直接復(fù)制回原來的數(shù)據(jù)庫目錄下即可

      mysqlhotcopy是一個(gè)PERL程序,他使用LOCK TABLES、FLUSH TABLES和CP或SCP來快速備份數(shù)據(jù)庫

      他是備份數(shù)據(jù)庫或單個(gè)表的最快的途徑,但他只能運(yùn)行在數(shù)據(jù)庫文件所在機(jī)器上,并且mysqlhotcopy只能用于備份myisam表

      mysqlhotcopy適合于小型數(shù)據(jù)庫的備份,數(shù)據(jù)量不大,可以使用mysqlhotcopy程序每天進(jìn)行一次完全備份 mysqldump將數(shù)據(jù)表導(dǎo)出為SQL腳本,在不同的MYSQL版本之間升級時(shí)相對比較合適,這也是最常用的備份方法。mysqldump比直接復(fù)制要慢些。

      使用mysqldump備份整個(gè)數(shù)據(jù)庫成功,把表和數(shù)據(jù)庫刪除了,但使用備份文件卻不能恢復(fù)數(shù)據(jù)庫?

      出現(xiàn)這種情況是因?yàn)閭浞莸臅r(shí)候沒有指定--databases參數(shù)。默認(rèn)情況下,如果只指定數(shù)據(jù)庫名稱,mysqldump 備份的是數(shù)據(jù)庫中的所有表,而不包括數(shù)據(jù)庫的創(chuàng)建語句,如下

      mysqldump-u root-p booksdb >c:booksdb_2014-7-1.sql 該語句只備份了booksdb數(shù)據(jù)庫下的所有表,讀者打開該文件,可以看到文件中不包含創(chuàng)建booksdb數(shù)據(jù)庫 的CREATE DATABASE語句,因此如果把booksdb也刪除了,使用該sql文件不能還原以前的表,還原時(shí)會(huì)出現(xiàn)ERROR 1046(3D000):NO DATABASE SELECTED 的錯(cuò)誤信息 而下面的語句,數(shù)據(jù)庫刪除之后,可以正常還原備份時(shí)的狀態(tài)

      mysqldump-u root-p--databases booksdb>C:booksdb_db_2014-7-1.sql

      該語句不僅備份了所有數(shù)據(jù)庫下的表結(jié)構(gòu),而且包括創(chuàng)建數(shù)據(jù)庫的語句 MYSQL中的備份和還原,還有數(shù)據(jù)庫的遷移,異構(gòu)數(shù)據(jù)庫之間的遷移基本上都用導(dǎo)出文件文件的方法

      如果是小數(shù)據(jù)量尚可以,如果數(shù)據(jù)量比較大,導(dǎo)出文本文件也會(huì)很大,不是太可取

      下載我的MYSQL學(xué)習(xí)心得word格式文檔
      下載我的MYSQL學(xué)習(xí)心得.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        mySql總結(jié)

        Mysql命令:在mysql的bin目錄下執(zhí)行: Mysql –h host_name –u user_name –p password Use 數(shù)據(jù)庫名;選定默認(rèn)數(shù)據(jù)庫(切換數(shù)據(jù)庫) 查詢當(dāng)前使用的數(shù)據(jù)庫:select database(); Show dat......

        mysql問題解決總結(jié)

        MySql問題解決總結(jié) ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) ERROR 1045 (28000): Access denied for user 'root'@'localho......

        mysql教案講解

        1、數(shù)據(jù)庫概述 1.1 什么是數(shù)據(jù)庫 數(shù)據(jù)庫DataBase 就是一個(gè)存儲(chǔ)數(shù)據(jù)的倉庫。 為了方便數(shù)據(jù)的存儲(chǔ)和管理,它將數(shù)據(jù)按照特定的規(guī)律存儲(chǔ)在磁盤上。通過數(shù)據(jù)庫管理系統(tǒng),可有效地組......

        MySql知識(shí)點(diǎn)總結(jié)

        1 . 數(shù)據(jù)庫創(chuàng)建 : Create database db_name; 數(shù)據(jù)庫刪除 : Drop database db_name; 刪除時(shí)可先判斷是否存在,寫成 : drop database if exits db_name 2 . 建表 : 創(chuàng)建數(shù)據(jù)表......

        mysql數(shù)據(jù)庫常用語句大全

        mysql數(shù)據(jù)庫常用語句 SQL分類: DDL—數(shù)據(jù)定義語言(CREATE,ALTER,DROP,DECLARE) DML—數(shù)據(jù)操縱語言(SELECT,DELETE,UPDATE,INSERT) DCL—數(shù)據(jù)控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)......

        Mysql常用語句小結(jié)

        1.安裝Mysql注意:選擇語言 2.Doc系統(tǒng)下進(jìn)入Mysql mysql -u用戶名 -p密碼 3.常用的命令: 1.查看mysql下所有的數(shù)據(jù)庫:show databases; 2.創(chuàng)建數(shù)據(jù)庫的命令:create database 數(shù)據(jù)......

        MYSQL常用語句[推薦閱讀]

        MYSQL常用語句 一.連接 遠(yuǎn)程主機(jī):例IP:110.110.110.110 用戶名:user 密碼: abc 輸入命令:mysql -110.110.110.110user-abc; 二.修改密碼 加密碼 :mysqladmin -u root -password ab12......

        PHP MySql亂碼解決方案

        PHP亂碼?Mysql亂碼?怎么解決? PHP亂碼或者mysql亂碼,多半是因?yàn)闆]有統(tǒng)一編碼,要解決PHP/mysql亂碼,只要做到三碼合一即可. 所謂三碼,是指文件編碼,頁面編碼聲明和數(shù)據(jù)庫字符......