SQL英语术语手册,汇集SQL核心概念与现代数据库技术要点,覆盖SQL:基础术语、DDL、DML、DQL、函数、存储过程、事务、设计、高可用、优化、安全、跨库差异等12大技术领域的核心术语,可作为全栈工程师、DBA、数据分析师及SQL教学的参考指南。
一、SQL基础术语
| 英文术语 | 中文释义 | 技术细节 | 
|---|
| SQL |  |  | 
| Database |  |  | 
| Table |  |  | 
| Row/Record |  |  | 
| Column/Field |  |  | 
| Schema |  |  | 
| Data Type |  |  | 
| Primary Key |  |  | 
| Foreign Key |  |  | 
| Index |  |  | 
| Constraint |  |  | 
| View |  |  | 
| Materialized View |  |  | 
| Cursor |  |  | 
| ACID Properties |  |  | 
| NULL |  |  | 
| DBMS/RDBMS |  | 如MySQL, Oracle, SQL Server | 
| Query |  |  | 
| Statement |  |  | 
| Transaction |  |  | 
| Tuple |  |  | 
| Attribute |  |  | 
| Catalog |  |  | 
| Domain |  |  | 
| Data Dictionary |  |  | 
| Instance |  |  | 
| Connection |  |  | 
| Cursor Sensitivity |  | 感知底层数据变化(SENSITIVE/INSENSITIVE) | 
| Savepoint |  |  | 
| Relational Algebra |  |  | 
| Cardinality |  |  | 
| Selectivity |  |  | 
| Predicate |  |  | 
| Projection |  |  | 
| Cartesian Product |  |  | 
| Degree |  |  | 
二、数据定义语言(DDL)
| 命令 | 功能 | 语法示例 | 
|---|
| CREATE DATABASE |  | CREATE DATABASE SalesDB CHARSET=utf8mb4; | 
| CREATE TABLE |  | CREATE TABLE Users (ID INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(50) NOT NULL); | 
| CREATE INDEX |  | CREATE INDEX idx_email ON Users(Email) USING HASH; | 
| CREATE VIEW |  | CREATE VIEW vw_active AS SELECT id,name FROM Users WHERE active=1; | 
| ALTER TABLE |  | ALTER TABLE Users ADD COLUMN birthdate DATE AFTER name; | 
| DROP TABLE |  | DROP TABLE IF EXISTS TempData; | 
| DROP DATABASE |  | DROP DATABASE ArchiveDB CASCADE; | 
| TRUNCATE TABLE |  |  | 
| RENAME TABLE |  | MySQL: RENAME TABLE old TO new; | 
| COMMENT |  | PostgreSQL: COMMENT ON COLUMN Users.name IS '用户全名'; | 
| CHECK Constraint |  | CREATE TABLE Orders (Amount DECIMAL CHECK (Amount > 0)); | 
| DEFAULT |  | CREATE TABLE Logs (ctime DATETIME DEFAULT CURRENT_TIMESTAMP); | 
| AUTO_INCREMENT |  |  | 
| IDENTITY |  |  | 
| SEQUENCE |  | Oracle: CREATE SEQUENCE user_seq START WITH 1000 INCREMENT BY 2; | 
| CREATE TYPE |  | PostgreSQL: CREATE TYPE currency AS (amount DECIMAL, unit VARCHAR(3)); | 
| ALTER INDEX |  | SQL Server: ALTER INDEX idx_name ON Users REORGANIZE; | 
| PARTITION BY |  | MySQL: CREATE TABLE Logs (...) PARTITION BY RANGE(YEAR(log_date))(...); | 
| TABLESPACE |  |  | 
| CREATE SYNONYM |  | Oracle: CREATE SYNONYM emp FOR hr.employees; | 
| STORAGE PARAMETER |  | PostgreSQL: CREATE TABLE bigtable (...) WITH (fillfactor=70); | 
| VIRTUAL COLUMN |  | Oracle: CREATE TABLE Orders (total DECIMAL GENERATED ALWAYS AS (qty*price)); | 
| GLOBAL TEMPORARY TABLE |  |  | 
| EXTERNAL TABLE |  |  | 
三、数据操作语言(DML)
| 命令 | 功能 | 语法示例 | 
|---|
| INSERT INTO |  | INSERT INTO Users VALUES (DEFAULT, 'Alice', CURDATE()); | 
| UPDATE |  | UPDATE Products SET price=price*0.9 WHERE stock>100; | 
| DELETE |  | DELETE FROM Logs WHERE create_time < '2023-01-01'; | 
| MERGE |  | Oracle: 
 MERGE INTO target t USING source s ON (t.id=s.id)
 WHEN MATCHED THEN UPDATE SET t.val=s.val
 WHEN NOT MATCHED THEN INSERT VALUES (s.id,s.val); | 
| UPSERT |  | PostgreSQL: INSERT INTO Users(id,name) VALUES (1,'Bob') ON CONFLICT (id) DO UPDATE SET name=EXCLUDED.name; | 
| OUTPUT Clause |  | SQL Server: DELETE FROM Users OUTPUT deleted.id WHERE id=1; | 
| BULK INSERT |  | SQL Server: BULK INSERT Employees FROM 'data.csv' WITH (FIELDTERMINATOR=','); | 
| INSERT IGNORE |  | MySQL: INSERT IGNORE INTO UniqueIDs VALUES (1001); | 
| RETURNING |  | PostgreSQL: UPDATE Tasks SET status='done' RETURNING task_id; | 
| COPY FROM |  | PostgreSQL: COPY users FROM '/data/users.csv' WITH CSV HEADER; | 
| LOAD DATA INFILE |  | MySQL: LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE logs; | 
| SELECT INTO |  | SQL Server: SELECT * INTO NewTable FROM OldTable WHERE condition; | 
| INSERT EXEC |  | SQL Server: INSERT INTO Results EXEC spGetReport; | 
| FOR UPDATE |  | SELECT * FROM Accounts WHERE id=100 FOR UPDATE; | 
| WAIT |  | Oracle: SELECT * FROM Inventory WHERE qty>0 FOR UPDATE WAIT 5; | 
| SKIP LOCKED |  | Oracle: SELECT * FROM Jobs FOR UPDATE SKIP LOCKED; | 
| OUTER APPLY |  | SQL Server: SELECT u.name, o.total FROM Users u OUTER APPLY dbo.GetOrders(u.id) o; | 
| CONNECT BY |  |  | 
四、数据查询语言(DQL)
1. 核心子句
| 关键字 | 用途 | 示例 | 
|---|
| SELECT |  | SELECT name, COUNT(*) FROM ... | 
| FROM |  | FROM Employees e JOIN Departments d | 
| WHERE |  | WHERE salary > 5000 AND dept_id IN (10,20) | 
| GROUP BY |  | GROUP BY department HAVING SUM(sales)>100000 | 
| HAVING |  | HAVING AVG(score) >= 80 | 
| ORDER BY |  | ORDER BY hire_date DESC, last_name ASC | 
| LIMIT/OFFSET |  |  | 
| FETCH FIRST |  | SQL:2011: FETCH FIRST 10 ROWS ONLY | 
| DISTINCT |  | SELECT DISTINCT country FROM Customers | 
| TOP |  | SQL Server: SELECT TOP 10 PERCENT * FROM ... | 
| TABLESAMPLE |  | SELECT * FROM Sales TABLESAMPLE BERNOULLI (5) | 
| WITH TIES |  | SQL Server: SELECT TOP 5 WITH TIES * ORDER BY price | 
| PIVOT |  | SQL Server: SELECT * FROM (SELECT ...) src PIVOT (SUM(amount) FOR quarter IN ([Q1],[Q2])) pvt | 
| UNPIVOT |  | SQL Server: UNPIVOT (sales FOR quarter IN (Q1,Q2,Q3)) unpvt | 
| FOR JSON |  | SQL Server: SELECT * FROM Products FOR JSON PATH | 
2. 连接操作
| 连接类型 | 效果 | 语法 | 
|---|
| INNER JOIN |  | FROM A INNER JOIN B ON A.id=B.ref_id | 
| LEFT JOIN |  | FROM Users LEFT JOIN Orders ON Users.id=Orders.user_id | 
| RIGHT JOIN |  | FROM Orders RIGHT JOIN Products ON Orders.pid=Products.id | 
| FULL OUTER JOIN |  | Oracle: SELECT * FROM A FULL JOIN B ON A.id=B.id | 
| CROSS JOIN |  | FROM Colors CROSS JOIN Sizes | 
| SELF JOIN |  | SELECT e1.name, e2.name FROM Employees e1 JOIN Employees e2 ON e1.manager=e2.id | 
| NATURAL JOIN |  |  | 
| LATERAL JOIN |  | PostgreSQL: SELECT u.name, o.total FROM Users u, LATERAL (SELECT ... WHERE user_id=u.id) o | 
| NON-EQUI JOIN |  | FROM A JOIN B ON A.value BETWEEN B.start AND B.end | 
| SEMI JOIN |  |  | 
| ANTI JOIN |  |  | 
| AS OF TIMESTAMP |  | Oracle: SELECT * FROM Orders AS OF TIMESTAMP SYSTIMESTAMP - INTERVAL '30' MINUTE | 
| MATCH_RECOGNIZE |  | Oracle: SELECT * FROM Logs MATCH_RECOGNIZE (...) PATTERN (A B+) | 
| WITH ORDINALITY |  | PostgreSQL: SELECT * FROM unnest(array['a','b']) WITH ORDINALITY | 
| Temporal Table |  | SQL Server: FROM Orders FOR SYSTEM_TIME AS OF '2023-01-01' | 
3. 高级查询
| 操作符/函数 | 功能 | 示例 | 
|---|
| UNION |  | SELECT city FROM Customers UNION SELECT city FROM Suppliers | 
| UNION ALL |  | SELECT ... UNION ALL SELECT ... | 
| EXCEPT/MINUS |  | SELECT id FROM A EXCEPT SELECT id FROM B | 
| INTERSECT |  | SELECT id FROM FullTime INTERSECT SELECT id FROM Active | 
| EXISTS |  | SELECT name FROM Customers c WHERE EXISTS (SELECT 1 FROM Orders o WHERE o.cust_id=c.id) | 
| CASE WHEN |  | SELECT name, CASE WHEN age<18 THEN 'Child' ELSE 'Adult' END | 
| CTE (WITH) |  | WITH RegionalSales AS (SELECT region, SUM(sales) total FROM ...) | 
| Recursive CTE |  | WITH RECURSIVE OrgTree AS (SELECT id,name FROM root UNION ALL ...) | 
| Window Functions |  | SUM(revenue) OVER (PARTITION BY dept ORDER BY date) | 
| LEAD/LAG |  | LEAD(price,1) OVER (ORDER BY date) | 
| FIRST_VALUE |  | FIRST_VALUE(name) OVER (PARTITION BY dept ORDER BY salary DESC) | 
| RANK/DENSE_RANK |  | RANK() OVER (PARTITION BY class ORDER BY score DESC) | 
| NTILE |  | NTILE(4) OVER (ORDER BY salary) AS quartile | 
| ROW_NUMBER |  | ROW_NUMBER() OVER (PARTITION BY dept ORDER BY id) | 
| PERCENT_RANK |  | PERCENT_RANK() OVER (ORDER BY sales) | 
| CUME_DIST |  | CUME_DIST() OVER (ORDER BY price) | 
| AGGREGATE FILTER |  | PostgreSQL: SUM(sales) FILTER (WHERE region='West') | 
| GROUPING SETS |  | GROUP BY GROUPING SETS ((a,b), (a), ()) | 
| ROLLUP |  | GROUP BY ROLLUP (year, quarter) | 
| CUBE |  | GROUP BY CUBE (country, product) | 
| PIVOT/UNPIVOT |  | Oracle: SELECT * FROM (SELECT ...) PIVOT (SUM(sales) FOR region IN ('East','West')) | 
| MODEL |  | Oracle: SELECT ... MODEL DIMENSION BY (...) MEASURES (...) RULES (...)  | 
| FLASHBACK QUERY |  | Oracle: SELECT * FROM table AS OF TIMESTAMP ... | 
| XMLTABLE |  | SELECT * FROM XMLTABLE('//book' PASSING xml_doc COLUMNS title VARCHAR(100) PATH 'title') | 
| JSON_TABLE |  | SELECT * FROM JSON_TABLE(json_doc, '$.items[*]' COLUMNS (id PATH '$.id', name PATH '$.name')) | 
| FULLTEXT SEARCH |  | MySQL: WHERE MATCH(title,content) AGAINST ('database' IN NATURAL LANGUAGE MODE) | 
| SOUNDEX |  | SQL Server: WHERE SOUNDEX(name)=SOUNDEX('Smith') | 
| SIMILAR TO |  | PostgreSQL: WHERE name SIMILAR TO 'J(oh)?n' | 
| REGEXP_SUBSTR |  | Oracle: REGEXP_SUBSTR(phone, '\d{3}-\d{4}') | 
| GEOMETRY |  | PostGIS: WHERE ST_Distance(point1, point2) < 1000 | 
| CONTAINS |  | SQL Server: WHERE geometry_col.STContains(@point)=1 | 
| GEOGRAPHY |  | SQL Server: geography::Point(47.6, -122.3, 4326) | 
| TOP N per Group |  | SELECT * FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY dept ORDER BY salary DESC) rn FROM emp) WHERE rn<=3 | 
| Hierarchical Query |  | Oracle: SELECT LEVEL, name FROM emp START WITH mgr_id IS NULL CONNECT BY PRIOR id=mgr_id | 
| GENERATE_SERIES |  | PostgreSQL: SELECT * FROM generate_series(1,10) | 
| MATCH_RECOGNIZE |  |  | 
| TABLESAMPLE |  | SELECT * FROM large_table TABLESAMPLE SYSTEM(1) | 
| WITH ORDINALITY |  | PostgreSQL: SELECT * FROM json_array_elements('[1,2]') WITH ORDINALITY | 
| INTERPOLATION |  | Oracle: PERIOD FOR ... WITH INTERPOLATE | 
| UNNEST |  | PostgreSQL: SELECT * FROM unnest(ARRAY[1,2]) | 
| LATERAL Subquery |  | SELECT u.name, p.product FROM Users u, LATERAL (SELECT product FROM Purchases WHERE user_id=u.id LIMIT 3) p | 
| ILIKE |  | PostgreSQL: WHERE name ILIKE 'john%' | 
五、函数与操作符
1. 聚合函数
| 函数 | 功能 | 示例 | 
|---|
| COUNT() |  | COUNT(*) | 
| SUM() |  | SUM(quantity * price) | 
| AVG() |  | AVG(DISTINCT score) | 
| MIN() |  | MIN(create_time) | 
| MAX() |  | MAX(temperature) | 
| GROUP_CONCAT() |  | MySQL: GROUP_CONCAT(name ORDER BY id SEPARATOR ',') | 
| STRING_AGG() |  | SQL Server: STRING_AGG(name, ',') WITHIN GROUP (ORDER BY id) | 
| ARRAY_AGG() |  | PostgreSQL: ARRAY_AGG(email) | 
| JSON_ARRAYAGG() |  | MySQL: JSON_ARRAYAGG(JSON_OBJECT('id',id,'name',name)) | 
| JSON_OBJECTAGG() |  | MySQL: JSON_OBJECTAGG(dept_name: COUNT(*)) | 
| CORR() |  | CORR(x, y) | 
| STDDEV() |  | STDDEV_POP(salary) | 
| VAR() |  | VAR_SAMP(price) | 
| BIT_AND() |  | MySQL: BIT_AND(permissions) | 
| APPROX_COUNT_DISTINCT() |  | SQL Server: APPROX_COUNT_DISTINCT(user_id) | 
2. 标量函数
| 类型 | 函数 | 功能 | 
|---|
| 字符串 | CONCAT() | 连接: CONCAT(first, ' ', last) | 
| 
 | SUBSTRING() |  | 
| 
 | LEFT()/RIGHT() |  | 
| 
 | UPPER()/LOWER() |  | 
| 
 | TRIM() | 去除空格: TRIM(LEADING '0' FROM phone) | 
| 
 | LENGTH()/CHAR_LENGTH() |  | 
| 
 | REPLACE() | 替换: REPLACE(title, 'Old', 'New') | 
| 
 | REVERSE() |  | 
| 
 | LPAD()/RPAD() | 填充: LPAD(account, 10, '0') | 
| 
 | INSTR() |  | 
| 
 | FORMAT() | 格式化: FORMAT(12345.678, 'C') | 
| 
 | SOUNDEX() |  | 
| 数值 | ROUND() |  | 
| 
 | TRUNCATE() |  | 
| 
 | ABS() |  | 
| 
 | CEIL()/FLOOR() |  | 
| 
 | MOD() |  | 
| 
 | POWER()/SQRT() |  | 
| 
 | EXP()/LOG() |  | 
| 
 | RAND() |  | 
| 
 | PI() |  | 
| 
 | GREATEST()/LEAST() |  | 
| 日期 | NOW()/CURRENT_TIMESTAMP |  | 
| 
 | CURDATE()/CURTIME() |  | 
| 
 | DATE_ADD()/DATE_SUB() | 日期加减: DATE_ADD(hire_date, INTERVAL 1 YEAR) | 
| 
 | DATEDIFF() | 日期差: DATEDIFF(day, start, end) | 
| 
 | DATEPART()/EXTRACT() | 提取部分: EXTRACT(YEAR FROM birthdate) | 
| 
 | DATE_FORMAT()/TO_CHAR() |  | 
| 
 | STR_TO_DATE() |  | 
| 
 | LAST_DAY() |  | 
| 
 | TIMESTAMPDIFF() |  | 
| 条件 | COALESCE() | 首非空值: COALESCE(middle_name, '') | 
| 
 | NULLIF() |  | 
| 
 | IFNULL()/ISNULL() |  | 
| 
 | IF() | 简单逻辑: IF(qty>100, 'High', 'Low') | 
| 
 | DECODE() |  | 
| JSON | JSON_EXTRACT() | 提取值: JSON_EXTRACT(doc, '$.address.city') | 
| 
 | JSON_SET() | 设置值: JSON_SET(doc, '$.email', 'new@mail.com') | 
| 
 | JSON_VALID() |  | 
| 
 | JSON_ARRAY() |  | 
| 
 | JSON_OBJECT() |  | 
| 分析 | FIRST_VALUE() |  | 
| 
 | PERCENT_RANK() |  | 
| 转换 | CAST() | 类型转换: CAST(price AS DECIMAL(10,2)) | 
| 
 | CONVERT() |  | 
| 
 | TO_DATE()/TO_NUMBER() |  | 
六、存储过程与触发器
| 术语 | 功能 | 语法示例 | 
|---|
| Stored Procedure |  | CREATE PROCEDURE TransferFunds(IN from_acc INT, IN to_acc INT, IN amt DECIMAL)
 BEGIN
 START TRANSACTION;
 UPDATE Accounts SET bal=bal-amt WHERE id=from_acc;
 UPDATE Accounts SET bal=bal+amt WHERE id=to_acc;
 COMMIT;
 END | 
| Function |  | PostgreSQL: 
 CREATE FUNCTION area(r float) RETURNS float AS $$ BEGIN RETURN 3.14*r*r; END; $$ LANGUAGE plpgsql; | 
| Trigger |  | CREATE TRIGGER update_balance
 AFTER INSERT ON Transactions
 FOR EACH ROW
 BEGIN
 UPDATE Accounts SET bal=bal+NEW.amount WHERE id=NEW.acc_id;
 END | 
| Parameter |  | IN/OUT/INOUT | 
| CALL |  | MySQL: CALL CalculateBonus(@total); | 
| DECLARE |  | DECLARE total_sales DECIMAL(10,2) DEFAULT 0.0; | 
| Cursor |  | DECLARE cur CURSOR FOR SELECT ...; OPEN cur; FETCH cur INTO ...; CLOSE cur; | 
| Condition Handler |  | DECLARE CONTINUE HANDLER FOR SQLEXCEPTION ... | 
| RETURN |  | RETURN total_bonus; | 
| LOOP/WHILE |  | WHILE counter < 100 DO ... END WHILE; | 
| IF-THEN-ELSE |  | IF credit > 5000 THEN ... ELSE ... END IF; | 
| BEFORE Trigger |  |  | 
| AFTER Trigger |  |  | 
| INSTEAD OF Trigger |  |  | 
| ROW vs STATEMENT |  |  | 
| SIGNAL/RESIGNAL |  | SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Error'; | 
| RAISE |  | PostgreSQL: RAISE EXCEPTION 'Invalid value: %', user_input; | 
| DYNAMIC SQL |  | SQL Server: EXEC sp_executesql @sql; | 
七、事务与锁
| 术语 | 功能 | 命令示例 | 
|---|
| BEGIN TRANSACTION |  | START TRANSACTION; | 
| COMMIT |  | COMMIT; | 
| ROLLBACK |  | ROLLBACK TO SAVEPOINT sp1; | 
| SAVEPOINT |  | SAVEPOINT checkpoint; | 
| Isolation Level |  | SET TRANSACTION ISOLATION LEVEL READ COMMITTED; | 
| READ UNCOMMITTED |  |  | 
| READ COMMITTED |  |  | 
| REPEATABLE READ |  |  | 
| SERIALIZABLE |  |  | 
| Shared Lock (S) |  |  | 
| Exclusive Lock (X) |  |  | 
| Intent Lock |  |  | 
| Key-Range Lock |  |  | 
| Deadlock |  |  | 
| Lock Timeout |  | SQL Server: SET LOCK_TIMEOUT 3000;(毫秒) | 
| Deadlock Priority |  | SET DEADLOCK_PRIORITY HIGH; | 
| Lock Escalation |  |  | 
| Row Versioning |  |  | 
| Snapshot Isolation |  |  | 
| Two-Phase Locking |  |  | 
八、数据库设计与架构
| 术语 | 描述 | 设计原则 | 
|---|
| ER Diagram |  |  | 
| Normalization |  |  | 
| Denormalization |  |  | 
| Entity |  |  | 
| Relationship |  |  | 
| Attribute |  |  | 
| Composite Key |  |  | 
| Surrogate Key |  |  | 
| Natural Key |  |  | 
| Referential Integrity |  |  | 
| Clustered Index |  |  | 
| Non-clustered Index |  |  | 
| Covering Index |  |  | 
| Full-Text Index |  |  | 
| Functional Dependency |  |  | 
| Star Schema |  |  | 
| Snowflake Schema |  |  | 
| Fact Table |  |  | 
| Dimension Table |  |  | 
| Slowly Changing Dimension |  |  | 
| Surrogate Key Pipeline |  |  | 
| Hierarchical Data Model |  |  | 
| Materialized Path |  |  | 
| In-Memory OLTP |  |  | 
九、高可用与扩展
| 技术 | 作用 | 架构示例 | 
|---|
| Replication |  |  | 
| Master-Slave |  |  | 
| Multi-Master |  |  | 
| Log Shipping |  |  | 
| Failover |  |  | 
| Sharding |  |  | 
| Partitioning |  |  | 
| Hot Standby |  |  | 
| CDC |  |  | 
| Table Partitioning |  |  | 
| Query Router |  |  | 
| In-Memory Database |  |  | 
| Connection Pooling |  |  | 
| Read Replica |  |  | 
| Write-Ahead Log (WAL) |  |  | 
| Logical Replication |  |  | 
| GoldenGate |  |  | 
| Delayed Replication |  |  | 
十、执行计划与优化
| 术语 | 功能 | 操作命令 | 
|---|
| EXPLAIN |  | MySQL: EXPLAIN FORMAT=JSON SELECT ... | 
| Execution Plan |  |  | 
| Query Optimizer |  |  | 
| Cost-Based Optimizer |  |  | 
| Full Table Scan |  |  | 
| Index Scan |  |  | 
| Index Seek |  |  | 
| Key Lookup |  |  | 
| Filter/Predicate Pushdown |  |  | 
| Nested Loop Join |  |  | 
| Hash Join |  |  | 
| Merge Join |  |  | 
| Statistics |  |  | 
| Query Hint |  | SQL Server: OPTION (HASH JOIN) | 
| Covering Index |  |  | 
| Parallel Query |  |  | 
| In-Memory OLAP |  |  | 
| Materialized View |  |  | 
十一、安全与权限
| 命令 | 功能 | 示例 | 
|---|
| GRANT |  | GRANT SELECT, UPDATE ON Customers TO sales_role; | 
| REVOKE |  | REVOKE DELETE ON Logs FROM auditor; | 
| CREATE USER |  | CREATE USER analyst IDENTIFIED BY 'S3cur3P@ss'; | 
| ALTER USER |  | ALTER USER scott PASSWORD EXPIRE; | 
| CREATE ROLE |  | CREATE ROLE finance; | 
| SET ROLE |  |  | 
| ROW LEVEL SECURITY |  |  | 
| COLUMN ENCRYPTION |  | SQL Server Always Encrypted | 
| DATA MASKING |  | CREATE MASKING POLICY email_mask AS (val string) RETURN CASE WHEN ... | 
| AUDIT |  | Oracle: AUDIT INSERT ANY TABLE BY ACCESS; | 
| TDE |  |  | 
| FIREWALL |  |  | 
| SQL INJECTION |  |  | 
| RBAC |  |  | 
| OWASP TOP 10 |  |  | 
| VIRTUAL PRIVATE DB |  |  | 
| FEDERATED AUTH |  |  | 
| PASSWORD POLICY |  |  | 
十二、跨数据库差异速查
| 功能 | MySQL | SQL Server | PostgreSQL | Oracle | 
|---|
| 字符串连接 | CONCAT() | + | || | CONCAT() | 
| 当前时间 | NOW() | GETDATE() | CURRENT_TIMESTAMP | SYSDATE | 
| 分页查询 | LIMIT 10 OFFSET 20 | OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY |  | FETCH FIRST 10 ROWS ONLY | 
| 正则表达式 | REGEXP '^A' | LIKE '[A-Z]%' | ~ '^A' | REGEXP_LIKE(name, '^A') | 
| 随机行 | ORDER BY RAND() LIMIT 1 | SELECT TOP 1 * FROM Table ORDER BY NEWID() | ORDER BY RANDOM() LIMIT 1 | SELECT * FROM (SELECT * FROM Table ORDER BY DBMS_RANDOM.VALUE) WHERE ROWNUM=1 | 
| 序列生成 | AUTO_INCREMENT | IDENTITY | CREATE SEQUENCE | SEQUENCE.NEXTVAL | 
| 日期差 | DATEDIFF(day, d1, d2) | DATEDIFF(DAY, d1, d2) | d2 - d1 | d2 - d1 | 
| 正则提取 | REGEXP_SUBSTR() | SUBSTRING() WITH PATINDEX | SUBSTRING() FROM 'pattern' | REGEXP_SUBSTR() | 
| JSON解析 | JSON_EXTRACT() | JSON_VALUE() | json_column->>'key' | JSON_TABLE() | 
| 递归查询 | WITH RECURSIVE | WITH ... UNION ALL | WITH RECURSIVE | CONNECT BY | 
| 时区处理 | CONVERT_TZ() | AT TIME ZONE | AT TIME ZONE | FROM_TZ() | 
| 分区表 | PARTITION BY RANGE | PARTITION FUNCTION |  | PARTITION BY RANGE | 
| 列转行 | UNION ALL | UNPIVOT | UNNEST() | UNPIVOT | 
| 错误处理 | DECLARE HANDLER | TRY/CATCH | EXCEPTION | EXCEPTION | 
| 窗口函数 |  |  |  |  | 
| 表空间 |  |  |  |  | 
| XML处理 | EXTRACTVALUE() | .nodes() | xpath() | XMLTABLE() | 
| Spatial索引 |  |  |  |  | 
(表格可左右滚动)
说明:
- 技术完整性:包含SQL92/SQL:2011标准及主流数据库扩展
- 跨平台对比:覆盖MySQL、SQL Server、PostgreSQL、Oracle四大RDBMS差异
建议配合具体数据库官方文档使用,并定期关注SQL标准演进。
阅读原文:原文链接
该文章在 2025/9/1 12:07:27 编辑过