您好,登錄后才能下訂單哦!
????? Hi,大家好,今天我給大家帶來的是“MariaDB(MySQL)常用語句的使用”
????? 說明
????????????? 1、MySQL語句不區分字符大小寫,在Unix或類Unix(Linux)系統下“參數”區分字符大小寫
????????????? 2、多數MySQL語句以";"結尾;如果結尾處不寫";"MySQL會等待輸入下一條語句,直到結尾有";"為止
????????????? 3、一行需要執行多條語句用";"進行分隔
?????????? 本篇內容以Linux系統為例;本文中的[ 符號里邊的內容為可選內容,既可有可無的 ]、{ 符號里的內容為必須給出的內容 }、| 符號為或者之意;語句之前的符號# 為Linux系統的命令提示符(需在系統下執行的)、符號> 為MySQL數據庫提示符(需在MySQL數據庫中執行的);字體顏色為紅色的是需要注意的地方(可能會出現誤操作的地方)
?
溫馨提示:使用電腦閱讀效果更佳
?
MariaDB(MySQL)語句分類
????? 服務端命令:通過mysql連接發往服務器執行并取回結果(SQL語句)
????????????? DDL(Data Defined Language):要用于管理數據庫組件,例如表、索引、視圖、用戶、存儲過程
???????????????????? CREATE DATABASE, ALTER DATABASE, DROP DATABASE, CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, DROP INDEX, CREATE USER, DROP USER, SELECT
????? ????? DML(Data Manipulation Language):數據操縱語言,主要用管理表中的數據,實現數據的增、刪、改、查
???????????????????? INSERT, DELETE, UPDATE, SELECT
????????????? DCL:權限管理
???????????????????? GRANT, REVOKE
????? 客戶端命令:本地執行
以下語句有兩種表示方式(clear,\c),語句結尾處不用加; 但加了也不會出錯 | |
語句 | 說明 |
? (\?) | 獲取命令幫助 |
clear (\c) | 清除當前的輸入語句 |
connect (\r) | 重新連接MySQL |
delimiter (\d) | 設置語句分隔符,默認為分號; |
ego (\G) | 語句結束標記,結果以垂直方式顯示 |
exit (\q) | 退出MySQL |
go (\g) | 語句結束標記 |
help (\h) | 顯示此幫助 |
prompt (\R) | 更改MySQL提示符 |
quit (\q) | 退出MySQL |
source (\.) | 裝載并運行SQL腳本,腳本存放的位置"MySQL"用戶需要有權限讀取 |
status (\s) | 獲取MySQL狀態信息 |
system (\!) | 執行shell命令 |
use (\u) | 設定哪個庫為默認數據庫 |
?
???? 一、登錄/退出MySQL
?????????? 登錄
???????????????? 登錄本地數據庫
?????? ???????????????? 匿名登錄
?????????????????????????????????? # mysql [數據庫名稱]
?????????????????????????????????? # mysql -p [數據庫名稱]
???????????????????? ????? 指定用戶登錄
?????????????????????????????????? # mysql -u 用戶名 -p [數據庫名稱]
?????????????????????????????????? # mysql -u 用戶名 –p用戶的密碼 [數據庫名稱]
?????? ?????????? 遠程登錄數據庫
??????????????????????????? # mysql -h 主機 -u 用戶名 -p用戶的密碼 [數據庫名稱]
???????????????? 注意:在登錄時可指定數據庫"[DATABASE_NAME]"
?????????? 退出
???????????????????? > exit
???????????????????? > quit
???????????????????? > \q
???????????????????? Ctrl+C
???? 二、選擇/切換數據庫:在數據庫中執行的操作都要先選擇數據庫
????????????? > USE 數據庫名稱;
?
???? 三、數據庫管理
?????????? 創建
???????????????? 創建一個新的數據庫
??????????????????????????? > CREATE {DATABASE | SCHEMA} 數據庫名稱;
???????????????? 創建一個新的數據庫,如果數據庫不存在,則創建
??????????????????????????? > CREATE DATABASE IF NOT EXISTS 數據庫名稱;
????????????????????? 注意:數據庫名稱在創建時定義,后期不可更改
?????????? 修改
???????????????? 修改指定數據庫的默認字符集
??????????????????????????? > ALTER DATABASE 數據庫名稱 CHARACTER SET '字符集名稱';
?????????? 查詢
?????? ?????????? 查看當前設備上已有的數據庫
??????????????????????????? > SHOW DATABASES;
???????????????????? 查看以指定字符開頭的數據庫
??????????????????????????? > SHOW DATABASES LIKE 'name%';
???????????????????? 查看以指定字符結尾的數據庫
??????????????????????????? > SHOW DATABASES LIKE '%name';
???????????????????? 查看數據庫所支持的引擎
??????????????????????????? > SHOW ENGINES;
????????????? ????? 查看所支持的字符集
??????????????????????????? > SHOW CHARACTER SET;
????????????????????? 常見字符集
?????????????????????????????????? big5:繁體中文
?????????????????????????????????? gb2312:簡體中文
?????????????????????????????????? utf8:統一的字符編碼標準
????????????? ????? 查看字符集的排序方式
??????????????????????????? > SHOW COLLATION;
???????????????????? 查看當前數據庫的版本號和當前日期
??????????????????????????? > SELECT VERSION(), CURRENT_DATE;
?????????? 刪除
????????????? ????? 刪除數據庫:刪庫需小心(MySQL沒有回收站)
??????????????????????????? > DROP {DATABASE | SCHEMA} 數據庫名稱;
??????????????????????????? > DROP {DATABASE | SCHEMA} [IF EXISTS] 數據庫名稱;
???????????????????? 建議把不用的數據庫移動到其他位置,而不是刪除
??????????????????????????? # mv /var/lib/mysql/DATABASE_NAME??/PATH/TO/DIRECTORY_NAME
?
???? 四、數據表管理
?????????? 創建
????????????? ????? 在數據庫內創建數據表
??????????????????????????? > USE 數據庫名稱;
??????????????????????????? > CREATE TABLE 數據表名稱 (字段1 數據類型 修飾符,字段2 數據類型 修飾符,字段3 數據類型 修飾符 ...) [table_option];
? ? ? ? ? ? ????????MySQL數據類型參考:點我查看
?????? ???????????????? 在創建數據表時還可以定義以下內容:
? ? ? ? ? ? ? ? ? ? ? ? ? ??定義鍵
????????????????????????????????????????? 主鍵:PRIMARY KEY (字段1, 字段2, ...)
????????????????????????????????????????? 唯一鍵:UNIQUE KEY? (字段1, 字段2,...)
????????????????????????????????????????? 外鍵:FOREIGN KEY (column)
??????????????????????????? 定義索引
????????????????????????????????????????? KEY|INDEX [索引名稱] (字段1, 字段2,...)
> CREATE TABLE server ( IDC_ROOM VARCHAR(3) NOT NULL,RACK_SLOT VARCHAR(10)NOT NULL ,SN VARCHAR(30) PRIMARY KEY,HOSTNAME VARCHAR(16) NOT NULL,MACHINE_TYPE VARCHAR(10) NOT NULL ) ;
???????????????????? ????? table_option:
??????????????????????????? ? | ENGINE [=] engine_name: 【定義存儲引擎】
??????????????????????????? ? | AUTO_INCREMENT [=] value: 【設置默認自動增長數據從數字幾開始算,默認為1】
??????????????????????????? ? | [DEFAULT] CHARACTER SET [=] charset_name: 【定義字符集,如不定義則從數據庫繼承】
??????????????????????????? ? | [DEFAULT] COLLATE [=] collation_name: 【定義排序規則】
??????????????????????????? ? | COMMENT [=] 'string': 【定義數據表的注釋信息】
??????????????????????????? ? | MAX_ROWS [=] value 【定義最大行數】
??????????????????????????? ? | MIN_ROWS [=] value 【定義最小行數】
??????????????????????????? ? | PASSWORD [=] 'string' 【加密】
?????????????????????????? ? | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT} 【定義行格式】
??????????????????????????? ? ?????????? DEFAULT:默認格式
??????????????????????????? ? ?????????? DYNAMIC:動態格式
??????????????????????????? ? ?????????? FIXED:固定長度
??????????????????????????? ? ?????????? COMPRESSED:壓縮存儲
??????????????????????????? ? ?????????? REDUNDANT:冗余存儲
??????????????????????????? ? ?????????? COMPACT:緊致存儲
?
???????????????????? ????? 鍵類型可以在字段中指明
?????????????????????????????????? > CREATE TABLE 數據表名稱 (ID TINYINT NOT NULL AUTO_INCREMENT UNIQUE KEY,NAME VARCHAR(20) NOT NULL UNIQUE KEY);
????????????? ?????????? 也可以單獨指明:把多個字段聯合起來定義(多字段索引)
?????????????????????????????????? > CREATE TABLE 數據表名稱 (ID TINYINT NOT NULL AUTO_INCREMENT ,NAME VARCHAR(20) NOT NULL,UNIQUE KEY(ID,NAME));
???????????????????? ??????????????????????注意:創建數據表的時候,表名不可使用"table"作為其名稱
?????? ?????????? 在指定數據庫中創建數據表
??????????????????????????? > CREATE TABLE 數據庫名稱.數據表名稱 (字段1 數據類型 修飾符,字段2 數據類型 修飾符,字段3 數據類型 修飾符 ...) [table_option];
?????????? 插入
?????? ?????????? 向數據表中插入數據
? ? ????????????????????一次插入一行
?????????????????????????????????? > INSERT INTO [數據庫名稱.]數據表名稱(字段1,字段2,字段3 ...)
?????? ???????????????? 一次插入多行
?????????????????????????????????? > INSERT INTO [數據庫名稱.]數據表名稱(字段1,字段2,字段3 ...) {VALUES | VALUE} (DATE1: '字段1的值','字段2的值',字段3的值' ...),(DATE2: '字段1的值','字段2的值','字段3的值' ...) ...;
注意
?????????????????????????????????? (1) 使用INSERT語句,可以一次插入一行,也可以一次插入多行"(line1_data),(line2_data)..."
?????????????????????????????????? (2) 如果想用INSERT語句插入空值時,可以直接用NULL
????????????????????
???????????????????? 替換表中已有數據:如果沒有數據,則插入;如果已有數據,則替換(支持單行插入、多行插入、給定字段插入或全字段插入)
??????????????????????????? > REPLACE [INTO] 數據表名稱(字段1,字段2,字段3 ...) VALUES ('字段1的值','字段2的值','字段3的值','字段4的值','字段5的值','字段6的值')[,(line2_data)...];
???????????????? 從文件中讀取數據并插入到表中:一個空表,填充它的一個簡易方法是創建一個文本文件,每條信息各一行,然后用一個語句將文件的內容裝載到表中
??????????????????????????? > LOAD DATA LOCAL INFILE '/PATH/TO/ FILE_NAME' INTO TABLE [數據庫名稱.]數據表名稱;
????????????????????? 注意:如果需要填充空值時,使用\N(反斜線+字母N)表示
???????????????? ????? 我演示的是從文件中導入到數據庫,表中的敏感數據我已修改
???????????????? 從EXCEL表格中插入數據:點我查看
?????????? 修改
?????? ?????????? 修改數據表的名稱
??????????????????????????? > RENAME TABLE [數據庫名稱.]數據表名稱 TO 數據庫名稱.新表名稱 ;
??????????????????????????? > ALTER TABLE [數據庫名稱.]數據表名稱 RENAME TO 數據庫名稱.新表名稱;
???????????????? 修改注釋信息
??????????????????????????? > ALTER TABLE [數據庫名稱.]數據表名稱 COMMENT = '注釋信息';
???????????????????? 給表中添加一個新字段
??????????????????????????? > ALTER TABLE 數據表名稱 ADD 新字段名 數據類型 修飾符 [FIRST | AFTER 字段名];
?????????????????????????????????? 指明字段位置
????????????????????????????????????????? FIRST:添加到第一字段
????????????????????????????????????????? AFTER:添加到哪個字段后面
????????????????????????????????????????? 如果不指定字段位置,則放在最后
???????????????? 修改字段名稱(CHANGE)
??????????????????????????? > ALTER TABLE 數據表名稱 CHANGE 原名稱 新名稱 原有屬性信息(數據類型、修飾符...);
???????????????? 修改/更新指定字段
??????????????????????????? > UPDATE [LOW_PRIORITY] [IGNORE] [數據庫名稱.]數據表名稱 SET 字段1=字段1的值[,字段2=字段2的值] ... WHERE where_condition [ORDER BY ...] [LIMIT row_count]
????????????? ?????????? 注意:用UPDATE修改行時必須使用WHERE子句指明條件(盡量指主鍵),否則將修改所有
?????????? 查詢
????????????? ????? 查詢當前數據庫中的數據表
??????????????????????????? > USE 數據庫名稱;
??????????????????????????? > SHOW TABLES;
????????????? ????? 查詢指定庫中的數據表
??????????????????????????? > SHOW TABLES IN 數據庫名稱;
??????????????????????????? > SHOW TABLES FROM 數據庫名稱;
???????????????????? 查看數據表的詳細信息
??????????????????????????? > DESCRIBE [數據庫名稱.]數據表名稱;
??????????????????????????? > DESC [數據庫名稱.]數據表名稱;
????????????? ????? 查看數據表的狀態信息
??????????????????????????? > SHOW TABLE STATUS [LIKE '數據表名稱'];
?????? ?????????? 查看數據表的狀態信息(垂直顯示)
??????????????????????????? > SHOW TABLE STATUS [LIKE '數據表名稱']\G;
??????????????????????????? ????????????? 輸出內容說明
?????? ?????????? ?查看創建命令
???????????????????? ????? > SHOW CREATE TABLE [數據庫名稱.]數據表名稱;
???????????????? 顯示以指定字符開頭的表的狀態
??????????????????????????? > SHOW TABLE STATUS WHERE Name LIKE '數據表名稱%'\G;
???????????????? 顯示指定時間創建的表
??????????????????????????? > SHOW TABLE STATUS WHERE Create_time LIKE '時間%'\G;
?????????? SELECT語句:用來從數據表中檢索信息
??????????????????????????? > SELECT SELECT_EXPR FROM [數據庫名稱.]數據表名稱1,[數據表名稱2 ...] [WHERE where_condition];
SELECT語句的子句的執行過程
???????????????????? ????? SELECT_EXPR
?????????????????????????????????? *:所有字段(所有行,所有列)
?????????????????????????????????? ALL
?????????????????????????????????? 字段1,字段2,字段3:投影;只顯示指定字段
?????????????????????????????????? DISTINCT:相同的數據,只顯示一次
?????????????????????????????????? field AS field_alias:給field取個別名field_alias
?
??????????????????????????? 只查看表中不同的數據
?????????????????????????????????? > SELECT DISTINCT FROM [數據庫名稱.]?數據表1,[數據表2 ...];
???????????????????? ????? 查看指定表中所有字段(慎用)
?????????????????????????????????? > SELECT * FROM [數據庫名稱.]數據表名稱1,[數據表2 ...];
??????????????????????????? 查看指定表中的指定列(如果表太大則不適合執行)
?????????????????????????????????? > SELECT 字段1,字段2,字段3 ... FROM [數據庫名稱.]數據表名稱;
????????????????????? 定義顯示的字段別名
?????????????????????????????????? > SELECT 字段 AS 字段別名 FROM [數據庫名稱.]數據表名稱;
???????????????????? ????? FROM子句:指定要查詢的關系
?????????????????????????????????? 單表查詢(簡單查詢):后面跟一個表名
?????????????????????????????????? 多表查詢:后面跟多個表名
?????????????????????????????????? 子查詢:后面跟WHERE子句
?
??????????????????????????? WHERE子句:選擇、指明條件;只輸出符合條件的行(重要)
?????????????????????????????????? > SELECT 字段1,字段2,字段3 ... FROM [數據庫名稱.]數據表名稱 WHERE where_condition;
?????????????????????????????????? ????? where_condition:
??????????????????????????? ???????????????? 操作符
BETWEEN x AND y | 在x和y范圍之間的值 |
IS NULL | 空值 |
IS NOT NULL | 非空值 |
IN (LIST) | 使用列表給出的值;用于離散取值 |
????????????????????????????????????????? ????? 算數運算
+ | 加 |
- | 減 |
* | 乘 |
/ | 除 |
% | 取模 |
????????????????????????????????????????? ????? 比較表達式
>? | 大于 |
<? | 小于 |
>= | 大于等于 |
<= | 小于等于 |
= | 等于 |
!= 或 <> | 不等于 |
<=> | 空值比較 |
???????????????????? ????????????????????? 組合條件(邏輯運算)
AND (&&) | 與;并且關系,既兩個條件同時滿足 |
OR (||) | 或;或者關系,既兩個條件滿足一個 |
NOT (!) | 非;條件不滿足即為真 |
???????????????????????????????????????????????? ?????????? 注意:AND和OR可以混用,但AND比OR具有更高的優先級。如果你使用兩個操作符,使用圓括號指明如何對條件進行分組是一個好主意( NOT xxx AND NOT xxx AND NOT xxx 等于NOT ( xxx OR xxx OR xxx ) )
?????????????????????????????????????? 字符串比較
???????????????????????????????????????????? 通配符
?????????????????????????????????????????????????????????????? LIKE '模式':支持使用“通配符”做模糊匹配
????????????????????????????????????????????????????????????????????? %:任意長度的任意字符
????????????????????????????????????????????????????????????????????? _:任意單個字符
???????????????????????????????????????????? 正則表達式
?????????????????????????????????????????????????????????????? {RLIKE | REGEXP} '模式':基基于正則表達式做模式匹配;不用索引、效率低
?????????????????????????????????????????????????????????????? 正則表達式元字符:點我查看
????????????????????? 排序(ORDER BY):將查詢到的結果排序顯示;如果表太大,排序操作極其消耗資源
????????????????????? ?????? > ORDER BY 字段名稱 {ASC | DESC}
??????????????????????????? 升序:默認(ASC)
????????????????????????????????????????? ?> SELECT 字段1,字段2,字段3 ... FROM [數據庫名稱.]數據表名稱 ORDER BY?字段名稱?ASC;
??????????????????????????? 降序(DESC)
????????????????????????????????????????? ?> SELECT 字段1,字段2,字段3 ... FROM [數據庫名稱.]數據表名稱 ORDER BY 字段名稱?DESC;
?????????????????????????????????? 注意:默認是區分字符大小寫的,如不想區分字符大小寫則執行“ORDER BY BINARY 字段名稱”
????????????????????? LIMIT子句
?????????????????????????????????? LIMIT [offset,]count
?????????????????????????????????? LIMIT #:只顯示前#行的內容
?????????????????????????????????? LIMIT x,y:忽略x行,顯示y行后的行
???????????????????? ???????????????????? x:偏移量
????????????????????????????????????????? y:偏移后取幾個值予以顯示
?????? ????????????????????? 注意:在MySQL中字符串必須加引號,而數值一定不能加引號
????????????????????? 聚合計算
?????????????????????????????????? > SELECT 聚合計算函數 FROM [數據庫名稱.]數據表名稱;
?????????????????????????????????? 聚合計算函數
????????????????????????????????????????? AVG(字段名稱):求平均值
????????????????????????????????????????? MAX(字段名稱):求最大值
????????????????????????????????????????? MIN(字段名稱):求最小值
????????????????????????????????????????? SUM(字段名稱):求合
????????????????????????????????????????? COUNT(字段名稱):求個數之和
????????????????????? 分組(GROUP BY):分組主要目的是為了做聚合計算
?????????????????????????????????? > SELECT * FROM [數據庫名稱.]數據表名稱 GROUP BY '字段名';
?????????????????????????????????? 對分組進行過濾
????????????????????????????????????????? > HAVING conditions;
?????????? 復制
????????????? ????? 復制表結構
??????????????????????????? > CREATE TABLE 數據表名稱 LIKE?原數據庫.原數據表;
???????????????? 復制表中的幾個字段并將其創建成一個新表(不會復制其屬性)
??????????????????????????? > CREATE TABLE 數據表名稱 SELECT 字段1,字段2,字段3 ... FROM 原數據庫.原數據表;
?????????? 刪除???
???????????????? 刪除表:刪表需小心(MySQL沒有回收站)
??????????????????????????? > DROP TABLE [IF EXISTS] [數據庫名稱.]數據表名稱;
???????????????? 刪除表中的行(DELETE)
??????????????????????????? > DELETE FROM [數據庫名稱.]數據表名稱 [WHERE where_condition];
??????????????????????????? > DELETE FROM 數據表名稱 [ORDER BY ...] [LIMIT row_count]
???????????????????? ????? 注意:用DELETE刪除行時必須使用WHERE子句,否則將清空整張表(DELETE FROM table_name)
???????????????? 先排序后刪除
??????????????????????????? > DELETE FROM [數據庫名稱.]數據表名稱 [WHERE where_condition] [ORDER BY '字段名' [DESC]]
???????????????? 刪除字段(列)
??????????????????????????? > ALTER TABLE 數據表名稱 DROP 字段名稱;
???????????????? 清空整張數據表
??????????????????????????? > TRUNCATE [數據庫名稱.]數據表名稱;
?
???? 五、索引管理
?????? ????? 創建
???????????????????? 創建索引
??????????????????????????? > CREATE {INDEX | INDEXES} 索引名稱 ON [數據庫名稱.]數據表名稱(字段1,字段2,字段3 ...);
???????????????? 創建多列索引
??????????????????????????? > CREATE UNIQUE {INDEX | INDEXES} 索引名稱 ON [數據庫名稱.]數據表名稱;??????
???????????????????? 給表中指定的字段加入索引
??????????????????????????? > ALTER TABLE [數據庫名稱.]數據表名稱?ADD INDEX(‘字段名稱’);
?????? ????? 查詢
???????????????? 查看表中索引
??????????????????????????? > SHOW {INDEX | INDEXES} FROM [數據庫名稱.]數據表名稱;
、??? ????? 刪除:索引不用時,要立即刪除
?????? ?????????? 刪除索引:這可能會導致查詢操作降低
??????????????????????????? > DROP {INDEX | INDEXES} 索引名稱 ON [數據庫名稱.]數據表名稱;
?????????? 注意:INDEX為一個索引,INDEXES為多個索引
?
???? 六、鍵管理
?????????? 創建
???????????????? (1) 在數據表創建的時候定義主鍵
???????????????? (2) 給已有的表中指定的字段加入主鍵
??????????????????????????? ALTER TABLE [數據庫名稱.]數據表名稱 ADD {PRIMARY KEY | UNIQUE KEY}(‘字段名稱’);
?????????? 修改
?????? ????????????? 先刪除鍵,再添加鍵
?????????? 查詢
????? ????????????? 查詢主鍵
???????????????? ?????? > SHOW KEYS FROM [數據庫名稱.]數據表名稱 WHERE key_name='PRIMARY';
?????????? 刪除
???????????????????? 刪除鍵:不是自增長的才可以刪除,如果是自增長(有auto_increment屬性)必須先將表中其他屬性刪除
??????????????????????????? > ALTER TABLE [數據庫名稱.]數據表名稱 DROP {PRIMARY KEY | UNIQUE KEY};
?
???? 七、用戶管理
?????????? MySQL用戶和操作系統中的用戶不同;不能用MySQL用戶登錄操作系統,同樣也不能用操作系統用戶訪問MySQL
?????????? 用戶是公開的,大家都可以看到;而密碼只有某個授權使用用戶才能獲取
?????????? MySQL使用自己獨有的加密機制password()函數加密用戶密碼
?????????? MySQL默認管理員是root,和操作系統管理員名稱一致
?????????? MySQL用戶由'用戶名'@'主機'共同組成
????????????? ?????? MySQL用戶名:不能超過16個字符
???????????????? 主機
???????????????????? ????? 主機名:zhangdaifu
??????????????????????????? IP地址:10.0.0.1
???????????????????? ????? 網絡地址:10.0.0.1/255.0.0.0
?????????????????????????????????? 支持使用通配符表示:10.%.%._/255.0.0.0
????????????????????????????????????????? 如需表示通配符本身的含義則需要進行轉義\
?????????? 創建
?????? ?????????? 創建用戶帳號
??????????????????????????? > CREATE USER '用戶名'@'主機';
????????????? ????? 創建用戶賬號并設置其密碼
??????????????????????????? > CREATE USER '用戶名'@'主機' IDENTIFIED BY '密碼';
?
?????????? 修改
?????? ?????????? 修改用戶名
??????????????????????????? > UPDATE mysql.user SET USER='新用戶名稱' WHERE User='用戶名';
????????????? 查詢:MySQL用戶在mysql.user表中保存
???????????????? 查看所有用戶信息
??????????????????????????? > SELECT User,Host[, ...] FROM mysql.user;
???????????????? 查看指定用戶信息
??????????????????????????? > SELECT User,Host[, ...] FROM mysql.user WHERE User='用戶名';
?????????? 刪除
????????????? ????? 刪除用戶帳號
??????????????????????????? > DROP USER '用戶名'[@'主機' [, 用戶名@主機] ...] ;
?
???? 八、密碼管理
?????????? 創建
????????????? ????? 給用戶配置密碼
??????????????????????????? 為當前登錄用戶配置密碼
?????????????????????????????????? > SET PASSWORD = PASSWORD("用戶的密碼");
?????????? 修改
????????????? ????? 通過命令行修改
??????????????????????????? # mysqladmin -u'用戶名' -p'老密碼' password '新密碼'
???????????????????? 使用UPDATE直接編輯user表?
??????????????????????????? > UPDATE mysql.user SET PASSWORD=用戶的密碼 WHERE User='用戶名';
??????????????????????????? 刷新權限:flush privileges;
?????? ?????????? 通過SET PASSWORD語句修改
??????????????????????????? > SET PASSWORD FOR 用戶名=PASSWORD('用戶的密碼');
???????????????????? 參考:https://blog.csdn.net/qq_33285112/article/details/78982766
?????????? 查詢
???????????????????? > SELECT User,Password FROM mysql.user WHERE User='用戶名';
?????????? 刪除???
????????????? ????? 清除指定用戶密碼
??????????????????????????? > UPDATE mysql.user SET PASSWORD='' WHERE User='用戶名'
?
???? 九、權限管理
?????????? MySQL使用帳號的目的是為了“認證”
?????????? MySQL用戶信息存儲在以下表中
user | 存儲了用戶的賬號、全局權限及其他非權限字段 |
db | 數據庫級別的權限、庫級別的權限 |
host | 已被廢棄,已被整合進user表 |
tables_priv | 表級別的權限 |
columns_priv | 列(字段)級別的權限 |
procs_priv | 存儲過程和存儲函數相關的權限 |
proxies_priv | 代理用戶權限 |
???????????????????? MySQL服務器在啟動時會讀取這6張表,并在內存中生成“授權表”
?????????? 授權
???????????????????? 權限級別:管理權限、數據庫、數據表、字段、存儲例程
??????????????????????????? > GRANT permissions_type,... ON [object_type] { [數據庫名稱.]數據表名稱 | function_name | procedure_name } TO 'user_name'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION];
??????????????????????????? > flush privileges
?????????????????????????????????? 權限類型
????????????????????????????????????????? ALL:所有權限;不安全
??????????????????????????? database_name.table_name
?????????????????????????????????? ????? *.*:所有庫的所有表
??????????????????????????? ??????????數據庫.*:指定庫的所有表
?????? ??????????????????????????? 數據庫.數據表:指定庫的指定表
????????????? ????????????? ?????????? 數據庫.routine_name:指定庫上的存儲過程或存儲函數
?????????????????????????????????? [object_type]
???????????????????? ???????????????? TABLE:給數據表授權;默認
????????????????????????????????? FUNCTION:給存儲函數授權
???????????????????? ???????????????? PROCEDURE:給存儲過程授權
??????????????????????????? ????? [WITH GRANT OPTION]:將自己所擁有的權限轉權一個副本給其他用戶
?
?????????? 查詢
???????????????????? 查看當前用戶所擁有的權限
??????????????????????????? > SHOW GRANTS;
???????????????????? 查看指定用戶所擁有的權限
??????????????????????????? > SHOW GRANTS FOR '用戶名'@'權限類型';
?????????? 刪除
???????????????????? 回收授權
??????????????????????????? > REVOKE 權限類型[, ...] ON ?[數據庫名稱.]數據表名稱 FROM '用戶名'@'主機';
?????????? 注意:MariaDB服務進程啟動時,會讀取mysql庫的所有授權表至內存中
????????????? ?????? (1) GRANT或REVOKE命令等執行的權限操作會保存于表中,MariaDB此時一般會自動重讀授權表,權限修改會立即生效
???????????????????? (2) 其它方式實現的權限修改,要想生效,必須手動運行FLUSH PRIVILEGES命令方可
?
?????????? 檢查上一條語句是否正確執行(類似于Shell變量"$?")
???????????????????? > SHOW WARNINGS;
?
????? 常見錯誤
????????????? (1) ERROR 1046 (3D000): No database selected
???????????????????? 未選擇數據庫
????????????? (2) ERROR 1050 (42S01): Table 'table1' already exists
???????????????????? 表'table1'已存在
????????????? (3) ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
???????????????????? 登錄數據庫沒有輸入密碼
????????????? (4)?? ERROR 1317 (70100): Query execution was interrupted
???????????????????? 查詢執行被中斷
?
?????? 更多參考: http://www.bluestep.cc/demos/mysql/manual/index.htm
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。