Mysql的命令總結

Mysql經常使用命令

啓動

net start mysql

關閉

net stop mysql

鏈接mysql

mysql -uroot -ppssword
mysql -uroot -P3307 -ppssword

修改密碼

mysqladmin -uroot - p123456 password 123

增長用戶

create user 'lisi'@'%' IDENTIFIED By '123456'

用戶受權

grant select,insert on test.user to 'lisi'@'%'

授予李四查詢和插入的權限,生效範圍是test數據庫下的user表。須要注意的是若是不對用戶受權,用戶均可能沒法登錄。

設置用戶密碼

set password for 'lisi'@'%' = password('lisi')

設置lisi的用戶密碼爲lisi

刪除用戶

DROP USER 'lisi'@'%'

新建數據庫

create database db_name

顯示數據庫

show databases

刪除數據庫

drop database db_name

使用數據庫

use db_name

查詢mysql的版本好

select version()

查詢系統時間

select now()

新建表

create table table_name(
    id int primary key auto_increment,
    name varchar(50) not null
);

插入表

insert into table_name values (value1,value2),(value1,value2);

能夠一次性插入多個值,須要注意的是值必須與屬性列一一對應

查詢表

select *  from table_name

刪除數據

delete from table_name where 列名=value;

修改數據

update table_name set  列名1=value1 where 列名2=value2;

增長字段

alter table table_name add 屬性列 類型 約束

刪除字段

alter table table_name drop column_name

新建主鍵索引

alter table table_name add primary key(id)

新建普通索引

alter table table_name add index 索引的名字 (屬性列)

索引的名字通常是  表名_屬性名

新建惟一索引

alter table table_name add unique 索引的名字 (屬性列)

刪除索引

alter table table_name drop index 索引名

導出數據庫

mysqldump -uroot -ppassword 數據庫的名字 > 導出路徑\表名.sql

導出表

mysqldump -uroot -ppassword 數據庫的名字 表名 > 導出路徑\表名.sql

數據庫還原

mysql -uroot -ppassword 庫名 < sql所在的路徑

查看引擎

show engines;
show variables like '%storage_engine%';

必知必會

1. show相關
    1. show databases : 返回可用的數據庫列表
    2. show tables : 返回當前選擇的數據內可用表的列表
    3. show columns from tab_name : 返回表的全部字段
    4. describe tab_name : 同上
    5. show status : 顯示普遍的服務器狀態信息
    6. show create database/table : 顯示建立特定數據庫或表的MYSQL語句
    7. show errors/warnings : 顯示服務器錯誤或警告信息
    8. help show : 顯示容許的show語句
2. 查詢相關
    1. SELECT DISTINCT col_name FROM tab_name : 查詢不一樣的值,也就是去重
    2. SELECT col_name FROM tab_name LIMIT start_index, rows : 限制查詢結果(通常用於分頁查詢),後面的參數表明開始索引和查詢的行數
    3. SELECT col_names FROM tab_name ORDER BY col_names : 默認是升序排序,可使用DESC來改變排序規則,也能夠指定多個列來進行排序(可使用非查詢列來進行排序)
    4. SELECT col_names FROM tab_name WHERE 條件 : 過濾查詢
        1. WHERE子句的操做符
            1. = : 等於
            2. <> : 不等於
            3. != : 不等於
            4. < : 小於
            5. <= : 小於等於
            6. > : 大於
            7. >= : 大於等於
            8. BETWEEN 1 AND 2 : 在指定的兩個值之間
    5. NULL的判斷 : 使用 IS NULL進行判斷(注意NULL與0,空字符串,僅僅包含空格是不相同的)
    6. 多個條件同時匹配中間用AND鏈接,匹配任一條件中間用OR鏈接,兩者並存的時候須要考慮次序問題,必定要加上括號,避免產生歧義
    7. SELECT col_names FROM tab_name WHERE col_name IN (1,2) : 表示或1或2均可以,也就是OR的簡單寫法  
    8. NOT的使用,NOT IN找出與條件列表不匹配的行
    9. LIKE,%,_的使用,LIKE表示模糊查詢,%表示匹配任意字符出現任意次數(包括0個字符),_匹配任意的單個字符
        1. 不要過分使用通配符,通配符會消耗很大的內存,花費時間更長.

3. 正則相關
    1. 正則與like的區別
        1. LIKE匹配整個列,若是被匹配的文本在列值中出現,LIKE將不會找到它,相應的行也不會返回
        2. REGEXP在列值內匹配,若是被匹配的文本在列值中出現,REGEXP將會找到它,相應的行被返回
        3. 例子:
            1. SELECT prod_name FROM products WHERE prod_name LIKE '1000';
            2. SELECT prod_name FROM products WHERE prod_name REGEXP '1000'
            3. 上面兩個sql語句查詢結果是不相同,若是數據庫中在prod_name爲1000的行
    2. 點的使用,Mysql中的.是一個特殊字符,表示匹配任意一個字符.
        1. SELECT prod_name FROM products WHERE prod_name REGEXP '.000';
        2. SELECT prod_name FROM products WHERE prod_name LIKE '%000%'; 
        3. 上面兩個sql的查詢結果是相同的.
    3. 正則表達式OR的匹配的多種寫法
        1. SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000';  /*匹配其中之一*/
        2. ELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton';  /*匹配幾個字符之一*/
        3. SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] ton';  /*匹配範圍,匹配1到5之間的任意數字 + ton*/
    4. 匹配特殊字符,也就是匹配.等等
        1. 使用轉義字符,通常正則表達式的轉義字符是 \,可是在Mysql中要求兩個,也就是\\,一個是Mysql解釋,一個是正則表達式解釋
            1. SELECT prod_name FROM products WHERE prod_name REGEXP '\\.';/*匹配特殊字符須要使用轉義字符,好比說:\\.匹配.     \\-匹配-    \\\匹配\  */ 
    5. 字符類(使用過程當中注意的是要使用[]進行包裹,也就是使用兩個中括號才能夠正確匹配,即[[:digit:]]):
    <table>
        <tr>
            <th>類</th>
            <th>說明</th>
        </tr>
        <tr>
            <td>[:alnum:]</td>
            <td>任意子母和數字(同[a-zA-Z0-9])</td>
        </tr>
        <tr>
            <td>[:alpha:]</td>
            <td>任意字符(同[a-zA-Z])</td>
        </tr>
        <tr>
            <td>[:blank:]</td>
            <td>空格和製表符(同[\\t])</td>
        </tr><tr>
            <td>[:cntrl:]</td>
            <td>ASCII控制字符(ASCII0到31和127)</td>
        </tr><tr>
            <td>[:digit:]</td>
            <td>任意數字(同[0-9])</td>
        </tr><tr>
            <td>[:graph:]</td>
            <td>與[:print:]相同,但不包括空格</td>
        </tr><tr>
            <td>[:lower:]</td>
            <td>任意小寫子母(同[a-z])</td>
        </tr><tr>
            <td>[:print:]</td>
            <td>任意可打印字符</td>
        </tr><tr>
            <td>[:punct:]</td>
            <td>既不在[:alnum:]又不在[:cntrl:]中的任意字符</td>
        </tr><tr>
            <td>[:space:]</td>
            <td>包括空格在內的任意空白字符(同[\\f\\n\\r\\t\\v])</td>
        </tr><tr>
            <td>[:upper:]</td>
            <td>任意大寫子母(同[A-Z])</td>
        </tr>
        <tr>
            <td>[:xdigit:]</td>
            <td>任意十六進制數字(同[a-fA-F0-9])</td>
        </tr>
    </table>    
    5. 重複元字符
     <table>
        <tr>
            <th>元字符</th>
            <th>說明</th>
        </tr>
        <tr>
            <td>*</td>
            <td>0個或多個匹配</td>
        </tr>
        <tr>
            <td>+</td>
            <td>一個或多個匹配(等於{1,})</td>
        </tr>
        <tr>
            <td>?</td>
            <td>0個或一個匹配(等於{0,1})</td>
        </tr><tr>
            <td>{n}</td>
            <td>指定數目的匹配</td>
        </tr><tr>
            <td>{n,}</td>
            <td>很多於指定數目的匹配</td>
        </tr><tr>
            <td>{n,m}</td>
            <td>匹配數目的範圍(m不找過255)</td>
        </tr>
    </table>    
    6. 定位符
    <table>
        <tr>
            <th>元字符</th>
            <th>說明</th>
        </tr>
        <tr>
            <td>^</td>
            <td>文本的開始</td>
        </tr>
        <tr>
            <td>$</td>
            <td>文本的結束</td>
        </tr>
        <tr>
            <td>[[:<:]]</td>
            <td>詞的開始</td>
        </tr><tr>
            <td>[[:>:]]</td>
            <td>詞的結尾</td>
        </tr>
    </table>    
    7. 上面三種的舉例:
        1. SELECT prod_name FROM products WHERE prod_name REGEXP '[[:digit:]]{2}';/*數字連續出現兩次*/
        2. SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\\.]';/*以0-9 .開始*/
        3. SELECT prod_name FROM products WHERE prod_name REGEXP '[0-9\\.]$'; /*以0-9 .結束*/
        4. SELECT prod_name FROM products WHERE prod_name REGEXP '[[:<:]]Jet';/*以Jet開始*/
        5. SELECT prod_name FROM products WHERE prod_name REGEXP '0[[:>:]]';/*以0結尾*/

4. 計算字段相關:
    1. 函數的使用
        1. Concat()函數來拼接兩個或多個列(其餘的DBMS使用+或者||來實現拼接)
            1. SELECT CONCAT(vend_name, ' (', vend_country ,') ') FROM vendors; /*各個串之間使用逗號隔開*/
        2. Trim()函數:
            1. RTrim() : 去掉串右邊空格
            2. LTrim() : 去掉串左邊空格
            3. Trim()  : 去電串兩邊空格
    2. 使用別名
        1. AS的使用,別名用在計算字段或者不規則字段等的重命名
    3. 算數計算:
        1. mysql的算數運算符有加減乘除(+-*/)

5. 數據處理函數
    1. 文本處理函數
        1. Trim() : 去掉兩邊空格
        2. Upper() : 將文本轉化爲大寫
        3. Left() : 返回串左邊的字符
        4. Length() : 返回串的長度
        5. Locate() : 找出串的一個子串
        6. Lower() : 將串轉化爲小寫
        7. LTrim() : 去掉串左邊空格
        8. Right() : 返回串右邊字符
        9. RTrim() : 去掉串右邊空格
        10. Soundex() : 返回串的Soundex值,描述其語音表示的字母數字模式的算法
            1. 簡單的來講就是匹配發音類似的內容
        11. SubString() : 返回子串的字符
        12. Upper() : 將串轉化爲大寫
    2. 經常使用日期和時間處理函數(Mysql中的日期格式爲yyyy-mm-dd)
        1. AddDate() : 增長一個日期(天,周等)
        2. AddTime() : 增長一個時間(時,分等)
        3. CurDate() : 返回當前日期
        4. CurTime() : 返回當前時間
        5. Date() : 返回日期時間的日期部分(僅僅想要日期比較,就用Date()函數)
        6. DateDiff() : 計算兩個日期之差
        7. Date_Add() : 高度靈活的日期運算函數
        8. Date_Format() : 返回一個格式化的日期和時間串
        9. Day() : 返回一個日期的天數部分
        10. DayOfWeek() : 對於一個日期,返回對應的星期幾
        11. Hour() : 返回一個時間的小時部分
        12. Minute() : 返回一個時間的分鐘部分
        13. Month() : 返回一個日期的月份部分
        14. Now() : 放回當前日期和時間
        15. Second() : 返回一個時間的秒部分
        16. Time() : 返回一個日期時間的時間部分
        17. Year() : 返回一個日期的年份部分
    3. 數值處理函數
        1. Abs() : 返回一個數的絕對值
        2. Cos() : 返回一個角度的餘弦
        3. Exp() : 返回一個數的指數值
        4. Mod() : 返回除操做的餘數
        5. Pi() : 返回圓周率
        6. Rand() : 返回一個隨機數
        7. Sin() : 返回一個角度的正弦
        8. Sqrt() : 返回一個數的平方根
        9. Tan() : 返回一個角度的正切
    4. 日期例子:
        1. 日期的等值比較 : SELECT cust_id, order_num FROM orders WHERE DATE(order_date) = '2005-09-01';
        2. 日期的區間比較 : SELECT cust_id, order_num FROM orders WHERE DATE(order_date) BETWEEN '2005-09-01' AND '2005-09-30';
        3. 日期的區間比較優化 : SELECT cust_id, order_num FROM orders WHERE YEAR(order_date) = 2005 AND MONTH(order_date) = 9;

6. 彙總數據:
    1. 彙集函數 
        1. AVG() : 返回某列的平均值(忽略值爲NULL的行)
        2. COUNT() : 返回某列的行數
        3. MAX() : 返回某列的最大值(忽略值爲NULL的行)
        4. MIN() : 返回某列的最小值(忽略值爲NULL的行)
        5. SUM() : 返回某列值之和(忽略值爲NULL的行)
    2. 例子 : 
        1. 返回商品的平均價格,排除相同價格:SELECT AVG(DISTINCT proD_price) AS avg_price FROM products WHERE vend_id = 1003;
        2. 返回商品的總數,商品的最大值,商品的最小值,商品的平均值:SELECT COUNT(*),MIN(prod_price) AS min_price,MAX(prod_price) AS max_price,AVG(prod_price) AS avg_price FROM products;

7. 分組數據
    1. group by 和 having
        1. group by子句不能是彙集函數和別名
        2. having是用來過濾分組的
    2. 查詢子句的順序
        1. SELECT * FROM TAB_NAME WHERE GROUP BY .. HAVING .. ORDER BY.. LIMIT
相關文章
相關標籤/搜索