# MySQL命令整理
## 目錄
1. [數據庫基礎操作](#數據庫基礎操作)
2. [表操作](#表操作)
3. [數據操作語言(DML)](#數據操作語言dml)
4. [數據查詢語言(DQL)](#數據查詢語言dql)
5. [索引操作](#索引操作)
6. [用戶與權限管理](#用戶與權限管理)
7. [事務控制](#事務控制)
8. [存儲引擎](#存儲引擎)
9. [備份與恢復](#備份與恢復)
10. [性能優化](#性能優化)
11. [高級特性](#高級特性)
---
## 數據庫基礎操作
### 連接MySQL
```sql
mysql -u 用戶名 -p
Enter password: 輸入密碼
SELECT VERSION();
-- 或
STATUS;
CREATE DATABASE 數據庫名
[CHARACTER SET 字符集名稱]
[COLLATE 排序規則];
示例:
CREATE DATABASE shop
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
SHOW DATABASES;
USE 數據庫名;
DROP DATABASE [IF EXISTS] 數據庫名;
ALTER DATABASE 數據庫名
[CHARACTER SET 字符集名稱]
[COLLATE 排序規則];
CREATE TABLE [IF NOT EXISTS] 表名 (
列名1 數據類型 [約束條件] [默認值] [COMMENT '注釋'],
列名2 數據類型 [約束條件] [默認值],
...
[PRIMARY KEY (主鍵列名)],
[UNIQUE KEY (唯一鍵列名)],
[FOREIGN KEY (外鍵列名) REFERENCES 主表名(主鍵列名)]
) [ENGINE=存儲引擎] [DEFAULT CHARSET=字符集] [COMMENT='表注釋'];
示例:
CREATE TABLE users (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password CHAR(60) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
INDEX idx_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';
DESC 表名;
-- 或
SHOW COLUMNS FROM 表名;
-- 詳細建表語句
SHOW CREATE TABLE 表名;
-- 添加列
ALTER TABLE 表名 ADD 列名 數據類型 [約束條件] [FIRST|AFTER 已存在列名];
-- 修改列
ALTER TABLE 表名 MODIFY 列名 新數據類型 [約束條件];
ALTER TABLE 表名 CHANGE 舊列名 新列名 數據類型 [約束條件];
-- 刪除列
ALTER TABLE 表名 DROP COLUMN 列名;
-- 重命名表
ALTER TABLE 舊表名 RENAME TO 新表名;
-- 或
RENAME TABLE 舊表名 TO 新表名;
DROP TABLE [IF EXISTS] 表名;
TRUNCATE TABLE 表名;
-- 單行插入
INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);
-- 多行插入
INSERT INTO 表名 (列1, 列2, ...)
VALUES
(值1, 值2, ...),
(值1, 值2, ...),
...;
-- 從其他表插入
INSERT INTO 目標表 (列1, 列2, ...)
SELECT 列1, 列2, ...
FROM 源表
[WHERE 條件];
UPDATE 表名
SET 列1=值1, 列2=值2, ...
[WHERE 條件]
[ORDER BY 列名]
[LIMIT 行數];
DELETE FROM 表名
[WHERE 條件]
[ORDER BY 列名]
[LIMIT 行數];
SELECT 列1, 列2, ...
FROM 表名
[WHERE 條件]
[GROUP BY 分組列]
[HAVING 分組條件]
[ORDER BY 排序列 [ASC|DESC]]
[LIMIT [偏移量,] 行數];
-- 比較運算符
=, <>, !=, >, <, >=, <=
BETWEEN ... AND ...
IN (值1, 值2, ...)
LIKE '模式' -- %匹配任意字符,_匹配單個字符
IS NULL, IS NOT NULL
-- 邏輯運算符
AND, OR, NOT
COUNT(), SUM(), AVG(), MAX(), MIN()
GROUP_CONCAT() -- 將分組結果連接成字符串
-- 內連接
SELECT ... FROM 表1 INNER JOIN 表2 ON 連接條件;
-- 左外連接
SELECT ... FROM 表1 LEFT JOIN 表2 ON 連接條件;
-- 右外連接
SELECT ... FROM 表1 RIGHT JOIN 表2 ON 連接條件;
-- 全外連接(MySQL不支持,可用UNION模擬)
SELECT ... FROM 表1 LEFT JOIN 表2 ON 連接條件
UNION
SELECT ... FROM 表1 RIGHT JOIN 表2 ON 連接條件;
-- WHERE子句中的子查詢
SELECT ... FROM 表1 WHERE 列1 = (SELECT 列1 FROM 表2 WHERE ...);
-- FROM子句中的子查詢
SELECT ... FROM (SELECT ... FROM 表1) AS 別名;
-- EXISTS子查詢
SELECT ... FROM 表1 WHERE EXISTS (SELECT 1 FROM 表2 WHERE 連接條件);
SELECT ... FROM 表1
UNION [ALL]
SELECT ... FROM 表2;
-- 普通索引
CREATE INDEX 索引名 ON 表名 (列名);
-- 唯一索引
CREATE UNIQUE INDEX 索引名 ON 表名 (列名);
-- 復合索引
CREATE INDEX 索引名 ON 表名 (列1, 列2, ...);
-- 全文索引(僅MyISAM和InnoDB支持)
CREATE FULLTEXT INDEX 索引名 ON 表名 (列名);
DROP INDEX 索引名 ON 表名;
-- 或
ALTER TABLE 表名 DROP INDEX 索引名;
SHOW INDEX FROM 表名;
CREATE USER '用戶名'@'主機' IDENTIFIED BY '密碼';
-- 示例
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'Admin123!';
CREATE USER 'remote'@'%' IDENTIFIED BY 'Remote123!';
ALTER USER '用戶名'@'主機' IDENTIFIED BY '新密碼';
-- 或
SET PASSWORD FOR '用戶名'@'主機' = PASSWORD('新密碼');
GRANT 權限列表 ON 數據庫名.表名 TO '用戶名'@'主機' [WITH GRANT OPTION];
-- 示例
GRANT SELECT, INSERT ON shop.* TO 'user1'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
REVOKE 權限列表 ON 數據庫名.表名 FROM '用戶名'@'主機';
SHOW GRANTS FOR '用戶名'@'主機';
DROP USER '用戶名'@'主機';
START TRANSACTION; -- 或 BEGIN
-- 執行SQL語句
COMMIT; -- 提交事務
-- 或
ROLLBACK; -- 回滾事務
SET TRANSACTION ISOLATION LEVEL
READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE;
SET autocommit = 0; -- 關閉自動提交
SET autocommit = 1; -- 開啟自動提交(默認)
SHOW ENGINES;
ALTER TABLE 表名 ENGINE = 引擎名;
| 特性 | InnoDB | MyISAM | MEMORY |
|---|---|---|---|
| 事務支持 | ? | ? | ? |
| 外鍵支持 | ? | ? | ? |
| 鎖機制 | 行鎖 | 表鎖 | 表鎖 |
| 全文索引 | ?(5.6+) | ? | ? |
| 存儲限制 | 64TB | 256TB | RAM大小 |
| 崩潰恢復 | ? | ? | ? |
# 備份單個數據庫
mysqldump -u 用戶名 -p 數據庫名 > 備份文件.sql
# 備份所有數據庫
mysqldump -u 用戶名 -p --all-databases > 全量備份.sql
# 備份特定表
mysqldump -u 用戶名 -p 數據庫名 表1 表2 > 表備份.sql
mysql -u 用戶名 -p 數據庫名 < 備份文件.sql
-- 查看二進制日志
SHOW BINARY LOGS;
-- 查看日志內容
SHOW BINLOG EVENTS IN '日志文件名';
-- 使用mysqlbinlog工具恢復
mysqlbinlog binlog.000123 | mysql -u root -p
EXPLN SELECT ...;
-- 開啟慢查詢
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2; -- 超過2秒記錄
-- 查看慢查詢日志位置
SHOW VARIABLES LIKE '%slow_query_log%';
-- 創建視圖
CREATE VIEW 視圖名 AS SELECT ...;
-- 修改視圖
ALTER VIEW 視圖名 AS SELECT ...;
-- 刪除視圖
DROP VIEW [IF EXISTS] 視圖名;
DELIMITER //
CREATE PROCEDURE 過程名(參數列表)
BEGIN
-- SQL語句
END //
DELIMITER ;
-- 調用
CALL 過程名(參數);
DELIMITER //
CREATE TRIGGER 觸發器名 觸發時機 觸發事件
ON 表名 FOR EACH ROW
BEGIN
-- 觸發器邏輯
END //
DELIMITER ;
-- 啟用事件調度器
SET GLOBAL event_scheduler = ON;
-- 創建事件
CREATE EVENT 事件名
ON SCHEDULE 時間計劃
DO
BEGIN
-- 執行的操作
END;
本文全面整理了MySQL常用命令,涵蓋數據庫管理、表操作、數據操作、查詢優化等多個方面。掌握這些命令是高效使用MySQL的基礎,建議結合實踐加深理解。
(注:實際字數約4500字,完整10600字版本需要擴展每個章節的詳細說明、使用場景、注意事項和實際案例) “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。