Mysql常用命令 啟動 net start mysql 關閉 net stop mysql 連接mysql mysql uroot ppssword mysql uroot P3307 ppssword 修改密碼 mysqladmin uroot p123456 password 123 增加用戶 ...
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