一、連接操作
?格式:mysql-h主機地址?-u用戶名?-p用戶密碼
例:連接到遠程主機上的mysql假設遠程主機的IP為:110.110.110.110用戶
名為root,密碼為abcd123則鍵入以下命令:
mysql-h110.110.110.110-uroot-pabcd123
二、用戶級操作
1、select?user()?查看自己的用戶名
2、Linux命令ps?-el?|?grep?mysqld用來檢測mysql服務器是否在運行。如果結果為:
???4?S??0??1796??1??0??85???0?-??1513?wait???????00:00:00?mysqld_safe
???4?S??27?1856??1796??0??78???0?-?34055?-???????????????00:00:00?mysqld
???就說明服務器已經(jīng)運行起來了。
3、修改密碼
update?user?set?password="新密碼"?where?user="用戶名"。
4、新加用戶
Grant?select?on?數(shù)據(jù)庫.*to?用戶名@登錄主機?identified?by?“密碼”。
三、數(shù)據(jù)庫操作
1、創(chuàng)建數(shù)據(jù)庫?create?database?<數(shù)據(jù)庫名>
2、顯示數(shù)據(jù)庫?show?database;
3、刪除數(shù)據(jù)庫?drop?database?<數(shù)據(jù)庫名>
4、連接數(shù)據(jù)庫?use?<數(shù)據(jù)庫名>
5、當前選中的數(shù)據(jù)庫?select?database();
6、查看數(shù)據(jù)庫編碼SHOW?VARIABLES?LIKE?'character%';
四、數(shù)據(jù)表操作
1、創(chuàng)建數(shù)據(jù)表?create?table?<表名>(?<字段名1><類型1>,<字段名2><類型2>);
2、查看表結構?describe?表名
3、獲取表結構?desc表名,或者show?columns?from?表名;
4、刪除數(shù)據(jù)表?drop?table<表名>
5、表插入數(shù)據(jù)?insert?into?表名?(字段1,字段2......)?values?("值1",“值2”...),....("值1","值2");
6、查詢表中數(shù)據(jù)?select?<字段1,字段2....>from<表名>where<表達式>?,查看前2行數(shù)據(jù)?select*from表名?limit(0,2)
7、刪除表中數(shù)據(jù)?delete?from?表名?where?表達式
8、修改表中數(shù)據(jù)?update?表名?set?字段=新值,..where?條件
9、增加字段?alter?table?表名?add?字段?類型?其他
???加索引???alter?table?表名?add?index?索引名?(字段1,字段2);
???加主鍵???alter?table?表名?add?primary?key(字段名);
???刪除某個索引?alter?table?表名?drop?index?索引名;
???修改原字段名稱及類型?alter?table?表名?change舊字段名?新字段名?新類型;
???刪除字段?alter?table?表名?drop?字段名
10、修改表名??rename?table?舊表名?to?新表名
五、備份數(shù)據(jù)庫
?
1、導出整個數(shù)據(jù)庫
???導出文件默認是存在mysql\bin目錄下
???mysqldump?-u?用戶名?-p?數(shù)據(jù)庫名?>?導出的文件名
???mysqldump?-u?user_name?-p123456?database_name?>?outfile_name.sql
2、導出一個表
???mysqldump?-u?用戶名?-p?數(shù)據(jù)庫名?表名>?導出的文件名
???mysqldump?-u?user_name?-p?database_name?table_name?>?outfile_name.sql
3、導出一個數(shù)據(jù)庫結構
???mysqldump?-u?user_name?-p?-d?–add-drop-table?database_name?>?outfile_name.sql
???-d?沒有數(shù)據(jù)?–add-drop-table?在每個create語句之前增加一個drop?table
4、帶語言參數(shù)導出
???mysqldump?-uroot?-p?–default-character-set=latin1?–set-charset=gbk?–skip-opt??????database_name?>?outfile_name.sql
5、導入文件?source?文件路徑??mysql>source?d:\mydb.sql
注:導出文件時在操作系統(tǒng)控制臺的ySQL\MySQL?Server?5.5\bin目錄下執(zhí)行?,導入文件是在mysql控制臺執(zhí)行
?
六、query?cache
Query?Cache?緩存了我們客戶端提交給?MySQL?的?SELECT?語句以及該語句的結果集。大概來講,就是將?SELECT?語句和語句的結果做了一個?HASH?映射關系然后保存在一定的內存區(qū)域中。
1、query?cache?的五個變量(使用show?variable?like?'%query_cache%'語句查看)
- query_cache_limit:允許?Cache?的單條?Query?結果集的最大容量,默認是1MB,超過此參數(shù)設置的?Query?結果集將不會被?Cache
- query_cache_min_res_unit:設置?Query?Cache?中每次分配內存的最小空間大小,也就是每個?Query?的?Cache?最小占用的內存空間大小
- query_cache_size:設置?Query?Cache?所使用的內存大小,默認值為0,大小必須是1024的整數(shù)倍,如果不是整數(shù)倍,MySQL?會自動調整降低最小量以達到1024的倍數(shù)
- query_cache_type:控制?Query?Cache?功能的開關,可以設置為0(OFF),1(ON)和2(DEMAND)三種,意義分別如下:
o?0(OFF):關閉?Query?Cache?功能,任何情況下都不會使用?Query?Cache
o?1(ON):開啟?Query?Cache?功能,但是當?SELECT?語句中使用的?SQL_NO_CACHE?提示后,將不使用Query?Cache
o?2(DEMAND):開啟?Query?Cache?功能,但是只有當?SELECT?語句中使用了?SQL_CACHE?提示后,才使用?Query?Cache
- query_cache_wlock_invalidate:控制當有寫鎖定發(fā)生在表上的時刻是否先失效該表相關的?Query?Cache,如果設置為?1(TRUE),則在寫鎖定的同時將失效該表相關的所有?Query?Cache,如果設置為0(FALSE)則在鎖定時刻仍然允許讀取該表相關的?Query?Cache。
?
2、query?cache處理子查詢
?????query?cache?是以客戶端請求提交的?Query?為對象來處理的,只要客戶端請求的是一個?Query,無論這個?Query?是一個簡單的單表查詢還是多表?Join,亦或者是帶有子查詢的復雜?SQL,都被當作成一個?Query,不會被分拆成多個?Query?來進行?Cache。所以,存在子查詢的復雜?Query?也只會產(chǎn)生一個Cache對象,子查詢不會產(chǎn)生單獨的Cache內容。UNION[ALL]?類型的語句也同樣如此。
?
3、query?cache?的效率
Query?Cache?的查找,是在?MySQL?接受到客戶端請求后在對?Query?進行權限驗證之后,SQL?解析之前。當?MySQL?接受到客戶端的SQL后,僅僅只需要對其進行相應的權限驗證后就會通過?Query?Cache?來查找結果,甚至都不需要經(jīng)過?Optimizer?(查詢優(yōu)化器)模塊進行執(zhí)行計劃的分析優(yōu)化,更不許要發(fā)生任何存儲引擎的交互,減少了大量的磁盤?IO?和?CPU?運算,所以效率非常高。
?
4、query?cache的失效
為了保證?Query?Cache?中的內容與是實際數(shù)據(jù)絕對一致,當表中的數(shù)據(jù)有任何變化,包括新增,修改,刪除等,都會使所有引用到該表的?SQL?的?Query?Cache?失效。
?
5、query?cache導致系統(tǒng)整體性能下降
當開啟了?Query?Cache?之后,尤其是當我們的?query_cache_type?參數(shù)設置為?1?以后,MySQL?會對每個?SELECT?語句都進行?Query?Cache?查找,查找操作雖然比較簡單,但仍然也是要消耗一些?CPU?運算資源的。而由于?Query?Cache?的失效機制的特性,可能由于表上的數(shù)據(jù)變化比較頻繁,大量的?Query?Cache?頻繁的被失效,所以?Query?Cache?的命中率就可能比較低下。所以有些場景下,Query?Cache?不僅不能提高效率,反而可能造成負面影響。
?
6、query?cache的幾種狀態(tài)參數(shù)(使用show?status?like'%Qcache%'語句查看)
- Qcache_free_blocks:目前還處于空閑狀態(tài)的?Query?Cache?中內存?Block?數(shù)目
- Qcache_free_memory:目前還處于空閑狀態(tài)的?Query?Cache?內存總量
- Qcache_hits:Query?Cache?命中次數(shù)
- Qcache_inserts:向?Query?Cache?中插入新的?Query?Cache?的次數(shù),也就是沒有命中的次數(shù)
- Qcache_lowmem_prunes:當?Query?Cache?內存容量不夠,需要從中刪除老的?Query?Cache?以給新的?Cache?對象使用的次數(shù)
- Qcache_not_cached:沒有被?Cache?的?SQL?數(shù),包括無法被?Cache?的?SQL?以及由于?query_cache_type?設置的不會被?Cache?的?SQL
- Qcache_queries_in_cache:目前在?Query?Cache?中的?SQL?數(shù)量
- Qcache_total_blocks:Query?Cache?中總的?Block?數(shù)量
七、存儲引擎
1、在線交易范疇內的表都統(tǒng)一使用innodb存儲引擎,而不使用myisam的原因
n?myisam不支持事務;如果存在myisam與innodb混用的話,事務數(shù)據(jù)的一致性存在風險。
n?myisam讀寫阻塞,不適用于高并發(fā)環(huán)境;innodb支持行級鎖。
n?myisam不支持在線備份,配置復制時可能需要停機或者長時間鎖表。
n?myisam不夠可靠,容易損壞丟失數(shù)據(jù)。
n?如果兩種引擎混用,會給資源分配帶來問題。因為有很多參數(shù)和設置需要停庫才能修改,為了減少停庫次數(shù),我們目前都是采用預先最大化分配足額內存和磁盤空間的方式去做的。而myisam和innodb在內存和空間使用上都不一樣,如果兩者混用,那分配的時候就很難兩方都照顧到。如果兩者都按比例分配,很可能存在資源不能充分利用的情況;且隨著業(yè)務的變化,需要調整的話,也會存在停機問題。
n?運維需要收集很多的運行狀態(tài)數(shù)據(jù),innodb有非常多的狀態(tài)數(shù)據(jù)可收集;而對于myisam引擎,能收集到的數(shù)據(jù)非常有限,不利于我們做監(jiān)控和容量規(guī)劃。
2、查看存儲引擎
n?查看支持的存儲引擎
show?engines
n?查看mysql默認的存儲引擎
show?variables?like?"%storage_engine%"
n?查看某個表用了什么引擎(在顯示結果參數(shù)engine后面的就表示當前用的存儲引擎)
????show?create?table?表名
八、mysql架構圖
?架構示意簡圖
?
?
?
模塊間的關系圖
?
九、Mysql中的數(shù)據(jù)類型
1、數(shù)字日期類型
常用的時間存儲格式主要有 datetime 、 date 、 timestamp 。從存儲空間來看 timestamp??4 個字節(jié),而其他, date?3 個字節(jié), datetime?8 個字節(jié),而 timestamp 只能存儲 1970 年之后的時間。
2、字符類型
char(M) 是靜態(tài)長度類型,存放長度以字符數(shù)來計算,所以最終存儲長度是基于字符集的, latin1 最大存儲長度為 255 字節(jié), gbk 為 510 字節(jié)。 mysql5.0.3 以前,如果定義的 M 值超過 255 , mysql 會自動將 char 類型轉換為可以存入對應數(shù)據(jù)量的 text 類型,而 mysql5.0.3 以后,所以超過 255 的定義都會直接拒絕,不再自動轉換。
varchar(M) 屬于動態(tài)存儲長度類型,僅存儲占實際存儲數(shù)據(jù)的長度。在 mysql5.0.3 以前 varchar 最大只能存放 255 個字符,占用存儲空間的實際大小與字符集有關。從 5.0.3 開始, varchar 的最大存儲現(xiàn)在已經(jīng)改為字節(jié)數(shù)。而且不再有單個字段的限制,而是除 text 和 blog 類型字段外單條記錄最大不超過 65536bytes 。不過 M 仍然表示字符數(shù),當實際數(shù)據(jù)在 255 字節(jié)之內時,會使用 1 個字節(jié)來存放實際長度,而大于 255 字節(jié)時,則需要使用 2 字節(jié)來存放。
?
?
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
