檢索數(shù)據(jù)
搜索并去重【DISTINCT】:
SELECT DISTINCT authlevel
FROM dop_app.t_app_user;
限制結(jié)果【LIMIT】:
LIMIT指定返回的行數(shù):
SELECT * FROM dop_app.t_app_user LIMIT 5; (展示第1行到第5行的數(shù)據(jù))
OFFSET指定從哪兒開始:
SELECT * FROM dop_app.t_app_user LIMIT 5 OFFSET 8;(展示第9行到第13行的數(shù)據(jù))
- 注意:第0行。 第一個(gè)被檢索的行是第0行,而不是第1行。因此,LIMIT 1 OFFSET 1會(huì)檢索第2行,而不是第1行。
- MySQL、MariaDB和SQLite支持簡化版的LIMIT 4 OFFSET 3語句,即LIMIT 8,5。逗號(hào)之前的值對(duì)應(yīng)OFFSET,逗號(hào)之后的值對(duì)應(yīng)LIMIT。
使用注釋:
行內(nèi)注釋:注釋使用--(兩個(gè)連字符)嵌在行內(nèi)。
-- 之后的文本就是注釋:select * from app_user; --這是一條注釋
多行注釋:/* */ :
/* select app_address
from app_user;*/
排序檢索數(shù)據(jù)
排序檢索【ORDER BY】:
SELECT *
FROM Products
ORDER BY prod_id;
按多個(gè)列排序:
SELECT *
FROM Products
ORDER BY prod_price,prod_name;
(僅在多個(gè)行具有相同的prod_price值時(shí)才對(duì)產(chǎn)品按prod_name進(jìn)行排序。如果prod_price列中所有的值都是唯一的,則不會(huì)按prod_name排序。)
指定排序方向【DESC:降序】【ASC:升序】:
SELECT *
FROM Products
ORDER BY prod_price DESC;
過濾數(shù)據(jù)
使用WHERE子句【W(wǎng)HERE】:
SELECT prod_name,prod_price
FROM Products
WHERE prod_price = 3.5;
WHERE子句操作符:
= 等于
<> 不等于
< 小于
>大于
!= 不等于
!< 不小于
!> 不大于
>=大于等于
BETWEEN 在指定的兩個(gè)值之間 (SELECT prod_name,prod_price FROM Products WHERE prod_price BETWEEN 5 AND 10;)
IS NULL Null值(SELECT prod_name,prod_price FROM Products WHERE prod_price IS NULL;)
范圍值檢查【BETWEEN】:
SELECT *
FROM products
WHERE prod_price BETWEEN 5 AND 10;
高級(jí)數(shù)據(jù)過濾
組合WHERE子句:AND操作符,OR操作符
求值順序:SQL(像多數(shù)語言一樣)在處理OR操作符前,優(yōu)先處理AND操作符。


IN操作符
IN操作符用來指定條件范圍,范圍中的每個(gè)條件都可以進(jìn)行匹配。IN取一組由逗號(hào)分隔、括在圓括號(hào)中的合法值;
SELECT prod_name,prod_price
FROM Products
WHERE vend_id IN (1,5,6,22);
NOT操作符:
WHERE子句中的NOT操作符有且只有一個(gè)功能,那就是否定其后所跟的任何條件;也可以使用<>操作符來完成。
SELECT prod_name
FROM Products
WHERE NOT vend_id =‘DLL01’
ORDER BY prod_name;
用通配符進(jìn)行過濾
百分號(hào)(%)通配符


下劃線(_)通配符

盡管SQL的通配符很有用。但是通配符搜索一般比前面討論的其他搜索要耗費(fèi)更長的處理時(shí)間。
所以注意:
1.盡量不要過度使用通配符。如果其他操作符能達(dá)到相同的目的,應(yīng)該使用其他操作符。
2.在確實(shí)需要使用通配符時(shí),也盡量不要把它們用在搜索模式的開始處。把通配符置于開始處,搜索起來是最慢的。
聚集函數(shù)
聚集函數(shù):對(duì)某些行運(yùn)行的函數(shù),計(jì)算并返回一個(gè)值。
AVG()函數(shù)
通過對(duì)表中行數(shù)計(jì)數(shù),并計(jì)算列值之和的平均值。
SELECT AVG(prod_price) AS avg_price
FROM Products;
COUNT()函數(shù)
兩種用法:
- 使用COUNT(*)函數(shù)對(duì)表中的數(shù)目進(jìn)行計(jì)數(shù),不管表中包含的是空值null還是非空值。
2.使用COUNT(column)對(duì)特定列中具有的值進(jìn)行計(jì)數(shù),忽略NULL值。
SELECT COUNT(*) AS num_cust
FROM Customers;
SELECT COUNT(cust_email) AS num_cust
FROM Customers;
MAX()函數(shù)
MAX()函數(shù)返回指定列中的最大值。
SELECT MAX(prod_price) AS max_price
FROM Products;
MIN()函數(shù)
MIN() 函數(shù)返回指定列中的最小值。
SELECT MIN(prod_price) AS min_pirce
FROM Products;
SUM()函數(shù)
返回指定列值的總和。
SELECT SUM(quantity) AS items_ordered
FROM OrderItems
WHERE order_num =20050;
數(shù)據(jù)分組
創(chuàng)建分組
GROUP BY
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
GROUP BY vend_id;
輸出
vend_id num_prods
------- --------
BRS01 3
DLL01 4
FNG01 1
GROUP BY指示DBMS按照vend_id排序和分組,不必先對(duì)每個(gè)組的count()進(jìn)行計(jì)算,系統(tǒng)會(huì)自動(dòng)完成。
GROUP BY必須出現(xiàn)在WHERE子句之后,ORDER BY子句之前。
過濾分組
HAVING
通過過濾函數(shù)返回值,實(shí)現(xiàn)對(duì)分組的過濾
SELECT vend_id,COUNT(*) AS num_prods
FROM Products
WHERE prod_price >= 4
GROUP BY vend_id
HAVING COUNT(*) >=2;
分組和排序
ORDER BY和GROUP BY
ORDER BY
對(duì)輸出進(jìn)行排序
ORDER BY
對(duì)行進(jìn)行分組,但暑促可能不是分組的順序
SELECT order_num, COUNT(*) AS items
FORM OrderItems
GROUP BY order_num
HAVING COUNT(*) >=3
ORDER BY items, order_num;
SELECT 子句的執(zhí)行順序
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
使用子查詢
SELECT cast_id
FROM Orders
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01');
注意?? 作為子查詢的Select 語句只能查詢單個(gè)列。企圖檢索多個(gè)列將返回錯(cuò)誤。
表聯(lián)結(jié)
為什么使用聯(lián)結(jié)
將數(shù)據(jù)分解為多個(gè)表能更有效地存儲(chǔ),更方便地處理,并且可伸縮性更好。
創(chuàng)建聯(lián)結(jié)
SELECT vend_name,prod_name,prod_price
FROM Vendors,Products
WHERE Vendors.id =Products.id;
內(nèi)聯(lián)結(jié)
基于兩個(gè)表之間的相等的聯(lián)結(jié),這種聯(lián)結(jié)也稱為內(nèi)聯(lián)結(jié)(inner join)。
SELECT vend_name,prod_name,prod_price
FROM Vendors INNER JOIN Products
ON Vendors.id =Products.id;
多表聯(lián)結(jié)
SELECT vend_name,prod_name,prod_price,quantity
FROM Vendors,Products,OrderItems
WHERE Vendors.id = Products.id
AND OrderItems.id = Products.id
AND orderNum = '2000007'
注意:性能考慮DBMS在運(yùn)行時(shí)關(guān)聯(lián)指定的每個(gè)表,以處理聯(lián)結(jié)。這種處理可能非常耗費(fèi)資源,因此應(yīng)該注意,不要聯(lián)結(jié)不必要的表。聯(lián)結(jié)的表越多,性能下降越厲害。
插入數(shù)據(jù)
INSERT INTO Customers(cust_id,cust_name,cust_address,cust_city,cust_state)
VALUES('10000006','Tony Land','12332 Andy Street','New York','NY');
插入檢索出的數(shù)據(jù)
INSERT INTO Customers(cust_id,cust_name,cust_address,cust_city,cust_state)
SELECT cust_id,cust_name,cust_address,cust_city,cust_state
FROM CustNew;
更新和刪除數(shù)據(jù)
更新數(shù)據(jù)
基本的UPDATE語句由三部分組成:
要更新的表
列名和它的新直
過濾條件
UPDATE Customers
SET cust_email = 'kim@163.com'
WHERE cust_id = '10000006';
刪除數(shù)據(jù)
DELETE FROM Customers
WHERE cust_id = '10000006';
創(chuàng)建和操縱表
創(chuàng)建表
CREATE TABLE Products
(
prod_id CHAR(10) NOT NULL,
vend_id CHAR(10) NOT NULL,
prod_name CHAR(50) NOT NULL,
vend_address ,
);
更新表
添加列
ALTER TABLE Vendors
ADD vend_phone CHAR(20);
刪除列
ALTER TABLE Vendors
DROP COLUMN vend_phone;
刪除表
DROP TABLE Vendors;
使用視圖
視圖
視圖是虛擬的表。
它們包含的不是數(shù)據(jù)而是根據(jù)需要檢索數(shù)據(jù)的查詢。視圖提供了一種封裝SELECT語句的層次,可用來簡化數(shù)據(jù)處理,重新格式化或保護(hù)基礎(chǔ)數(shù)據(jù)。
為什么要使用視圖:
- 重用SQL語句。
- 簡化復(fù)雜的SQL操作。在編寫查詢后,可以方便地重用它而不必知道其基本查詢細(xì)節(jié)。
- 使用表的一部分而不是整個(gè)表。
- 保護(hù)數(shù)據(jù)??梢允谟栌脩粼L問表的特定部分的權(quán)限,而不是整個(gè)表的訪問權(quán)限。
- 更改數(shù)據(jù)格式和表示。視圖可返回與底層表的表示和格式不同的數(shù)據(jù)。
創(chuàng)建視圖
CREATE VIEW ProductsCustomers AS
SELECT cust_name,cust_id,cust_contract,prod_id
FROM Customers,Products,OrderItems
WHERE Customers.cust_id = Products.prod_id
AND Products.order_num = OrderItems.order_num;
AND Customers.cust_address IS NOT NULL
刪除視圖
DROP VIEW Products
使用存儲(chǔ)過程
存儲(chǔ)過程簡單來說就是為了以后的使用而保存一條或多條Mysql語句的集合。
為什么要使用存儲(chǔ)過程
- 通過把處理封裝在容易使用的單元中,簡化復(fù)雜的操作。
- 防止錯(cuò)誤,需要執(zhí)行的步驟越多,出錯(cuò)的可能性越大。防止錯(cuò)誤保證了數(shù)據(jù)的一致性。
- 提高性能。因?yàn)槭褂么鎯?chǔ)過程比使用單獨(dú)的SQL語句要快。
綜上所訴:簡單,安全,高性能。
使用存儲(chǔ)過程
- 執(zhí)行存儲(chǔ)過程
CALL productpricing(@pricelow,@pricehigh,@priceaverage);
其中,執(zhí)行名為productpricing的存儲(chǔ)過程,它計(jì)算并返回產(chǎn)品的最低,最高和平均價(jià)格。
- 創(chuàng)建存儲(chǔ)過程
CREATE PROCEDURE product pricing()
BEGIN
SELECT Avg(prod_price) AS priceacerage
FROM products;
END;
此存儲(chǔ)過程名為product pricing,用CREATE PROCEDURE product pricing()語意定義。
BEGIN和END語句用來限定存儲(chǔ)過程,過程體本身僅是一個(gè)簡單的SELECT語句。
說明:創(chuàng)建存儲(chǔ)過程時(shí),需要臨時(shí)更改命令行的分隔符。
DELIMITER //
CREATE PROCEDURE productpricing()
BEGIN
SELECT Avg(prod_price) AS priceavrage
FROM products;
END //
DELIMITER;
其中DELIMITER // 告訴命令行命令使用//作為新的語句結(jié)束分隔符,可以看到標(biāo)志存儲(chǔ)過程借宿的END定義為END// 而不是END;
如此,存儲(chǔ)過程體內(nèi)的;仍然保持不動(dòng),并且正確地傳遞給數(shù)據(jù)庫引擎。最后,為恢復(fù)為原來的語句分隔符,可以使用DELIMITER;
使用存儲(chǔ)過程:
CALL PRODUCTPRICING();
輸出:
-------------
price average
-------------
16.133571
刪除存儲(chǔ)過程
DROP PROCEDURE productpricing;
使用參數(shù)
以上例子只是一個(gè)簡單的存儲(chǔ)過程,它簡單地顯示SELECT語句的結(jié)果。一般存儲(chǔ)過程并不顯示結(jié)果,而是把結(jié)果返回給你制定的變量。
變量(variable)內(nèi)存中一個(gè)特定的位置,用來臨時(shí)存儲(chǔ)數(shù)據(jù)。
CREATE PROCEDURE productpricing(
OUT priceL DECIMAL(8,2),
OUT priceH DECIMAL(8,2),
OUT priceA DECIMAL(8,2)
)
BEGIN
SELECT Min(prod_price)
INTO priceL
FROM products;
SELECT Max(prod_price)
INTO priceH
FROM products;
SELECT Avg(prod_price)
INTO priceA
FROM products;
END;
MySQL支持IN(傳遞給存儲(chǔ)過程)、OUT(從存儲(chǔ)過程傳出,如這里所用)和INOUT(對(duì)存儲(chǔ)過程傳入和傳出)類型的參數(shù)。存儲(chǔ)過程的代碼位于BEGIN和END語句內(nèi),如前所見,它們是一系列SELECT語句,用來檢索值,然后保存到相應(yīng)的變量(通過指定INTO關(guān)鍵字)。
調(diào)用存儲(chǔ)過程時(shí),必須指定對(duì)應(yīng)的變量名。注意:所有MySQL變量都必須以@開始。
CALL productpricing(
@pricelow,
@pricehigh,
@priceaverage
);
檢索三個(gè)值可如下進(jìn)行:
SELECT @pricelow,@pricehigh,@priceaverage;

IN和OUT的使用
CREATE PROCEDURE ordertotal(
IN number INT,
OUT ototal DECIMAL(8,2)
)
BEGIN
SELECT Sum(item_price*quantity)
FROM orderitems
WHERE orderNum = number
INTO ototal;
END;
調(diào)用這個(gè)存儲(chǔ)過程,顯示這個(gè)合計(jì):
CALL ordertotal(200005,@total);
SELECT @total;
游標(biāo)
游標(biāo)(cursor)是一個(gè)存儲(chǔ)在MySQL服務(wù)器上的數(shù)據(jù)庫查詢,它不是一條SELECT語句,而是被該語句檢索出來的結(jié)果集。在存儲(chǔ)了游標(biāo)之后,應(yīng)用程序可以根據(jù)需要滾動(dòng)或?yàn)g覽其中的數(shù)據(jù)。
游標(biāo)主要用于交互式應(yīng)用,其中用戶需要滾動(dòng)屏幕上的數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行瀏覽或做出更改。
只能用于存儲(chǔ)過程 不像多數(shù)DBMS, MySQL游標(biāo)只能用于存儲(chǔ)過程(和函數(shù))。
使用游標(biāo)
使用游標(biāo)涉及幾個(gè)明確的步驟。
- 在能夠使用游標(biāo)前,必須聲明(定義)它。這個(gè)過程實(shí)際上沒有檢索數(shù)據(jù),它只是定義要使用的SELECT語句。
- 一旦聲明后,必須打開游標(biāo)以供使用。這個(gè)過程用前面定義的SELECT語句把數(shù)據(jù)實(shí)際檢索出來。
- 對(duì)于填有數(shù)據(jù)的游標(biāo),根據(jù)需要取出(檢索)各行。
- 在結(jié)束游標(biāo)使用時(shí),必須關(guān)閉游標(biāo)。在聲明游標(biāo)后,可根據(jù)需要頻繁地打開和關(guān)閉游標(biāo)。在游標(biāo)打開后,可根據(jù)需要頻繁地執(zhí)行取操作。
創(chuàng)建游標(biāo)
- 定義
CREATE PROCEDURE processorder()
BEGIN
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
END;
2.打開游標(biāo)
OPEN ordernumbers;
- 使用游標(biāo)
在一個(gè)游標(biāo)被打開后,可以使用FETCH語句分別訪問它的每一行。FETCH指定檢索什么數(shù)據(jù)(所需的列),檢索出來的數(shù)據(jù)存儲(chǔ)在什么地方。它還向前移動(dòng)游標(biāo)中的內(nèi)部行指針,使下一條FETCH語句檢索下一行(不重復(fù)讀取同一行)。
CREATE PROCEDURE processorders()
BEGIN
DECLARE o INT;
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
OPEN ordernumbers;
FETCH ordernumbers INTO o;
CLOSE ordernumbers;
END;
- 關(guān)閉游標(biāo)
CLOSE ordernumbers;
索引
索引是一種與表有關(guān)的結(jié)構(gòu),它的作用相當(dāng)于書的目錄,可以根據(jù)目錄中的頁碼快速找到所需的內(nèi)容。
當(dāng)表中有大量記錄時(shí),若要對(duì)表進(jìn)行查詢,沒有索引的情況是全表搜索:將所有記錄一一取出,和查詢條件進(jìn)行對(duì)比,然后返回滿足條件的記錄。這樣做會(huì)執(zhí)行大量磁盤 I/O 操作,并花費(fèi)大量數(shù)據(jù)庫系統(tǒng)時(shí)間。
而如果在表中已建立索引,在索引中找到符合查詢條件的索引值,通過索引值就可以快速找到表中的數(shù)據(jù),可以大大加快查詢速度。
對(duì)一張表中的某個(gè)列建立索引,有以下兩種語句格式:
ALTER TABLE 表名字 ADD INDEX 索引名(列名);
CREATE INDEX 索引名(列名) ON 表名字;
如:
ALTER TABLE employee ADD INDEX idx_id(id);
CREATE INDEX idx_name(name) ON employee;
查看索引的語句是:
SHOW INDEX FROM 表名字;
在使用 SELECT 語句查詢的時(shí)候,語句中 WHERE 里面的條件,會(huì)自動(dòng)判斷有沒有可用的索引。
比如有一個(gè)用戶表,它擁有用戶名(username)和個(gè)人簽名(note)兩個(gè)字段。其中用戶名具有唯一性,我們給用戶名加上一個(gè)唯一索引;個(gè)性簽名不加任何索引。
這時(shí)候,如果你要查找某一用戶,使用語句 select * from user where username=? 和 select * from user where note=? 性能是有很大差距的,對(duì)建立了索引的用戶名進(jìn)行條件查詢會(huì)比沒有索引的個(gè)性簽名條件查詢快幾倍,在數(shù)據(jù)量大的時(shí)候,這個(gè)差距只會(huì)更大。
管理事務(wù)處理
事務(wù)處理
事務(wù)處理(transaction processing)可以用來維護(hù)數(shù)據(jù)庫的完整性,它保證成批的MySQL操作要么完全執(zhí)行,要么完全不執(zhí)行。
利用事務(wù)處理,可以保證一組操作不會(huì)中途停止,它們或者作為整體執(zhí)行,或者完全不執(zhí)行(除非明確指示)。如果沒有錯(cuò)誤發(fā)生,整組語句提交給(寫到)數(shù)據(jù)庫表。如果發(fā)生錯(cuò)誤,則進(jìn)行回退(撤銷)以恢復(fù)數(shù)據(jù)庫到某個(gè)已知且安全的狀態(tài)。
下面是關(guān)于事務(wù)處理需要知道的幾個(gè)術(shù)語:
? 事務(wù)(transaction)指一組SQL語句;
? 回退(rollback)指撤銷指定SQL語句的過程;
? 提交(commit)指將未存儲(chǔ)的SQL語句結(jié)果寫入數(shù)據(jù)庫表;
? 保留點(diǎn)(savepoint)指事務(wù)處理中設(shè)置的臨時(shí)占位符(place-holder),你可以對(duì)它發(fā)布回退(與回退整個(gè)事務(wù)處理不同)。
控制事務(wù)處理
開始事務(wù)
start transaction
使用ROLLBACK
ROLLBACK命令用來回退(撤銷)MySQL語句:
SELECT * FROM ordertotals;
START TRANSACTION;
DELETE FROM ordertotals;
SELECT * FROM ordertotals;
ROLLBACK;
SELECT * FROM ordertotals;
首先執(zhí)行一條SELECT以顯示該表不為空。
然后開始一個(gè)事務(wù)處理,用一條DELETE語句刪除ordertotals中的所有行。
另一條SELECT語句驗(yàn)證ordertotals確實(shí)為空。
這時(shí)用一條ROLLBACK語句回退STARTTRANSACTION之后的所有語句,最后一條SELECT語句顯示該表不為空。
顯然,ROLLBACK只能在一個(gè)事務(wù)處理內(nèi)使用(在執(zhí)行一條START TRANSACTION命令之后)。
事務(wù)處理用來管理INSERT、UPDATE和DELETE語句。你不能回退CREATE或DROP操作。
使用COMMIT
一般的MySQL語句都是直接針對(duì)數(shù)據(jù)庫表執(zhí)行和編寫的。這就是所謂的隱含提交(implicitcommit),即提交(寫或保存)操作是自動(dòng)進(jìn)行的。
在事務(wù)處理塊中,提交不會(huì)隱含地進(jìn)行。為進(jìn)行明確的提交,使用COMMIT語句。
STRART TRANSACTION;
DELETE FROM orderitems WHERE order_num = 20010;
DELETE FROM orders WHERE order_num = 20010;
COMMIT;
在這個(gè)例子中,從系統(tǒng)中完全刪除訂單20010。因?yàn)樯婕案聝蓚€(gè)數(shù)據(jù)庫表orders和orderitems,所以使用事務(wù)處理塊來保證訂單不被部分刪除。最后的COMMIT語句僅在不出錯(cuò)時(shí)寫出更改。如果第一條DELETE起作用,但第二條失敗,則DELETE不會(huì)提交(實(shí)際上,它是被自動(dòng)撤銷的)。
使用保留點(diǎn)
簡單的ROLLBACK和COMMIT語句就可以寫入或撤銷整個(gè)事務(wù)處理。但是,只是對(duì)簡單的事務(wù)處理才能這樣做,更復(fù)雜的事務(wù)處理可能需要部分提交或回退。
為了支持回退部分事務(wù)處理,必須能在事務(wù)處理塊中合適的位置放置占位符。這樣,如果需要回退,可以回退到某個(gè)占位符。這些占位符稱為保留點(diǎn)。為了創(chuàng)建占位符,可如下使用SAVEPOINT語句:
SAVEPOINT delete1;
每個(gè)保留點(diǎn)都取標(biāo)識(shí)它的唯一名字,以便在回退時(shí),MySQL知道要回退到何處。為了回退到本例給出的保留點(diǎn),可如下進(jìn)行:
ROLLBACK TO delete1;
保留點(diǎn)在事務(wù)處理完成(執(zhí)行一條ROLLBACK或COMMIT)后自動(dòng)釋放。自MySQL 5以來,也可以用RELEASE SAVEPOINT明確地釋放保留點(diǎn)。
安全管理
訪問控制
MySQL服務(wù)器的安全基礎(chǔ)是:用戶應(yīng)該對(duì)他們需要的數(shù)據(jù)具有適當(dāng)?shù)脑L問權(quán),既不能多也不能少。換句話說,用戶不能對(duì)過多的數(shù)據(jù)具有過多的訪問權(quán)。
創(chuàng)建用戶賬號(hào)
為了創(chuàng)建一個(gè)新用戶賬號(hào),使用CREATE USER語句:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
username:你將創(chuàng)建的用戶名
host:指定該用戶在哪個(gè)主機(jī)上可以登陸,如果是本地用戶可用localhost,如果想讓該用戶可以從任意遠(yuǎn)程主機(jī)登陸,可以使用通配符%
password:該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸服務(wù)器
例子:
CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456';
CREATE USER 'pig'@'%' IDENTIFIED BY '123456';
CREATE USER 'pig'@'%' IDENTIFIED BY '';
CREATE USER 'pig'@'%';
重命名用戶
RENAME USER olderName to newName;
刪除用戶
DORP USER newName;