資料庫設計時,避免使用保留關鍵字作為資料表、欄位名稱,可防止語法錯誤與相容性問題。本文彙整 MySQL 5.7、Oracle、SQL Server 三大主流資料庫的保留關鍵字清單,並補充 ODBC 標準與未來可能保留的關鍵字,供開發人員查閱參考。
MySQL 5.7 保留關鍵字
官方參考:MySQL Keywords and Reserved Words
關鍵字標記說明:(R) 表示保留字,[a]-[ag] 為版本相關註記。以下節錄常用關鍵字:
ACCESSIBLE(R) ACCOUNT ACTION ADD(R) AFTER AGAINST ALTER(R) ALWAYS
ANALYZE(R) AND(R) ANY AS(R) ASC(R) ASENSITIVE(R) AUTO_INCREMENT
BETWEEN(R) BIGINT(R) BINARY(R) BLOB(R) BOTH(R) BY(R) CALL(R)
CASCADE(R) CASE(R) CHANGE(R) CHAR(R) CHARACTER(R) CHECK(R) COLLATE(R)
COLUMN(R) COLUMNS COMMENT COMMIT COMMITTED CONSTRAINT(R) CREATE(R)
CROSS(R) CURRENT_DATE(R) CURRENT_TIME(R) CURRENT_TIMESTAMP(R) CURRENT_USER(R)
CURSOR(R) DATABASE(R) DATABASES(R) DATE DATETIME DAY DEC(R) DECIMAL(R)
DECLARE(R) DEFAULT(R) DELAYED(R) DELETE(R) DESC(R) DESCRIBE(R) DISTINCT(R)
DISTINCTROW(R) DIV(R) DOUBLE(R) DROP(R) DUAL(R) ELSE(R) ELSEIF(R)
ENCLOSED(R) END ENGINE ENGINES ENUM ERROR ERRORS ESCAPE ESCAPED(R)
EXISTS(R) EXIT(R) EXPLAIN(R) FALSE(R) FETCH(R) FLOAT(R) FOR(R) FORCE(R)
FOREIGN(R) FROM(R) FULLTEXT(R) GRANT(R) GROUP(R) HAVING(R) HIGH_PRIORITY(R)
HOST IDENTIFIED IF(R) IGNORE(R) IN(R) INDEX(R) INDEXES INFILE(R)
INNER(R) INOUT(R) INSENSITIVE(R) INSERT(R) INT(R) INTEGER(R) INTERVAL(R)
INTO(R) IS(R) ISOLATION JOIN(R) KEY(R) KEYS(R) KILL(R) LEADING(R)
LEAVE(R) LEFT(R) LIKE(R) LIMIT(R) LINES(R) LOAD(R) LOCALTIME(R) LOCALTIMESTAMP(R)
LOCK(R) LONG(R) LONGBLOB(R) LONGTEXT(R) LOOP(R) LOW_PRIORITY(R) MASTER
MATCH(R) MAXVALUE(R) MEDIUMBLOB(R) MEDIUMINT(R) MEDIUMTEXT(R) MINUTE
MOD(R) NATURAL(R) NCHAR NO(R) NOT(R) NULL(R) NUMERIC(R) NVARCHAR
OFFSET ON(R) ONLY OPEN OPTIMIZE(R) OPTION(R) OPTIONALLY(R) OR(R)
ORDER(R) OUT(R) OUTER(R) OUTFILE(R) PARTITION(R) PASSWORD PRECISION(R)
PRIMARY(R) PRIVILEGES PROCEDURE(R) PROCESSLIST PURGE(R) RANGE(R)
READ(R) READS(R) READ_ONLY READ_WRITE(R) REAL(R) REFERENCES(R) REGEXP(R)
RELAY RELEASE(R) RENAME(R) REPEAT(R) REPLACE(R) REQUIRE(R) RESTRICT(R)
RETURN(R) RETURNS REVOKE(R) RIGHT(R) RLIKE(R) ROLLBACK ROLLUP ROW
ROWS SCHEMA(R) SCHEMAS(R) SECOND SELECT(R) SENSITIVE(R) SEPARATOR(R)
SERIAL SET(R) SHOW(R) SHUTDOWN SIGNAL(R) SMALLINT(R) SNAPSHOT SOME
SPATIAL(R) SPECIFIC(R) SQL(R) SQLEXCEPTION(R) SQLSTATE(R) SQLWARNING(R)
SSL(R) START STARTING(R) STATS_AUTO_RECALC STATS_PERSISTENT STATUS
STOP STORAGE STORED(R) STRAIGHT_JOIN(R) TABLE(R) TABLES TABLESPACE
TEMPORARY TEMPTABLE TERMINATED(R) TEXT THAN THEN(R) TIME TIMESTAMP
TINYBLOB(R) TINYINT(R) TINYTEXT(R) TO(R) TRAILING(R) TRANSACTION TRIGGER(R)
TRIGGERS TRUE(R) TRUNCATE UNCOMMITTED UNION(R) UNIQUE(R) UNKNOWN
UNLOCK(R) UNSIGNED(R) UNTIL UPDATE(R) USAGE(R) USE(R) USER USER_RESOURCES
USING(R) UTC_DATE(R) UTC_TIME(R) UTC_TIMESTAMP(R) VALUES(R) VARBINARY(R)
VARCHAR(R) VARCHARACTER(R) VARYING(R) VIEW VIRTUAL(R) WAIT WARNINGS
WEEK WHEN(R) WHERE(R) WHILE(R) WITH(R) WORK WRITE(R) XOR(R) YEAR
YEAR_MONTH(R) ZEROFILL(R)
Oracle 保留關鍵字
查詢方式:SELECT * FROM v$reserved_words ORDER BY keyword ASC
包含運算子(! != & ( ) * + , - . / : ; < <= = > >= @)、PL/SQL 關鍵字、SQL 指令、資料型別、提示、系統函數等數千個關鍵字。完整清單極長,建議直接查詢系統視圖或參考 Oracle 官方文件。
SQL Server 保留關鍵字
官方參考:Reserved Keywords (Transact-SQL)
主要分類:
- Transact-SQL 保留字:ADD, ALL, ALTER, AND, ANY, AS, ASC, AUTHORIZATION, BACKUP, BEGIN, BETWEEN, BREAK, BROWSE, BULK, BY, CASCADE, CASE, CHECK, CHECKPOINT, CLOSE, CLUSTERED, COALESCE, COLLATE, COLUMN, COMMIT, COMPUTE, CONSTRAINT, CONTAINS, CONTINUE, CONVERT, CREATE, CROSS, CURRENT, CURSOR, DATABASE, DBCC, DEALLOCATE, DECLARE, DEFAULT, DELETE, DENY, DESC, DISK, DISTINCT, DISTRIBUTED, DOUBLE, DROP, DUMP, ELSE, END, ERRLVL, ESCAPE, EXCEPT, EXEC, EXECUTE, EXISTS, EXIT, FETCH, FILE, FILLFACTOR, FOR, FOREIGN, FREETEXT, FROM, FULL, FUNCTION, GOTO, GRANT, GROUP, HAVING, HOLDLOCK, IDENTITY, IDENTITY_INSERT, IDENTITYCOL, IF, INDEX, INNER, INSERT, INTERSECT, INTO, IS, JOIN, KEY, KILL, LEFT, LIKE, LINENO, LOAD, MERGE, NATIONAL, NOCHECK, NONCLUSTERED, NOT, NULL, NULLIF, OF, OFF, OFFSETS, ON, OPEN, OPENDATASOURCE, OPENQUERY, OPENROWSET, OPENXML, OPTION, OR, ORDER, OUTER, OVER, PERCENT, PIVOT, PLAN, PRECISION, PRIMARY, PRINT, PROC, PROCEDURE, PUBLIC, RAISERROR, READ, READTEXT, RECONFIGURE, REFERENCES, REPLICATION, RESTORE, RESTRICT, RETURN, REVERT, REVOKE, RIGHT, ROLLBACK, ROWCOUNT, ROWGUIDCOL, RULE, SAVE, SCHEMA, SECURITYAUDIT, SELECT, SEMANTICKEYPHRASETABLE, SESSION_USER, SET, SETUSER, SHUTDOWN, SOME, STATISTICS, SYSTEM_USER, TABLE, TABLESAMPLE, TEXTSIZE, THEN, TO, TOP, TRAN, TRANSACTION, TRIGGER, TRUNCATE, TRY_CONVERT, TSEQUAL, UNION, UNIQUE, UNPIVOT, UPDATE, UPDATETEXT, USE, USER, VALUES, VARYING, VIEW, WAITFOR, WHEN, WHERE, WHILE, WITH, WITHIN GROUP, WRITETEXT
- ODBC 保留字:ABSOLUTE, ACTION, ADA, ADD, ALL, ALLOCATE, ALTER, AND, ANY, ARE, AS, ASC, ASSERTION, AT, AUTHORIZATION, AVG, BEGIN, BETWEEN, BIT, BIT_LENGTH, BOTH, BY, CASCADE, CASCADED, CASE, CAST, CATALOG, CHAR, CHAR_LENGTH, CHARACTER, CHARACTER_LENGTH, CHECK, CLOSE, COALESCE, COLLATE, COLLATION, COLUMN, COMMIT, CONNECT, CONNECTION, CONSTRAINT, CONSTRAINTS, CONTINUE, CONVERT, CORRESPONDING, COUNT, CREATE, CROSS, CURRENT, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CURSOR, DATE, DAY, DEALLOCATE, DEC, DECIMAL, DECLARE, DEFAULT, DEFERRABLE, DEFERRED, DELETE, DESC, DESCRIBE, DESCRIPTOR, DIAGNOSTICS, DISCONNECT, DISTINCT, DOMAIN, DOUBLE, DROP, ELSE, END, END-EXEC, ESCAPE, EXCEPT, EXCEPTION, EXEC, EXECUTE, EXISTS, EXTERNAL, EXTRACT, FALSE, FETCH, FIRST, FLOAT, FOR, FOREIGN, FOUND, FROM, FULL, GET, GLOBAL, GO, GOTO, GRANT, GROUP, HAVING, HOUR, IDENTITY, IMMEDIATE, IN, INDEX, INDICATOR, INITIALLY, INNER, INPUT, INSENSITIVE, INSERT, INT, INTEGER, INTERSECT, INTERVAL, INTO, IS, ISOLATION, JOIN, KEY, LANGUAGE, LAST, LEADING, LEFT, LEVEL, LIKE, LOCAL, LOWER, MATCH, MAX, MIN, MINUTE, MODULE, MONTH, NAMES, NATIONAL, NATURAL, NCHAR, NEXT, NO, NONE, NOT, NULL, NULLIF, NUMERIC, OCTET_LENGTH, OF, ON, ONLY, OPEN, OPTION, OR, ORDER, OUTER, OUTPUT, OVERLAPS, PAD, PARAMETER, PARAMETERS, PARTIAL, PASCAL, POSITION, PRECISION, PREPARE, PRESERVE, PRIMARY, PRIOR, PRIVILEGES, PROCEDURE, PUBLIC, READ, REAL, REFERENCES, RELATIVE, RESTRICT, REVOKE, RIGHT, ROLLBACK, ROWS, SCHEMA, SCROLL, SECOND, SECTION, SELECT, SESSION, SESSION_USER, SET, SIZE, SMALLINT, SOME, SPACE, SQL, SQLCA, SQLCODE, SQLERROR, SQLSTATE, SQLWARNING, SUBSTRING, SUM, SYSTEM_USER, TABLE, TEMPORARY, THEN, TIME, TIMESTAMP, TIMEZONE_HOUR, TIMEZONE_MINUTE, TO, TRAILING, TRANSACTION, TRANSLATE, TRANSLATION, TRIM, TRUE, UNION, UNIQUE, UNKNOWN, UPDATE, UPPER, USAGE, USER, USING, VALUE, VALUES, VARCHAR, VARYING, VIEW, WHEN, WHENEVER, WHERE, WITH, WORK, WRITE, YEAR, ZONE
- 未來可能保留字:ABSOLUTE, ACTION, ADMIN, AFTER, AGGREGATE, ALIAS, ALLOCATE, ARE, ARRAY, ASENSITIVE, ASSERTION, ASYMMETRIC, ATOMIC, BEFORE, BINARY, BLOB, BOOLEAN, BOTH, BREADTH, CALL, CALLED, CARDINALITY, CASCADED, CAST, CATALOG, CHAR, CHARACTER, CLASS, CLOB, COLLATION, COLLECT, COMPLETION, CONDITION, CONNECT, CONNECTION, CONSTRAINTS, CONSTRUCTOR, CORR, CORRESPONDING, COVAR_POP, COVAR_SAMP, CUBE, CUME_DIST, CURRENT_CATALOG, CURRENT_DEFAULT_TRANSFORM_GROUP, CURRENT_PATH, CURRENT_ROLE, CURRENT_SCHEMA, CURRENT_TRANSFORM_GROUP_FOR_TYPE, CYCLE, DATA, DATE, DAY, DEC, DECIMAL, DEFERRABLE, DEFERRED, DEPTH, DEREF, DESCRIBE, DESCRIPTOR, DESTROY, DESTRUCTOR, DETERMINISTIC, DICTIONARY, DIAGNOSTICS, DISCONNECT, DOMAIN, DYNAMIC, EACH, ELEMENT, END-EXEC, EQUALS, EVERY, EXCEPTION, FALSE, FILTER, FIRST, FLOAT, FOUND, FREE, FULLTEXTTABLE, FUSION, GENERAL, GET, GLOBAL, GO, GROUPING, HOLD, HOST, HOUR, IGNORE, IMMEDIATE, INDICATOR, INITIALIZE, INITIALLY, INOUT, INPUT, INT, INTEGER, INTERSECTION, INTERVAL, ISOLATION, ITERATE, LANGUAGE, LARGE, LAST, LATERAL, LEADING, LESS, LEVEL, LIKE_REGEX, LIMIT, LN, LOCAL, LOCALTIME, LOCALTIMESTAMP, LOCATOR, MAP, MATCH, MEMBER, METHOD, MINUTE, MOD, MODIFIES, MODIFY, MODULE, MONTH, MULTISET, NAMES, NATURAL, NCHAR, NCLOB, NEW, NEXT, NO, NONE, NORMALIZE, NOT, OBJECT, OCCURRENCES_REGEX, OLD, ONLY, OPERATION, ORDINALITY, OUT, OUTPUT, OVERLAY, PAD, PARAMETER, PARAMETERS, PARTIAL, PARTITION, PATH, PERCENT_RANK, PERCENTILE_CONT, PERCENTILE_DISC, PERCENT_RANK, POSTFIX, PREFIX, PREORDER, PREPARE, PRESERVE, PRIOR, PRIVILEGES, RANGE, READS, REAL, RECURSIVE, REF, REFERENCING, REGR_AVGX, REGR_AVGY, REGR_COUNT, REGR_INTERCEPT, REGR_R2, REGR_SLOPE, REGR_SXX, REGR_SXY, REGR_SYY, RELATIVE, RELEASE, RESULT, RETURNS, ROLE, ROLLUP, ROUTINE, ROW, ROWS, SAVEPOINT, SCOPE, SCROLL, SEARCH, SECOND, SECTION, SEQUENCE, SESSION, SETS, SIMILAR, SIZE, SMALLINT, SPECIFIC, SPECIFICTYPE, SQL, SQLEXCEPTION, SQLSTATE, SQLWARNING, START, STATE, STATEMENT, STATIC, STDDEV_POP, STDDEV_SAMP, STRUCTURE, SUBMULTISET, SUBSTRING_REGEX, SUM, SYMMETRIC, SYSTEM, TEMPORARY, TERMINATE, THAN, TIME, TIMESTAMP, TIMEZONE_HOUR, TIMEZONE_MINUTE, TRAILING, TRANSLATE_REGEX, TRANSLATION, TREAT, TRUE, UESCAPE, UNDER, UNKNOWN, UNNEST, USAGE, USING, VALUE, VALUES, VAR_POP, VAR_SAMP, VARCHAR, VARIABLE, VARYING, WHENEVER, WIDTH_BUCKET, WINDOW, WITHIN, WITHOUT, WORK, WRITE, XMLAGG, XMLATTRIBUTES, XMLBINARY, XMLCAST, XMLCOMMENT, XMLCONCAT, XMLDOCUMENT, XMLELEMENT, XMLEXISTS, XMLFOREST, XMLITERATE, XMLNAMESPACES, XMLPARSE, XMLPI, XMLQUERY, XMLSERIALIZE, XMLTABLE, XMLTEXT, XMLVALIDATE, YEAR, ZONE
最佳實務建議
- 命名物件時,優先使用有意義的英文單字組合,避免單一關鍵字。
- 若必須使用關鍵字,SQL Server 可用方括號
[keyword],MySQL 用反引號 `keyword`,Oracle 用雙引號 "keyword" 包裹。
- 定期查閱官方文件,因版本升級可能新增保留字。