mysql快速上手之入門(mén)教程_第1頁(yè)
mysql快速上手之入門(mén)教程_第2頁(yè)
mysql快速上手之入門(mén)教程_第3頁(yè)
mysql快速上手之入門(mén)教程_第4頁(yè)
mysql快速上手之入門(mén)教程_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第一篇:結(jié)構(gòu)化查詢語(yǔ)言SQL是高級(jí)的非過(guò)程化編程語(yǔ)言,它允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶指定對(duì)數(shù)據(jù)的存放方法,也不需要用戶了解其具體的數(shù)據(jù)存放方式。而它的界面,能使具有底層結(jié)構(gòu)完全不同的數(shù)據(jù)庫(kù)系統(tǒng)和不同數(shù)據(jù)庫(kù)之間,使用相同的SQL作為數(shù)據(jù)的輸入與管理。描述說(shuō)明數(shù)據(jù)定義語(yǔ)言(DDL)CREATE DATABASETABLE、ALTER DATABASETABLE、DROP TABLEINDEX數(shù)據(jù)操作語(yǔ)言(DML)SELECT、UPDATE、DELETE、INSERT INTO數(shù)據(jù)查詢語(yǔ)言(DQL)WHERE、ORDER BY、GROUP BY數(shù)據(jù)控制語(yǔ)言(DCL)GRANT、REVO

2、KE、COMMIT、ROLLBACK一.SELECT查詢語(yǔ)句SELECT語(yǔ)句是查詢語(yǔ)句,其語(yǔ)法規(guī)則如下:SELECT ALL | DISTINCT | DISTINCTROW HIGH_PRIORITY STRAIGHT_JOIN SQL_SMALL_RESULT SQL_BIG_RESULT SQL_BUFFER_RESULT SQL_CACHE | SQL_NO_CACHE SQL_CALC_FOUND_ROWSselect_expr, . FROM table_references WHERE where_condition GROUP BY col_name | expr | posi

3、tion ASC | DESC, . WITH ROLLUP HAVING where_condition ORDER BY col_name | expr | position ASC | DESC, . LIMIT offset, row_count | row_count OFFSET offset1.select語(yǔ)句SELECT column_name,column_name FROM table_name;或者SELECT * FROM table_name;2. SELECT DISTINCT語(yǔ)句在表中,可能會(huì)包含重復(fù)值,但有時(shí)也許希望僅僅列出不同(distinct)的值.關(guān)鍵詞D

4、ISTINCT用于返回唯一不同的值.SELECT DISTINCT column_name,column_name FROM table_name;3. WHERE ClauseSELECT column_name,column_name FROM table_name WHERE column_name operator value;下面的運(yùn)算符可以在WHERE從句中出現(xiàn):運(yùn)算符描述運(yùn)算符描述運(yùn)算符描述=等于>=大于等于BETWEEN在某個(gè)范圍內(nèi)<>不等于<=小于或等于LIKE搜索某種模式>大于AND且IN規(guī)定若干個(gè)列可能值<小于OR或(1).AND和OR

5、AND和OR可在WHERE子語(yǔ)句中把兩個(gè)或多個(gè)條件結(jié)合起來(lái)。如果第一個(gè)條件和第二個(gè)條件都成立,則AND運(yùn)算符顯示一條記錄。如果第一個(gè)條件和第二個(gè)條件中只要有一個(gè)成立,則OR運(yùn)算符顯示一條記錄。SELECT * FROM Customers WHERE Country='Germany' AND City='Berlin'SELECT * FROM Customers WHERE City='Berlin' OR City='München'SELECT * FROM Customers WHERE Country=

6、9;Germany' AND (City='Berlin' OR City='München');(2).BETWEEN操作符 BETWEEN . AND 會(huì)選取介于兩個(gè)值之間的數(shù)據(jù)范圍。這些值可以是數(shù)值、文本或者日期。SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;(3).LINKLIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。SELECT column_name(s) FROM table_name WHERE

7、column_name LIKE pattern;Note:在MySQL中對(duì)數(shù)據(jù)進(jìn)行模糊查詢時(shí)需要使用LIKE關(guān)鍵字。SQL語(yǔ)句中支持多種通配符,可以和LIKE一起使用的通配符有:百分號(hào)通配符'%'(匹配任意長(zhǎng)度的字符,甚至包括零字符)和下劃線通配符'_'(一次只能匹配任意一個(gè)字符)。(4).ININ 操作符允許我們?cè)?WHERE 子句中規(guī)定多個(gè)值。SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,.);4. GROUP BY分組查詢分組查詢是對(duì)數(shù)據(jù)按照某個(gè)或多個(gè)字

8、段進(jìn)行分組,MySQL中使用GROUP BY關(guān)鍵字對(duì)數(shù)據(jù)進(jìn)行分組,基本語(yǔ)法形式為:SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_nameNote:HAVING where_condition指定滿足表達(dá)式限定條件的結(jié)果將被顯示。(1).創(chuàng)建分組GROUP BY函數(shù)通常和集合函數(shù)一起使用,例如:MAX()、MIN()、COUNT()、SUM()、AVG()。例如要返回每個(gè)水果供應(yīng)商的水果種類(lèi),這里就要在分組過(guò)程中用到

9、COUNT()函數(shù)把數(shù)據(jù)分為多個(gè)邏輯組,并對(duì)每個(gè)組進(jìn)行集合計(jì)算。select s_id,COUNT(*) AS total from fruits GROUP BY s_id;(2).使用HAVING過(guò)濾分組GROUP BY可以和HAVING一起限定顯示記錄所需滿足的條件,只有滿足條件的分組才會(huì)被顯示.例如根據(jù)S_id對(duì)fruits表中的數(shù)據(jù)進(jìn)行分組,并顯示水果種類(lèi)大于1的分組信息:select s_id,GROUP_CONCAT(f_name) AS names from fruits GROUP BY s_id HAVING COUNT(f_name)>1Note:HAVING關(guān)鍵字

10、與WHERE關(guān)鍵字都用來(lái)過(guò)濾數(shù)據(jù)的,但HAVING是在數(shù)據(jù)分組之后進(jìn)行過(guò)濾來(lái)選擇分組,而WHERE在分組之前用來(lái)選擇記錄.MySQL中可以在GROUP BY字節(jié)中使用GROUP_CONCAT()函數(shù),將每個(gè)分組中各個(gè)字段的值顯示出來(lái).(3).在GROUP BY子句中使用WITH ROLLUP使用WITH ROLLUP關(guān)鍵字之后,在所有查詢出的分組記錄之后增加一條記錄,該記錄計(jì)算查詢出的所有記錄的總和,即統(tǒng)計(jì)記錄數(shù)量.例如根據(jù)s_id對(duì)fruits表中的數(shù)據(jù)進(jìn)行分組,并顯示記錄數(shù)量:Select s_id,COUNT(*) AS total from fruits GROUP BY s_id W

11、ITH ROLLUP;Note: GROUP BY分組后,在顯示結(jié)果的最后面新添加了一行,該行total列的值正好是上面所有數(shù)值之和。5. ORDER BYORDER BY 語(yǔ)句用于根據(jù)指定的列對(duì)結(jié)果集進(jìn)行排序。默認(rèn)按照升序(ASC)對(duì)記錄進(jìn)行排序。如果您希望按照降序?qū)τ涗涍M(jìn)行排序,可以使用 DESC 關(guān)鍵字。SELECT Company, OrderNumber FROM Orders ORDER BY Company DESCNote:默認(rèn)情況下,查詢數(shù)據(jù)按字母升序進(jìn)行排序(從AZ),使用關(guān)鍵字DESC可以對(duì)查詢結(jié)果進(jìn)行降序排序(從ZA)6.LIMITSELECT返回所有匹配的行,有可能是

12、表中所有的行,如僅僅需要返回第一行或者前幾行,使用LIMIT關(guān)鍵字,基本語(yǔ)法如下:SELECT select_expr, .ORDER BY col_name | expr | position ASC | DESC, .LIMIT offset, row_count | row_count OFFSET offsetNote:offset為L(zhǎng)IMIT中可選的"位置偏移量"參數(shù),指示MySQL從哪一行開(kāi)始顯示,如果不指定"位置偏移量",將會(huì)從表中的第一條記錄開(kāi)始(第一條記錄的位置偏移量是0,第二條記錄的偏移量是1依次類(lèi)推);第二個(gè)參數(shù)row_count為

13、"行數(shù)"指示返回的記錄條數(shù)。帶一個(gè)參數(shù)的LIMIT指定從查詢結(jié)果的首行開(kāi)始,唯一的參數(shù)表示返回的行數(shù),即"LIMIT n"與"LIMIT 0,n"等價(jià).帶兩個(gè)參數(shù)的LIMIT可以返回從任何一個(gè)位置開(kāi)始的指定的行數(shù)。二、INSERTINSERT INTO 語(yǔ)句用于向表格中插入新的行。INSERT INTO table_name VALUES (value1,value2,value3,.);我們也可以指定所要插入數(shù)據(jù)的列:INSERT INTO table_name (column1,column2,column3,.) VALUES

14、(value1,value2,value3,.);三、UPDATEUpdate 語(yǔ)句用于修改表中的數(shù)據(jù)。UPDATE table_name SET column1=value1,column2=value2,. WHERE some_column=some_value;Note:當(dāng)使用UPDATE語(yǔ)句時(shí)請(qǐng)小心,如果我們忘記了WHERE從句,結(jié)果改變是整個(gè)字段的值。UPDATE Customers SET ContactName='Alfred Schmidt', City='Hamburg'四、DELETEDELETE語(yǔ)句用于刪除表中的行。DELETE FROM

15、 table_name WHERE some_column=some_value;1. 刪除某行"Fred Wilson" 會(huì)被刪除:DELETE FROM Person WHERE LastName = 'Wilson'2.刪除所有行可以在不刪除表的情況下刪除所有的行。這意味著表的結(jié)構(gòu)、屬性和索引都是完整的:DELETE FROM table_name五、CREATE 1.CREATE DATABASE創(chuàng)建數(shù)據(jù)庫(kù)CREATE DATABASE | SCHEMA IF NOT EXISTS db_nameDEFAULT CHARACTER SET chars

16、et_name | DEFAULT COLLATE collation_name2.CREATE TABLE創(chuàng)建表CREATE TEMPORARY TABLE IF NOT EXISTS tbl_name(create_definition,.) table_option . partition_options3.CREATE INDEX創(chuàng)建索引CREATE UNIQUE|FULLTEXT|SPATIAL INDEX index_name index_typeON tbl_name (index_col_name,.) index_option .4.CREATE USER創(chuàng)建用戶CREATE

17、 USER user_specification , user_specification .user_specification:userhost IDENTIFIED BY PASSWORD 'password' | IDENTIFIED WITH auth_plugin AS 'auth_string'Note:user表示創(chuàng)建的用戶的名稱(chēng);host表示允許登錄的用戶主機(jī)名稱(chēng);IDENTIFIED BY表示用來(lái)設(shè)置用戶的密碼;PASSWORD該參數(shù)可選,表示使用哈希值設(shè)置密碼;'password'表示用戶登錄時(shí)使用的普通明文密碼。IDENT

18、IFIED WITH語(yǔ)句為用戶指定一個(gè)身份驗(yàn)證插件;auth_plugin是插件的名稱(chēng),插件的名稱(chēng)可以是一個(gè)帶有單引號(hào)的字符串,或者帶引號(hào)的字符串;auth_string是可選的字符串參數(shù),該參數(shù)將傳遞給身份驗(yàn)證插件,由該插件解釋該參數(shù)的意義【IDENTIFIED WITH只能在PHP 5.5.7及以上版本中使用,IDENTIFIED BY和IDENTIFIED WITH是互斥的,所以對(duì)于一個(gè)賬戶來(lái)說(shuō)只能使用一個(gè)驗(yàn)證方法】。l 使用CREATE USER創(chuàng)建一個(gè)用戶,用戶名是jeffrey,密碼是mypass,主機(jī)名是localhost,命令如下:CREATE USER 'jeffre

19、y''localhost' IDENTIFIED BY 'mypass'Note:如果只指定用戶名部分'jeffrey',主機(jī)名部分則默認(rèn)為'%'(即對(duì)所有的主機(jī)開(kāi)放權(quán)限)。通過(guò)CREATE USER語(yǔ)句可以在user表中添加一條新的記錄,但是CREATE USER語(yǔ)句創(chuàng)建的新用戶沒(méi)有任何權(quán)限,還需要使用GRANT語(yǔ)句賦予用戶權(quán)限。【建議使用GRANT語(yǔ)句創(chuàng)建新用戶】六、DROP刪除1.DROP DATABASE刪除數(shù)據(jù)庫(kù)DROP DATABASE IF EXISTS db_name2.DROP TABLE刪除數(shù)據(jù)表DRO

20、P TEMPORARY TABLE IF EXISTS tbl_name , tbl_name .Note:使用DROP TABLE命令可以一次刪除一個(gè)或多個(gè)沒(méi)有被其他表關(guān)聯(lián)的數(shù)據(jù)表,只需將要?jiǎng)h除的表名依次寫(xiě)在后面,想到之間用逗號(hào)隔開(kāi)即可。如果要?jiǎng)h除的數(shù)據(jù)表不存在,則MySQL會(huì)提示一條錯(cuò)誤信息:" ERROR 1051 (42S02): Unknown table 'tb12'"參數(shù)"IF EXISTS"用于在刪除前判斷刪除的表是否存在,加上該參數(shù)后再刪除表的時(shí),如果表不存在,SQL語(yǔ)句可以順利執(zhí)行,但是會(huì)發(fā)出警告:"Quer

21、y OK, 0 rows affected, 1 warnings (0.00 sec)"。u 刪除被其他表關(guān)聯(lián)的主表數(shù)據(jù)表之間存在外鍵關(guān)聯(lián)的情況下,如果直接刪除父表,結(jié)果會(huì)顯示失敗。原因是直接刪除,將破壞表的參照完整性。如果必須要?jiǎng)h除,可以先刪除與它關(guān)聯(lián)的子表,再刪除父表,只是這樣同時(shí)刪除了兩個(gè)表中的數(shù)據(jù)。但有的情況下可能要保留子表,這時(shí)如要單獨(dú)刪除父表,只需將關(guān)聯(lián)的表的外鍵約束條件取消,然后就可以刪除父表。3.DROP INDEX刪除索引DROP INDEX index_name ON tbl_name七、ALTER1.ALTER DATABASEALTER DATABASE |

22、 SCHEMA db_name DEFAULT CHARACTER SET charset_name | DEFAULT COLLATE collation_name.2.ALTER TABLE修改數(shù)據(jù)表修改表指的是修改數(shù)據(jù)庫(kù)中已經(jīng)存在的數(shù)據(jù)表的結(jié)構(gòu)。MySQL使用ALTER TABLE語(yǔ)句修改表,常用的修改表的操作有:修改表名、修改字段數(shù)據(jù)類(lèi)型/字段名、增加/刪除字段、修改字段的排列位置、更改表存儲(chǔ)引擎、刪除表的外鍵約束等。1.修改表名ALTER TABLE tbl_name RENAME TO new_tbl_name2.修改字段的數(shù)據(jù)類(lèi)型ALTER TABLE tbl_name MODI

23、FY COLUMN column_definition3.修改字段名ALTER TABLE tbl_name CHANGE COLUMN old_col_name column_definition4.添加字段ALTER TABLE tbl_name ADD COLUMN column_definition FIRST | AFTER col_name 5.刪除字段ALTER TABLE tbl_name DROP COLUMN col_name6.修改字段的排列位置ALTER TABLE tbl_name MODIFY COLUMN column_definition FIRST | AFT

24、ER col_namel column_definition:col_name data_typel FIRST為可選參數(shù),指將column_definition中的col_name字段修改為表的第一個(gè)字段。l AFTER col_name,指將column_definition中的col_name字段插入到col_name后面。7.更改表的存儲(chǔ)引擎ALTER TABLE tbl_name ENGINE = engine_name8.刪除表的外鍵約束ALTER TABLE tbl_name DROP FOREIGN KEY fk_symboll fk_symbol為外鍵約束名,指在定義表時(shí)CO

25、NSTRAINT關(guān)鍵字后面的參數(shù)。八、GRANT權(quán)限設(shè)置GRANT priv_type (column_list) , priv_type (column_list) . ON object_type tbl_name | * | *.* | db_name.* TO userhost IDENTIFIED BY PASSWORD 'password'-> priv_type為賦予用戶的權(quán)限類(lèi)型,如下:Select_priv|Insert_priv|Update_priv|Delete_priv| Create_priv | Drop_priv | Reload_priv

26、 | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_pr

27、iv | Create_user_priv | Event_priv | Trigger_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections-> tbl_name | * | *.* | db_name.*表示用戶的權(quán)限所作用的數(shù)據(jù)庫(kù)中的表;IDENTIFIED BY關(guān)鍵字用來(lái)設(shè)置密;'password'表示用戶密碼。l 下面為my_db數(shù)據(jù)指定用戶名為admin,密碼

28、為admin888.grant all on my_db.* to 'admin''localhost' identified by 'admin888'l 創(chuàng)建一個(gè)新的用戶myuser,密碼為mypwd,并授于用戶所有數(shù)據(jù)表的SELECT和UPDATE權(quán)限。mysql> grant select,update on *.* to 'myuser''localhost' identified by 'mypwd'執(zhí)行成功后,使用SELECT語(yǔ)句查詢用戶myuser的權(quán)限:mysql> s

29、elect host,user,select_priv,update_priv from mysql.user where user='myuser'+-+-+-+-+| host | user | select_priv | update_priv |+-+-+-+-+| localhost | myuser | Y | Y |+-+-+-+-+Note:此時(shí)添加新用戶成功,但新添加的用戶還無(wú)法使用賬號(hào)密碼登錄MySQL,需要使用執(zhí)行FLUSH PRIVILEGES命令,告訴服務(wù)器重新加載授權(quán)表(重啟服務(wù)器也會(huì)重新加載授權(quán)表)。使用GRANTIDENTIFIED BY語(yǔ)句設(shè)置

30、密碼時(shí),會(huì)自動(dòng)加密密碼,此時(shí)不需要使用PASSWORD()函數(shù)。這點(diǎn)應(yīng)注意與UPDATE和SET語(yǔ)句修改密碼時(shí)需要使用PASSWORD()函數(shù)加密密碼區(qū)別開(kāi)來(lái)。帳戶管理一、創(chuàng)建普通用戶1.使用CREATE USER語(yǔ)句創(chuàng)建新用戶CREATE USER user IDENTIFIED BY PASSWORD 'password', user IDENTIFIED BY PASSWORD 'password' .2.使用GRANT語(yǔ)句創(chuàng)建新用戶GRANT priv_type (column_list) , priv_type (column_list) . ON o

31、bject_type tbl_name | * | *.* | db_name.* TO user IDENTIFIED BY PASSWORD 'password' , user IDENTIFIED BY PASSWORD 'password' .REQUIRE NONE | SSL| X509 CIPHER 'cipher' AND ISSUER 'issuer' ANDSUBJECT 'subject' WITH with_option with_option .3.使用INSERT INTO語(yǔ)句操作mys

32、ql.user表二、刪除普通用戶1.使用DROP USER語(yǔ)句刪除用戶DROP USER user , user .2.使用DELETE語(yǔ)句刪除用戶DELETE LOW_PRIORITY QUICK IGNORE FROM tbl_name WHERE where_condition ORDER BY . LIMIT row_count三、root用戶修改自己的密碼1.修改mysql數(shù)據(jù)庫(kù)的user表因?yàn)樗袔粜畔⒍急4嬖趗ser表中,因此可以通過(guò)直接修改user表來(lái)改變r(jià)oot用戶的密碼。l 第一步:root用戶登錄MySQL服務(wù)器:C:UsersAdministrator>mysq

33、l -uroot -pEnter password: *Welcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is 5Server version: 5.1.28-rc-community MySQL Community Server (GPL)Type 'help;' or 'h' for help. Type 'c' to clear the buffer.l 第二步:使用update語(yǔ)句修改mysql數(shù)據(jù)庫(kù)的user表的password

34、字段,從而修改用戶密碼:mysql> update mysql.user set password=password("pwd") where host="" and user="root"Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)Note:使PASSWORD()函數(shù)用來(lái)加密用戶密碼(

35、新密碼必須使用PASSWORD()函數(shù)加密);執(zhí)行完UPADTE語(yǔ)句后,需要執(zhí)行FLUSH FRIVILEGES語(yǔ)句重新加載用戶權(quán)限。2.使用SET語(yǔ)句修改root用戶的密碼SET PASSWORD語(yǔ)句可以用來(lái)重新設(shè)置其他用戶的登錄密碼或者自己使用的賬號(hào)的密碼,其語(yǔ)法如下:SET PASSWORD FOR userhost = PASSWORD('some password')使用SET語(yǔ)句修改自身密碼時(shí)可省略FOR從句,語(yǔ)法如下:SET PASSWORD = PASSWORD("admin666");Note:SET語(yǔ)句執(zhí)行成功后,為了使更改生效,需要重新

36、啟動(dòng)MySQL或者使用FLUSH PRIVILEGES語(yǔ)句刷新權(quán)限,重新加載權(quán)限表。四、root用戶修改普通用戶密碼l 第一步:使用root用戶登錄到MySQL服務(wù)器C:UsersAdministrator>mysql -uroot -pl 第二步:執(zhí)行SET語(yǔ)句,如下:mysql> set password for 'admin''localhost' = password('admin');l 第三步:執(zhí)行FLUSH PRIVILEGES語(yǔ)句:mysql> flush privileges;Query OK, 0 rows

37、affected (0.00 sec)下面是mysql數(shù)據(jù)庫(kù)中user表信息:mysql> select host,user,password from mysql.user;+-+-+-+| host | user | password |+-+-+-+| % | root | | production | root | | | root | | localhost | admin | *4ACFE3202A5FF5CF467898FC58AAB1D615029441 | localhost | myuser | *6F1F0C7FA57187E0D959C29F4

38、BC7F826ED5A9169 |+-+-+-+5 rows in set (0.00 sec)Note:還可以使用UPDATE語(yǔ)句修改普通用戶的密碼;使用GEANT語(yǔ)句修改普通用戶密碼。五、普通用戶修改密碼普通用戶登錄MySQL服務(wù)器后,通過(guò)SET語(yǔ)句設(shè)置自己的密碼。C:UsersAdministrator>mysql -uadmin -pEnter password:*mysql> set password= password("admin888");Query OK, 0 rows affected (0.00 sec)Note:當(dāng)我們修改好密碼后,執(zhí)行F

39、LUSH命令需要RELOAD權(quán)限,該命令執(zhí)行之后,用戶即可登錄服務(wù)器.出現(xiàn)以下錯(cuò)誤提示時(shí),只能重啟服務(wù)器。mysql> flush privileges;ERROR 1227 (42000): Access denied; you need the RELOAD privilege for this operationC:UsersAdministrator>mysql -uadmin -pEnter password: *ERROR 1045 (28000): Access denied for user 'admin''localhost' (u

40、sing password: YES)Note:使用GRANT則不需要使用FLUSH PRIVILEGES。權(quán)限管理權(quán)限管理主要是對(duì)登錄到MySQL的用戶進(jìn)行權(quán)限驗(yàn)證,所有用戶的權(quán)限都存儲(chǔ)在MySQL的權(quán)限表中,不合理的權(quán)限規(guī)劃會(huì)給MySQL服務(wù)器帶來(lái)安全隱患。數(shù)據(jù)庫(kù)管理員要對(duì)所有用戶的權(quán)限進(jìn)行合理規(guī)劃管理。MySQL權(quán)限系統(tǒng)的主要功能是證實(shí)連接到一臺(tái)給定主機(jī)的用戶并且賦予該用戶在數(shù)據(jù)庫(kù)上的SELECT、INSERT、UPDATE和DELETE權(quán)限。賬戶權(quán)限信息被存儲(chǔ)在MySQL服務(wù)器中的mysql數(shù)據(jù)庫(kù)的user、db、host、tables_priv、columns_priv和procs_

41、priv表中,在MySQL啟動(dòng)時(shí),服務(wù)器將這些數(shù)據(jù)庫(kù)表中權(quán)限信息的內(nèi)容讀入內(nèi)存。數(shù)據(jù)備份與還原盡管采取了一些管理措施來(lái)保證數(shù)據(jù)庫(kù)的安全,但是不確定的意外情況總是有可能造成數(shù)據(jù)的損失,例如意外的停電、管理員不小心的操作失誤都可能會(huì)造成數(shù)據(jù)的丟失,保證數(shù)據(jù)安全的最重要的一個(gè)措施是確保對(duì)數(shù)據(jù)進(jìn)行定期備份.如果數(shù)據(jù)庫(kù)中的數(shù)據(jù)丟失或者出現(xiàn)錯(cuò)誤,可以使用備份的數(shù)據(jù)進(jìn)行還原,這樣就盡可能的降低了意外原因?qū)е碌膿p失.一、數(shù)據(jù)備份數(shù)據(jù)備份是數(shù)據(jù)庫(kù)管理員非常重要的工作,系統(tǒng)意外崩潰或者硬件的損壞可能導(dǎo)致數(shù)據(jù)庫(kù)的丟失,因此MySQL管理員應(yīng)該定期地備份數(shù)據(jù)庫(kù),使得在意外情況發(fā)生時(shí),盡可能減少損失。1.使用mysql

42、dump命令備份mysqldump是MySQL提供的一個(gè)非常有用的數(shù)據(jù)庫(kù)備份工具。mysqldump命令執(zhí)行時(shí),可以將數(shù)據(jù)庫(kù)備份成一個(gè)文本文件,該文件中實(shí)際上包含了多個(gè)CREATE和INSERT語(yǔ)句,使用這些語(yǔ)句可以重新創(chuàng)建表和插入數(shù)據(jù)?;菊Z(yǔ)法規(guī)則如下:Dumping definition and data mysql database or tableUsage: mysqldump OPTIONS database tablesOR mysqldump OPTIONS -databases OPTIONS DB1 DB2 DB3.OR mysqldump OPTIONS -all-dat

43、abases OPTIONSa.使用mysqldump備份單個(gè)數(shù)據(jù)庫(kù)中的所有表mysqldump uroot p booksbd -skip-lock-tables > /www/backup/mysql/20131203booksbd.sqlEnter password: *Note:備份booksbd數(shù)據(jù)庫(kù)。mysqldump提供許多選項(xiàng),包括用于調(diào)試和壓縮的,運(yùn)行幫助命令mysqldump help,可以獲得特定版本的完整選項(xiàng)列表。如果運(yùn)行mysqldump沒(méi)有-quick或-opt選項(xiàng),mysqldump在轉(zhuǎn)儲(chǔ)結(jié)果前將整個(gè)結(jié)果集裝入內(nèi)存.如果轉(zhuǎn)儲(chǔ)大數(shù)據(jù)庫(kù)可能會(huì)出現(xiàn)問(wèn)題.該選項(xiàng)默認(rèn)

44、啟用,但可以用-skip-opt禁用.如果使用最新版本的mysqldump程序備份數(shù)據(jù),并用于還原到比較舊版本的MySQL服務(wù)器中,則不要使用opt或-e選項(xiàng)。b.使用mysqldump備份數(shù)據(jù)庫(kù)中的某個(gè)表mysqldump uroot p booksdb books > c:backupbooks20131203.sqlEnter password: *Note:備份booksbd數(shù)據(jù)庫(kù)中的books表。c.使用mysqldump備份多個(gè)數(shù)據(jù)庫(kù)(1)使用mysqldump備份多個(gè)數(shù)據(jù)庫(kù),需要使用-databases參數(shù),語(yǔ)法格式如下:mysqldump uroot p -databas

45、es booksdb test > c:booksdb_test_20131203.sqlEnter password: *(2)使用mysqldump備份系統(tǒng)中所有的數(shù)據(jù)庫(kù),需要使用-all-databases參數(shù),語(yǔ)法格式如下:mysqldump uroot p -all-databases > c:alldb_20131203.sqlEnter password: *Note:使用-databases參數(shù)之后,必須指定至少一個(gè)數(shù)據(jù)庫(kù)的名稱(chēng),多個(gè)數(shù)據(jù)庫(kù)名稱(chēng)之間用空格隔開(kāi);使用使用-all-databases參數(shù)時(shí),不需要指定數(shù)據(jù)庫(kù)名稱(chēng)。2.直接復(fù)制整個(gè)數(shù)據(jù)庫(kù)目錄因?yàn)镸ySQL表

46、保存為文件方式,所以可以直接復(fù)制MySQL數(shù)據(jù)庫(kù)的存儲(chǔ)目錄及文件進(jìn)行備份.這是一種簡(jiǎn)單、快速、有效的備份方式,要想保持備份的一致性,備份前需要對(duì)相關(guān)表執(zhí)行LOCK TABLES操作(鎖表操作),然后對(duì)表執(zhí)行FLUSH TABLES(刷新表操作).這樣當(dāng)復(fù)制數(shù)據(jù)庫(kù)目錄中的文件時(shí),允許其他客戶繼續(xù)查詢表.需要FLUSH TABLES語(yǔ)句來(lái)確保開(kāi)始備份前將所有激活的索引頁(yè)寫(xiě)入硬盤(pán).當(dāng)然也可以停止MySQL服務(wù)再進(jìn)行備份操作。Note:這種方法雖然簡(jiǎn)單,但并不是最好的方法,因?yàn)檫@種方法對(duì)InnoDB存儲(chǔ)引擎的表不適用。3.使用mysqlhotcopy工具快速備份mysqlhotcopy是一個(gè)Perl腳

47、本,它在Unix系統(tǒng)中運(yùn)行.它使用LOCK TABLES、FLUSH TABLES和cp或scp來(lái)快速備份數(shù)據(jù)庫(kù),它是備份數(shù)據(jù)庫(kù)或單個(gè)表的最快的途徑,但它只能運(yùn)行在數(shù)據(jù)庫(kù)目錄所在的機(jī)器上,并且只能備份MyISAM類(lèi)型的表。語(yǔ)法格式如下:mysqlhotcopy u user -p db_name1,db_name2, /path二、數(shù)據(jù)還原當(dāng)數(shù)據(jù)丟失或意外破壞時(shí),可能通過(guò)還原已經(jīng)備份的數(shù)據(jù)盡量減少數(shù)據(jù)丟失和破壞造成的損失。1.使用mysql命令還原a.對(duì)于已備份的包含CREATE、INSERT語(yǔ)句的文件文件,可以使用mysql命令導(dǎo)入到數(shù)據(jù)庫(kù)中,語(yǔ)法如下:mysql u user p dbna

48、me < filename.sqlEnter password: *Note:在執(zhí)行語(yǔ)句前,必須先在MySQL服務(wù)器中創(chuàng)建dbname數(shù)據(jù)庫(kù),如果不存在恢復(fù)過(guò)程將會(huì)出錯(cuò)。b.如果已經(jīng)登錄MySQL服務(wù)器,還可以使用source命令導(dǎo)入sql文件.source語(yǔ)句語(yǔ)法如下:C:UsersAdministrator>mysql -uroot -pEnter password:*mysql> use booksdbDatabase changedmysql> source d:/mysql/20131203_booksbd.sqlNote:執(zhí)行source命令前,必須使用us

49、e語(yǔ)句選擇數(shù)據(jù)庫(kù),否則恢復(fù)過(guò)程中會(huì)出現(xiàn)錯(cuò)誤.數(shù)據(jù)庫(kù)遷移數(shù)據(jù)庫(kù)遷移就是把數(shù)據(jù)從一個(gè)系統(tǒng)移動(dòng)到另一個(gè)系統(tǒng)上,數(shù)據(jù)遷移有以下原因:需要安裝新的數(shù)據(jù)庫(kù)服務(wù)器、MySQL版本更新、數(shù)據(jù)庫(kù)管理系統(tǒng)的變更(如從SQL Server遷移到MySQL)。1.相同版本的MySQL數(shù)據(jù)庫(kù)之間的遷移相同版本的MySQL數(shù)據(jù)庫(kù)之間的遷移就是在主版本號(hào)相同的MySQL數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)庫(kù)移動(dòng),遷移過(guò)程其實(shí)就是在源數(shù)據(jù)庫(kù)備份和目標(biāo)數(shù)據(jù)庫(kù)還原過(guò)程的組合。最常用最有效的方式是使用mysqldump命令導(dǎo)出數(shù)據(jù),然后在目標(biāo)數(shù)據(jù)庫(kù)服務(wù)器使用mysql命令導(dǎo)入。例如:將主機(jī)上的MySQL數(shù)據(jù)庫(kù)全部遷移到主機(jī)上。在主機(jī)上執(zhí)行的命令如下

50、:mysqldump h uroot ppassword dbname | mysql h www.def.co uroot -ppasswordNote:mysqldump導(dǎo)入的數(shù)據(jù)直接通過(guò)管道符"|"傳給mysql命令導(dǎo)入到主機(jī)數(shù)據(jù)庫(kù)中,dbname為需要遷移的數(shù)據(jù)庫(kù)名稱(chēng),如果要遷移全部的數(shù)據(jù)庫(kù),可使用參數(shù)all-databases。2.不同版本的MySQL數(shù)據(jù)庫(kù)之間的遷移因?yàn)閿?shù)據(jù)庫(kù)升級(jí)等原因,需要將較舊版本MySQL數(shù)據(jù)庫(kù)中的數(shù)據(jù)遷移到較新版本的數(shù)據(jù)庫(kù)中,MySQL服務(wù)器升級(jí)時(shí)需要先停止服務(wù),然后卸載舊版本并安裝新版本的MySQL,這種更新方法很簡(jiǎn)單.如果想保留舊版本

51、中的用戶訪問(wèn)控制信息,則需要備份MySQL中的mysql數(shù)據(jù)庫(kù),在新版本MySQL安裝完成之后,重新讀入mysql備份文件中的信息。Note:舊版本與新版本的MySQL可能使用不同的默認(rèn)字符集,例如MySQL 4.x中大多使用latin1作為默認(rèn)字符集,而MySQL 5.x的默認(rèn)字符集為utf8.如果數(shù)據(jù)庫(kù)中有中文數(shù)據(jù)的,遷移過(guò)程中需要對(duì)默認(rèn)字符集進(jìn)行修改,不然可能無(wú)法正常顯示結(jié)果。3.不同數(shù)據(jù)庫(kù)之間的遷移不同類(lèi)型的數(shù)據(jù)庫(kù)之間的遷移,是指把MySQL的數(shù)據(jù)庫(kù)轉(zhuǎn)移到其他類(lèi)型的數(shù)據(jù)庫(kù),例如從MySQL遷移到ORACLE,從ORACLE遷移到MySQL,從MySQL遷移到SQL Server等。No

52、te:遷移之前,需要了解不同數(shù)據(jù)庫(kù)的架構(gòu),比較它們的差異。SQL 函數(shù)SQL擁有很多可用于計(jì)數(shù)和計(jì)算的內(nèi)建函數(shù)。一、內(nèi)建SQL函數(shù)的語(yǔ)法是:SELECT function(列) FROM 表二、函數(shù)的類(lèi)型a. Aggregate(合計(jì)函數(shù))Aggregate函數(shù)的操作面向一系列的值,并返回一個(gè)單一的值。函數(shù)描述AVG(column)返回某列的平均值COUNT(column)返回某列的行數(shù)(不包括 NULL 值)COUNT(*)返回被選行數(shù)MAX(column)返回某列的最高值MIN(column)返回某列的最低值SUM(column)返回某列的總和NOTE:如果在SELECT語(yǔ)句的項(xiàng)目列表中的眾多其它表達(dá)式中使用SELECT語(yǔ)句,則這個(gè)SELECT必須使用GROUP BY語(yǔ)句!1.COUNT()函數(shù)COUNT()函數(shù)統(tǒng)計(jì)數(shù)據(jù)表中包含的記錄行的總數(shù),或者根據(jù)查詢結(jié)果返回列中包含的數(shù)據(jù)行數(shù),其使用方法有兩種:l SQL COUNT(column_name)語(yǔ)法COUNT(column_name)函數(shù)返回指定列的值的數(shù)目(NULL不計(jì)入):SELECT COUNT(column_name) FROM table_namel SQL COUNT(*)語(yǔ)法COUNT(*)函數(shù)返回表中的記錄數(shù):SELECT COUNT(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論