本文為進階操作系列上篇,聚焦 表結構/數據復制、索引全生命周期管理、視圖創建與使用、以及補充實用內置函數,所有示例基於 InnoDB 引擎。
-- 1. 僅復制結構(含索引、約束、引擎屬性)
CREATE TABLE t2 LIKE t1;
-- 2. 復制數據——建議顯式指定列,避免隱式順序依賴
INSERT INTO t3(name) SELECT name FROM t1; -- 推薦
-- INSERT INTO t2 SELECT * FROM t1; -- 不推薦:結構一致時才安全
| 操作 | 推薦語法 (ALTER TABLE) | 獨立語法 (CREATE/DROP INDEX) |
|---|---|---|
| 創建普通索引 | ALTER TABLE t ADD INDEX idx_name (col_list); | CREATE INDEX idx_name ON t(col_list); |
| 創建唯一索引 | ALTER TABLE t ADD UNIQUE [idx_name] (col_list); | CREATE UNIQUE INDEX idx_name ON t(col_list); |
| 創建主鍵 | ALTER TABLE t ADD PRIMARY KEY (col_list); | — |
| 刪除普通/唯一索引 | ALTER TABLE t DROP INDEX idx_name; | DROP INDEX idx_name ON t; |
| 刪除主鍵 | ALTER TABLE t DROP PRIMARY KEY; | — |
理由:ALTER TABLE 統一入口,便於工具鏈解析、版本控制、回滾腳本生成;CREATE/DROP INDEX 為歷史兼容保留。
SHOW INDEX FROM t1\G
ALTER TABLE t MODIFY id INT NOT NULL;
-- 創建
CREATE VIEW v_high_value AS
SELECT * FROM orders WHERE amount > 1000;
-- 查看有哪些視圖
SHOW TABLES; -- 視圖與表混合顯示
-- 查詢視圖
SELECT * FROM v_high_value;
-- 刪除視圖
DROP VIEW v_high_value;
本質:視圖是儲存的 SELECT 語句,查詢時展開重寫,不存儲物理數據(物化視圖需自行實現)。
| 分類 | 函數 | 說明與示例 |
|---|---|---|
| 字符串 | LCASE/UCASE | 同 LOWER/UPPER |
LENGTH(str) | 返回字節長度(非字符數) | |
REPEAT(str, n) | 重複 n 次:SELECT REPEAT('a',3); -- aaa | |
SPACE(n) | 生成 n 個空格 | |
| 數學 | BIN(n) | 十進制轉二進制字串 |
CEILING(n) | 同 CEIL,向上取整 | |
SQRT(n) | 開平方 | |
MAX/MIN(col) | 聚合函數,配合 GROUP BY | |
RAND() | 隨機排序技巧:SELECT * FROM t ORDER BY RAND(); | |
| 日期 | DATEDIFF(d1, d2) | 天數差(d1-d2),可為負 |
mysql> ? lcase
mysql> HELP 'datediff'
避坑提醒:
CREATE VIEW 若引用的基表結構變更(如列刪除),視圖查詢將報錯,需同步維護。ORDER BY RAND() 在大表極慢,生產環境禁用,參考本專欄「RAND() 優化」專題。