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