SQL必知必會(huì)

檢索數(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ù))
  1. 注意:第0行。 第一個(gè)被檢索的行是第0行,而不是第1行。因此,LIMIT 1 OFFSET 1會(huì)檢索第2行,而不是第1行。
  2. 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操作符。
AND操作符.jpg

求值順序.jpg
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)(%)通配符
百分號(hào)通配符

百分號(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ù)

兩種用法:

  1. 使用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ù)。
為什么要使用視圖:

  1. 重用SQL語句。
  2. 簡化復(fù)雜的SQL操作。在編寫查詢后,可以方便地重用它而不必知道其基本查詢細(xì)節(jié)。
  3. 使用表的一部分而不是整個(gè)表。
  4. 保護(hù)數(shù)據(jù)??梢允谟栌脩粼L問表的特定部分的權(quán)限,而不是整個(gè)表的訪問權(quán)限。
  5. 更改數(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ǔ)過程

  1. 通過把處理封裝在容易使用的單元中,簡化復(fù)雜的操作。
  2. 防止錯(cuò)誤,需要執(zhí)行的步驟越多,出錯(cuò)的可能性越大。防止錯(cuò)誤保證了數(shù)據(jù)的一致性。
  3. 提高性能。因?yàn)槭褂么鎯?chǔ)過程比使用單獨(dú)的SQL語句要快。
    綜上所訴:簡單,安全,高性能。

使用存儲(chǔ)過程

  1. 執(zhí)行存儲(chǔ)過程
CALL productpricing(@pricelow,@pricehigh,@priceaverage);

其中,執(zhí)行名為productpricing的存儲(chǔ)過程,它計(jì)算并返回產(chǎn)品的最低,最高和平均價(jià)格。

  1. 創(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è)明確的步驟。

  1. 在能夠使用游標(biāo)前,必須聲明(定義)它。這個(gè)過程實(shí)際上沒有檢索數(shù)據(jù),它只是定義要使用的SELECT語句。
  2. 一旦聲明后,必須打開游標(biāo)以供使用。這個(gè)過程用前面定義的SELECT語句把數(shù)據(jù)實(shí)際檢索出來。
  3. 對(duì)于填有數(shù)據(jù)的游標(biāo),根據(jù)需要取出(檢索)各行。
  4. 在結(jié)束游標(biāo)使用時(shí),必須關(guān)閉游標(biāo)。在聲明游標(biāo)后,可根據(jù)需要頻繁地打開和關(guān)閉游標(biāo)。在游標(biāo)打開后,可根據(jù)需要頻繁地執(zhí)行取操作。

創(chuàng)建游標(biāo)

  1. 定義
CREATE PROCEDURE processorder()
BEGIN
    DECLARE ordernumbers CURSOR
    FOR
    SELECT order_num FROM orders;
END;

2.打開游標(biāo)

OPEN ordernumbers;
  1. 使用游標(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;
  1. 關(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;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容