mysql基本操做

1、鏈接操做

 格式:mysql-h主機地址 -u用戶名 -p用戶密碼mysql

例:鏈接到遠程主機上的mysql假設遠程主機的IP爲:110.110.110.110用戶sql

名爲root,密碼爲abcd123則鍵入如下命令:數據庫

mysql-h110.110.110.110-uroot-pabcd123緩存

2、用戶級操做

一、select user() 查看本身的用戶名服務器

二、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運維

   就說明服務器已經運行起來了。ide

三、修改密碼高併發

update user set password="新密碼" where user="用戶名"。

四、新加用戶

Grant select on 數據庫.*to 用戶名@登陸主機 identified by 「密碼」。

3、數據庫操做

一、建立數據庫 create database <數據庫名>

二、顯示數據庫 show database;

三、刪除數據庫 drop database <數據庫名>

四、鏈接數據庫 use <數據庫名>

五、當前選中的數據庫 select database();

六、查看數據庫編碼SHOW VARIABLES LIKE 'character%';

4、數據表操做

一、建立數據表 create table <表名>( <字段名1><類型1>,<字段名2><類型2>);

二、查看錶結構 describe 表名

三、獲取表結構 desc表名,或者show columns from 表名;

四、刪除數據表 drop table<表名>

五、表插入數據 insert into 表名 (字段1,字段2......) values ("值1",「值2」...),....("值1","值2");

六、查詢表中數據 select <字段1,字段2....>from<表名>where<表達式> ,查看前2行數據 select*from表名 limit(0,2)

七、刪除表中數據 delete from 表名 where 表達式

八、修改表中數據 update 表名 set 字段=新值,..where 條件

九、增長字段 alter table 表名 add 字段 類型 其餘

   加索引   alter table 表名 add index 索引名 (字段1,字段2);

   加主鍵   alter table 表名 add primary key(字段名);

   刪除某個索引 alter table 表名 drop index 索引名;

   修改原字段名稱及類型 alter table 表名 change舊字段名 新字段名 新類型;

   刪除字段 alter table 表名 drop 字段名

十、修改表名  rename table 舊錶名 to 新表名

5、備份數據庫

 

一、導出整個數據庫

   導出文件默認是存在mysql\bin目錄下
   mysqldump -u 用戶名 -p 數據庫名 > 導出的文件名
   mysqldump -u user_name -p123456 database_name > outfile_name.sql

二、導出一個表

   mysqldump -u 用戶名 -p 數據庫名 表名> 導出的文件名
   mysqldump -u user_name -p database_name table_name > outfile_name.sql

三、導出一個數據庫結構

   mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql
   -d 沒有數據 –add-drop-table 在每一個create語句以前增長一個drop table

四、帶語言參數導出

   mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt      database_name > outfile_name.sql

五、導入文件 source 文件路徑  mysql>source d:\mydb.sql

注:導出文件時在操做系統控制檯的ySQL\MySQL Server 5.5\bin目錄下執行 ,導入文件是在mysql控制檯執行

 

6、query cache

Query Cache 緩存了咱們客戶端提交給 MySQL 的 SELECT 語句以及該語句的結果集。大概來說,就是將 SELECT 語句和語句的結果作了一個 HASH 映射關係而後保存在必定的內存區域中。

一、query cache 的五個變量(使用show variable like '%query_cache%'語句查看)

  • query_cache_limit:容許 Cache 的單條 Query 結果集的最大容量,默認是1MB,超過此參數設置的 Query 結果集將不會被 Cache
  • query_cache_min_res_unit:設置 Query Cache 中每次分配內存的最小空間大小,也就是每一個 Query 的 Cache 最小佔用的內存空間大小
  • query_cache_size:設置 Query Cache 所使用的內存大小,默認值爲0,大小必須是1024的整數倍,若是不是整數倍,MySQL 會自動調整下降最小量以達到1024的倍數
  • 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:控制當有寫鎖定發生在表上的時刻是否先失效該表相關的 Query Cache,若是設置爲 1(TRUE),則在寫鎖定的同時將失效該表相關的全部 Query Cache,若是設置爲0(FALSE)則在鎖定時刻仍然容許讀取該表相關的 Query Cache。

 

二、query cache處理子查詢

     query cache 是以客戶端請求提交的 Query 爲對象來處理的,只要客戶端請求的是一個 Query,不管這個 Query 是一個簡單的單表查詢仍是多表 Join,亦或者是帶有子查詢的複雜 SQL,都被看成成一個 Query,不會被分拆成多個 Query 來進行 Cache。因此,存在子查詢的複雜 Query 也只會產生一個Cache對象,子查詢不會產生單獨的Cache內容。UNION[ALL] 類型的語句也一樣如此。

 

三、query cache 的效率

Query Cache 的查找,是在 MySQL 接受到客戶端請求後在對 Query 進行權限驗證以後,SQL 解析以前。當 MySQL 接受到客戶端的SQL後,僅僅只須要對其進行相應的權限驗證後就會經過 Query Cache 來查找結果,甚至都不須要通過 Optimizer (查詢優化器)模塊進行執行計劃的分析優化,更不準要發生任何存儲引擎的交互,減小了大量的磁盤 IO 和 CPU 運算,因此效率很是高。

 

四、query cache的失效

爲了保證 Query Cache 中的內容與是實際數據絕對一致,當表中的數據有任何變化,包括新增,修改,刪除等,都會使全部引用到該表的 SQL 的 Query Cache 失效。

 

五、query cache致使系統總體性能降低

當開啓了 Query Cache 以後,尤爲是當咱們的 query_cache_type 參數設置爲 1 之後,MySQL 會對每一個 SELECT 語句都進行 Query Cache 查找,查找操做雖然比較簡單,但仍然也是要消耗一些 CPU 運算資源的。而因爲 Query Cache 的失效機制的特性,可能因爲表上的數據變化比較頻繁,大量的 Query Cache 頻繁的被失效,因此 Query Cache 的命中率就可能比較低下。因此有些場景下,Query Cache 不只不能提升效率,反而可能形成負面影響。

 

六、query cache的幾種狀態參數(使用show status like'%Qcache%'語句查看)

  • Qcache_free_blocks:目前還處於空閒狀態的 Query Cache 中內存 Block 數目
  • Qcache_free_memory:目前還處於空閒狀態的 Query Cache 內存總量
  • Qcache_hits:Query Cache 命中次數
  • Qcache_inserts:向 Query Cache 中插入新的 Query Cache 的次數,也就是沒有命中的次數
  • Qcache_lowmem_prunes:當 Query Cache 內存容量不夠,須要從中刪除老的 Query Cache 以給新的 Cache 對象使用的次數
  • Qcache_not_cached:沒有被 Cache 的 SQL 數,包括沒法被 Cache 的 SQL 以及因爲 query_cache_type 設置的不會被 Cache 的 SQL
  • Qcache_queries_in_cache:目前在 Query Cache 中的 SQL 數量
  • Qcache_total_blocks:Query Cache 中總的 Block 數量

7、存儲引擎

一、在線交易範疇內的表都統一使用innodb存儲引擎,而不使用myisam的緣由

n myisam不支持事務;若是存在myisam與innodb混用的話,事務數據的一致性存在風險。

n myisam讀寫阻塞,不適用於高併發環境;innodb支持行級鎖。

n myisam不支持在線備份,配置複製時可能須要停機或者長時間鎖表。

n myisam不夠可靠,容易損壞丟失數據。

n 若是兩種引擎混用,會給資源分配帶來問題。由於有不少參數和設置須要停庫才能修改,爲了減小停庫次數,咱們目前都是採用預先最大化分配足額內存和磁盤空間的方式去作的。而myisam和innodb在內存和空間使用上都不同,若是二者混用,那分配的時候就很難兩方都照顧到。若是二者都按比例分配,極可能存在資源不能充分利用的狀況;且隨着業務的變化,須要調整的話,也會存在停機問題。

n 運維須要收集不少的運行狀態數據,innodb有很是多的狀態數據可收集;而對於myisam引擎,能收集到的數據很是有限,不利於咱們作監控和容量規劃。

二、查看存儲引擎

n 查看支持的存儲引擎

show engines

n 查看mysql默認的存儲引擎

show variables like "%storage_engine%"

n 查看某個表用了什麼引擎(在顯示結果參數engine後面的就表示當前用的存儲引擎)

    show create table 表名

8、mysql架構圖

 架構示意簡圖

 

 

 

模塊間的關係圖

 

9、Mysql中的數據類型

一、數字日期類型

經常使用的時間存儲格式主要有datetimedatetimestamp。從存儲空間來看timestamp  4個字節,而其餘,date 3個字節,datetime 8個字節,而timestamp只能存儲1970年以後的時間。

二、字符類型

char(M)是靜態長度類型,存放長度以字符數來計算,因此最終存儲長度是基於字符集的,latin1最大存儲長度爲255字節,gbk510字節。mysql5.0.3之前,若是定義的M值超過255mysql會自動將char類型轉換爲能夠存入對應數據量的text類型,而mysql5.0.3之後,因此超過255的定義都會直接拒絕,再也不自動轉換。

varchar(M)屬於動態存儲長度類型,僅存儲佔實際存儲數據的長度。在mysql5.0.3之前varchar最大隻能存放255個字符,佔用存儲空間的實際大小與字符集有關。從5.0.3開始,varchar的最大存儲如今已經改成字節數。並且再也不有單個字段的限制,而是除textblog類型字段外單條記錄最大不超過65536bytes。不過M仍然表示字符數,當實際數據在255字節以內時,會使用1個字節來存放實際長度,而大於255字節時,則須要使用2字節來存放。

相關文章
相關標籤/搜索