索引是資料庫中資料的「目錄」,獨立於資料本身存在。主要目的在於提高查詢效率。索引通常採用 B+Tree 結構,資料變更時需同步維護索引結構。
CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type] ON tbl_name (index_col_name,...) [index_option]
-- 方式一:CREATE INDEX CREATE INDEX idx_v ON vc(v); -- 方式二:ALTER TABLE ALTER TABLE vc ADD KEY idx_c (c);
SHOW INDEX FROM vc; SHOW CREATE TABLE vc;
在 MySQL 中,INDEX 與 KEY 同義,皆代表索引。
將兩張表透過特定欄位關聯,確保參照完整性。例如:訂單表的 userid 必須存在於用戶表中。
ALTER TABLE `order` ADD CONSTRAINT fk_uid FOREIGN KEY (userid) REFERENCES `user`(userid) ON DELETE RESTRICT ON UPDATE CASCADE;
| 模式 | 說明 |
|---|---|
| RESTRICT / NO ACTION | 限制父表操作,若子表有關聯記錄則拒絕 |
| CASCADE | 級聯操作,父表更新/刪除時同步子表 |
| SET NULL | 父表操作時,子表關聯欄位設為 NULL |
SET FOREIGN_KEY_CHECKS = 0; -- 關閉 -- 執行大量資料匯入/結構變更 SET FOREIGN_KEY_CHECKS = 1; -- 開啟
CREATE VIEW order_view AS SELECT * FROM `order` WHERE status = 1;
綁定在表上的特殊程式,當發生 INSERT/UPDATE/DELETE 事件時自動執行。每張表每種事件僅能定義一個觸發器。
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON tbl_name FOR EACH ROW
trigger_body
DELIMITER // 變更結束符號NEW 與 OLD 存取變更前後的資料儲存在資料庫端的 SQL 程式模組,支援流程控制、變數、參數傳遞。
CREATE PROCEDURE sp_name ([IN|OUT|INOUT] param_name type, ...) [CHARACTERISTIC ...] routine_body
IN:輸入參數OUT:輸出參數INOUT:輸入輸出參數SET @total = 5, @res = 0; CALL proc_test1(@total, @res); SELECT @res;
RETURN 回傳值SELECT func(val)CREATE FUNCTION func_name (param_name type, ...) RETURNS return_type routine_body
CREATE ROUTINE 權限ALTER ROUTINEEXECUTE 權限DELIMITER、NEW/OLDDECLARE、參數傳遞、流程控制、三步驟呼叫SELECT 調用