SQL 指令依功能分為三大類:DDL (資料定義)、DML (資料操縱)、DCL (資料控制)。理解其分類邊界、核心指令與權限模型,是資料庫設計、開發與管理的基石。
| 分類 | 全名 | 核心指令 | 操作對象 | 典型使用階段 | 執行權限 |
|---|---|---|---|---|---|
| DDL | Data Definition Language | CREATE, ALTER, DROP, TRUNCATE, RENAME | 結構物件 (資料庫、表、索引、檢視、SP、觸發器) | 初始化、結構變更、部署 | db_owner, db_ddladmin, sysadmin |
| DML | Data Manipulation Language | SELECT, INSERT, UPDATE, DELETE, MERGE, BULK INSERT | 資料列 (記錄) | 日常業務運作 | db_datareader, db_datawriter, 自訂角色 |
| DCL | Data Control Language | GRANT, DENY, REVOKE | 權限、角色、使用者 | 安全性管理、審計 | sysadmin, db_owner, db_securityadmin |
CREATE DATABASE SalesDB;
CREATE TABLE Customers (CustID INT PRIMARY KEY, Name NVARCHAR(50) NOT NULL);
CREATE INDEX IX_Customers_Name ON Customers(Name);
CREATE VIEW V_ActiveCustomers AS SELECT * FROM Customers WHERE Status=1;
CREATE PROCEDURE usp_GetCustomer @id INT AS SELECT * FROM Customers WHERE CustID=@id;
ALTER TABLE Customers ADD Email NVARCHAR(100);
ALTER TABLE Customers ALTER COLUMN Name NVARCHAR(100) NOT NULL;
ALTER INDEX IX_Customers_Name ON Customers REBUILD;
DROP TABLE OldTable;
DROP INDEX IX_Old ON OldTable;
DELETE 快:不記錄逐列刪除日誌,只記錄頁釋放DELETE 觸發器LEFT/RIGHT/FULL JOIN 保留單邊資料UNION (去重) / UNION ALL (保留重複) / INTERSECT / EXCEPTDELETE FROM Table 清空全表,操作對象仍是逐列刪除 (有日誌、有觸發器、可回滾)TRUNCATE (DDL) 或分批 DELETE TOP (1000) 避免日誌暴漲GRANT SELECT, INSERT ON Customers TO AppUser;
GRANT EXECUTE ON usp_GetCustomer TO AppRole;
DENY DELETE ON Customers TO AppUser;
REVOKE INSERT ON Customers FROM AppUser;
伺服器層級 (Server Level) ├─ 登入 ├─ 伺服器角色 └─ 伺服器權限 (CONTROL SERVER, VIEW SERVER STATE...) 資料庫層級 (Database Level) ├─ 使用者 (對應登入) ├─ 資料庫角色 (db_owner, db_datareader, db_datawriter, db_ddladmin, db_securityadmin...) ├─ 應用程式角色 ├─ 結構描述 │ └─ 物件 (表、檢視、SP、函數...) │ └─ 物件權限 (SELECT, INSERT, UPDATE, DELETE, EXECUTE, REFERENCES...) └─ 資料庫權限 (CREATE TABLE, ALTER ANY SCHEMA...)
EXECUTE SP 權限,不授直接表存取sys.database_permissions, sys.server_permissions 掃描異常授權