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