首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 高頻操作速查手冊:庫表管理、DDL、DML、索引與權限核心語法大全

     編輯:MySQL 資料庫相關知識

引言

MySQL 日常運維開發中,90% 場景只涉及核心 20% 語法。本文彙總**庫表查看、DDL 結構變更、DML 數據操作、索引維護、權限管理**五大類高頻語法,附帶關鍵參數說明與最佳實踐註釋,作為桌面速查卡。

一、庫表元數據查看

-- 顯示所有數據庫
SHOW DATABASES;

-- 切換當前數據庫
USE db_name;

-- 顯示當前庫所有表
SHOW TABLES;

-- 顯示表結構(含字段、類型、默認值、索引、引擎、字符集)
SHOW CREATE TABLE tbl_name;
DESC tbl_name;          -- 簡略版
SHOW COLUMNS FROM tbl_name;

-- 顯示表索引
SHOW INDEX FROM tbl_name;

-- 顯示表狀態(行數、大小、引擎、自增值、碎片率等)
SHOW TABLE STATUS LIKE 'tbl_name';

二、DDL:結構定義與變更

2.1 表重命名

ALTER TABLE old_name RENAME TO new_name;
-- 或
RENAME TABLE old_name TO new_name, old2 TO new2;  -- 原子多表重命名

2.2 字段新增

-- 末尾新增
ALTER TABLE tbl_name ADD COLUMN col_name INT UNSIGNED NOT NULL DEFAULT 0;

-- 指定位置
ALTER TABLE tbl_name ADD COLUMN col_name VARCHAR(100) AFTER exist_col;
ALTER TABLE tbl_name ADD COLUMN col_name DATE FIRST;

2.3 字段刪除

ALTER TABLE tbl_name DROP COLUMN col_name;
-- 等同
ALTER TABLE tbl_name DROP col_name;

2.4 字段修改:名稱、類型、屬性、位置

-- CHANGE:可改名、改類型、改屬性、移動位置(需完整聲明新定義)
ALTER TABLE tbl_name CHANGE COLUMN old_col new_col BIGINT UNSIGNED NOT NULL DEFAULT 0 AFTER id;

-- MODIFY:僅改類型、屬性、位置(不改名,語法更簡潔)
ALTER TABLE tbl_name MODIFY COLUMN col_name VARCHAR(200) NOT NULL DEFAULT '';

2.5 索引操作

-- 普通索引
ALTER TABLE tbl_name ADD INDEX idx_name (col1, col2);

-- 唯一索引
ALTER TABLE tbl_name ADD UNIQUE INDEX uk_name (col1);

-- 主鍵
ALTER TABLE tbl_name ADD PRIMARY KEY (id);

-- 刪除索引
ALTER TABLE tbl_name DROP INDEX idx_name;
ALTER TABLE tbl_name DROP PRIMARY KEY;

2.6 刪除表 / 庫

DROP TABLE [IF EXISTS] tbl_name;
DROP TABLE [IF EXISTS] tbl1, tbl2;  -- 多表原子刪除
DROP DATABASE [IF EXISTS] db_name;

三、DML:數據增刪改查

3.1 插入

-- 顯式列名(推薦,防結構變更報錯)
INSERT INTO tbl_name (col1, col2, col3) VALUES ('val1', 100, NOW());

-- 批量插入(單條 SQL,效率最高)
INSERT INTO tbl_name (col1, col2) VALUES 
  ('a', 1), ('b', 2), ('c', 3);

-- 插入查詢結果
INSERT INTO target_tbl (col1, col2) SELECT col1, col2 FROM src_tbl WHERE ...;

-- 忽略重複鍵錯誤(MyISAM/InnoDB 唯一索引衝突時靜默跳過)
INSERT IGNORE INTO tbl_name (col1, col2) VALUES ('a', 1);

-- 衝突更新
INSERT INTO tbl_name (id, col1, col2) VALUES (1, 'a', 10)
  ON DUPLICATE KEY UPDATE col1='a', col2=10;

3.2 更新

UPDATE tbl_name SET col1='new_val', col2=col2+1 WHERE id = 100;
-- 多表更新
UPDATE t1 JOIN t2 ON t1.id = t2.t1_id SET t1.col = t2.col WHERE t1.status = 1;

3.3 刪除

DELETE FROM tbl_name WHERE id = 100;
-- 限制刪除行數(防誤刪全表)
DELETE FROM tbl_name WHERE status = 0 LIMIT 1000;
-- 多表刪除
DELETE t1 FROM t1 JOIN t2 ON t1.id = t2.t1_id WHERE t2.type = 'expired';

3.4 查詢

SELECT col1, col2 FROM tbl_name WHERE col1 = 'val' ORDER BY col2 DESC LIMIT 10;
-- 跨庫查詢
SELECT * FROM db1.tbl1 JOIN db2.tbl2 ON db1.tbl1.id = db2.tbl2.id;

四、權限管理

-- 創建用戶
CREATE USER 'app_user'@'10.0.%' IDENTIFIED BY 'strong_password';

-- 授權(按最小權限原則)
GRANT SELECT, INSERT, UPDATE, DELETE ON db_name.* TO 'app_user'@'10.0.%';
GRANT SELECT ON db_name.tbl_name TO 'readonly'@'%';

-- 刷新生效
FLUSH PRIVILEGES;

-- 查看權限
SHOW GRANTS FOR 'app_user'@'10.0.%';

-- 回收權限
REVOKE INSERT, UPDATE, DELETE ON db_name.* FROM 'app_user'@'10.0.%';

-- 刪除用戶
DROP USER 'app_user'@'10.0.%';

五、進階實用技巧

場景語法/技巧
查看表大小SELECT table_name, ROUND((data_length+index_length)/1024/1024,2) AS size_mb FROM information_schema.tables WHERE table_schema='db_name';
查看自增值SHOW TABLE STATUS LIKE 'tbl_name'; → Auto_increment
重置自增值ALTER TABLE tbl_name AUTO_INCREMENT = 1000;
複製表結構CREATE TABLE new_tbl LIKE old_tbl;
複製表結構+數據CREATE TABLE new_tbl AS SELECT * FROM old_tbl; (無索引/約束)
清空表(極快,不記錄 Binlog 行)TRUNCATE TABLE tbl_name;
優化表(碎片整理、統計更新)OPTIMIZE TABLE tbl_name; / ANALYZE TABLE tbl_name;
檢查/修復表(MyISAM)CHECK TABLE tbl_name; / REPAIR TABLE tbl_name;

六、總結

掌握核心 50 條高頻語法,覆蓋 95% 日常操作。**DDL 變更必先測試環境驗證、生產低峰執行、備份可回滾**;**DML 批量操作必加 LIMIT、分批提交、監控主從延遲**;**權限遵循最小授予、定期審計**。將本手冊收藏備查,提升操作確定性與效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved