全部產品
Search
文件中心

ApsaraDB RDS:常用SQL命令(MySQL)

更新時間:Aug 29, 2025

本文列舉RDS MySQL中常用的資料庫與帳號管理SQL命令。

RDS MySQL 100%相容開源MySQL,如需瞭解完整的SQL命令、函數、參數說明及使用限制,請參見 MySQL 參考指南(官方)

資料庫管理

類別

SQL文法

樣本

建立資料庫

-- 建立資料庫
CREATE DATABASE <database name>;

-- 建立資料庫並指定字元集與定序
CREATE DATABASE <database_name>
DEFAULT CHARACTER SET <charset>
COLLATE <collation>;
-- 建立資料庫app_db
CREATE DATABASE app_db;

-- 建立資料庫app_db並指定字元集(建議使用utf8mb4,其支援更多字元)
CREATE DATABASE app_db
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

-- 建立資料庫並指定中文字元集(適用於特定情境)
CREATE DATABASE cn_db
DEFAULT CHARACTER SET gbk
COLLATE gbk_chinese_ci;

刪除資料庫

DROP DATABASE <database name>;
重要

刪除操作無法復原,請確保資料已備份

DROP DATABASE app_db;

帳號管理

類別

SQL文法

樣本

建立帳號

CREATE USER 'username'@'host' IDENTIFIED BY 'password';
-- 建立允許從任意IP登入的帳號(%表示允許任意IP串連)
-- 該方式與RDS控制台帳號建立邏輯一致,後續可通過RDS控制台刪除帳號
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';

-- 建立僅允許從指定網段登入的帳號
-- 若建立帳號時指定了IP或網段,後續通過RDS控制台刪除帳號會報錯,需通過SQL命令刪除
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';

刪除帳號

DROP USER 'username'@'host';
重要

請勿使用DELETE FROM mysql.user WHERE User = '<username>' AND Host = '<host>';刪除帳號,此方式可能導致許可權殘留、中繼資料不一致等情況。

-- 刪除名app_user且只允許從192.168.1.x網段登入的帳號
DROP USER 'app_user'@'192.168.1.%';

賦予許可權

GRANT SELECT ON db01.* TO 'username'@'host';
GRANT <privilege> ON <level> TO 'username'@'host';
-- <privilege>:如 SELECT、INSERT、UPDATE、DELETE、ALL PRIVILEGES
-- <level>:權限等級,如 db_name.*(庫級)、db_name.table_name(表級)、*.*(全域)
說明

不支援通過GRANT ALL PRIVILEGES ON *.*授予所有資料庫的完全控制許可權。

-- 授予app_db庫所有表的查詢許可權
GRANT SELECT ON app_db.* TO 'app_user'@'%';

-- 授予app_db庫中users表的增刪改查許可權
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.users TO 'app_user'@'%';

-- (謹慎使用)授予app_db庫所有許可權,僅允許來自192.168.1.x網段的用戶端串連
GRANT ALL PRIVILEGES ON app_db.* TO 'admin_user'@'192.168.1.%';

查詢帳號許可權

-- 所有執行個體中所有已建立的帳號及其允許登入的主機地址
SELECT user, host FROM mysql.user;

-- 查看帳號許可權
SHOW GRANTS FOR 'username'@'host';
說明

對於早期版本,若查詢mysql.user報錯,可改為查詢mysql.user_view視圖。

-- 查看帳號app_user從192.168.1.%主機登入時擁有的所有資料庫許可權
SHOW GRANTS FOR 'app_user'@'192.168.1.%';

回收帳號許可權(帳號依然存在)

  • 收回全部許可權:撤銷該帳號在所有資料庫上的所有操作許可權和授權能力

    REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'username'@'host';
  • 收回指定許可權:撤銷該帳號在所有資料庫的所有表上執行UPDATE的許可權(權限類別型按需變更即可)

    REVOKE UPDATE ON *.* FROM 'username'@'host';
說明

回收許可權不會刪除帳號,如需徹底刪除,請配合DROP USER使用。

--撤銷帳號app_user從192.168.1.%登入時在所有資料庫上的全部操作許可權和授權能力
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'app_user'@'192.168.1.%';

-- 撤銷使用者app_user從10.10.0.%登入時對shop_db庫中users表的修改資料許可權
REVOKE UPDATE ON shop_db.users FROM 'app_user'@'10.10.0.%';

常見問題

通過RDS控制台刪除帳號報錯?

問題描述

在RDS MySQL控制台帳號管理頁面刪除使用者時報錯刪除賬戶失敗,請檢查輸入的參數或請求。執行個體中可能存在其他進程正在等待鎖,或者該資料庫賬戶的host值未設定為%,即允許任意主機登入。

解決方案

通過RDS MySQL控制台建立的使用者帳號預設主控件白名單為%,即允許任意主機訪問。若帳號是通過SQL命令手動建立,且建立時指定了僅允許IP或網段登入(如'username'@'10.10.10.1''username'@'10.%.%.%'),則該帳號無法通過RDS控制台刪除。

請執行如下SQL先查詢待刪除帳號是否為非%配置,若主機host為非%形式,則不允許通過RDS控制台刪除,需要通過DROP user命令列方式刪除。

-- 檢查待刪除帳號是否為非%配置(如192.168.1.1、192.168.1.%等)
SELECT user,host FROM mysql.user WHERE user='待刪除使用者名稱';

-- 若主機host為非%形式,需通過DROP命令刪除帳號
DROP user 'user'@'host';DROP USER '待刪除使用者名稱'@'目標主機IP或網段';

相關文檔