大家好,今天我们来聊一聊MySQL数据库规范,MySQL是一个广泛使用的开源关系型数据库管理系统,良好的规范可以提高数据库的性能、可靠性和可维护性。下面是一些MySQL数据库规范的重要指南,还附了一些索引失效的常见情况和关键字列表,希望对大家有所帮助。
所有规范会按照【高危】、【强制】、【建议】三个级别进行标注,遵守优先级从高到低。
业务系统名称_子系统(模块)名
库通配名_编号
或 库通配名_时间
tmp_
、bak_
、日期等作为表名前缀或后缀区分int
或bigint
类型,并且只能有一列自增列enum
、set
类型,不利于后续枚举值变更,推荐使用tinyint
或int
类型int
或bigint
,主键最多只能指定一个字段uk_
或uq_
开头,普通索引以idx_
开头,以字段名称或缩写作为后缀int
转为varchar
类型等int
或bigint
uk_
或uq_
开头,普通索引以idx_
开头,以字段名称或缩写作为后缀select *
语法insert into…values(XX),(XX),(XX)…
。这里 XX 的值不要超过 5000 个,避免引起数据库主从延迟auto_increment
属性字段的表的插入操作,并发需要控制在 200 以内delete t1 … where a=XX limit XX;
这种带 limit 的删除语句。因为会导致主从不一致,导致数据错乱update t1 … where a=XX limit XX;
这种带 limit 的更新语句。因为会导致主从不一致,导致数据错乱update t1 set … where name in(select name from user where…);
效率极其低下select *
order by
,尽量在业务程序上排序,减少对机器 CPU 的性能损耗order by
、group by
、distinct
这些 SQL 尽量利用索引直接检索出排序好的数据。如where a=1 order by b
可以利用key(a,b)
。order by
、group by
、distinct
这些查询的语句,where 条件过滤出来的结果集请保持在 1000 行以内,否则 SQL 会很慢。idx_a_b(a, b)
,查询条件使用where b = 1
则无法使用索引col_name like '%test'
或 col_name like '%test%'
idx_col(col)
,查询条件使用where left(col, 2) = 'te'
is not null
。设计表结构时尽量设置 not null
约束test_col
为varchar
类型,查询时使用了where test_col = 1
,隐式转为了int
类型导致索引失效where a = 'testa' or b = 'testb'
,存在索引idx_a(a)
,此时也不会使用索引,除非为b字段也添加索引R 表示为 MySQL 预留关键字
关键字 | 关键字 | 关键字 |
---|---|---|
ACCESSIBLE(R) | ACCOUNT | ACTION |
ADD(R) | AFTER | AGAINST |
AGGREGATE | ALGORITHM | ALL(R) |
ALTER(R) | ALWAYS | ANALYSE |
ANALYZE(R) | AND(R) | ANY |
AS(R) | ASC(R) | ASCII |
ASENSITIVE(R) | AT | AUTOEXTEND_SIZE |
AUTO_INCREMENT | AVG | AVG_ROW_LENGTH |
BACKUP | BEFORE(R) | BEGIN |
BETWEEN(R) | BIGINT(R) | BINARY(R) |
BINLOG | BIT | BLOB(R) |
BLOCK | BOOL | BOOLEAN |
BOTH(R) | BTREE | BY(R) |
BYTE | CACHE | CALL (R) |
CASCADE (R) | CASCADED | CASE (R) |
CATALOG_NAME | CHAIN | CHANGE (R) |
CHANGED | CHANNEL | CHAR (R) |
CHARACTER (R) | CHARSET | CHECK (R) |
CHECKSUM | CIPHER | CLASS_ORIGIN |
CLIENT | CLOSE | COALESCE |
CODE | COLLATE (R) | COLLATION |
COLUMN (R) | COLUMNS | COLUMN_FORMAT |
COLUMN_NAME | COMMENT | COMMIT |
COMMITTED | COMPACT | COMPLETION |
COMPRESSED | COMPRESSION | CONCURRENT |
CONDITION (R) | CONNECTION | CONSISTENT |
CONSTRAINT (R) | CONSTRAINT_CATALOG | CONSTRAINT_NAME |
CONSTRAINT_SCHEMA | CONTAINS | CONTEXT |
CONTINUE (R) | CONVERT (R) | CPU |
CREATE (R) | CROSS (R) | CUBE |
CURRENT | CURRENT_DATE (R) | CURRENT_TIME (R) |
CURRENT_TIMESTAMP (R) | CURRENT_USER (R) | CURSOR (R) |
CURSOR_NAME | DATA | DATABASE (R) |
DATABASES (R) | DATAFILE | DATE |
DATETIME | DAY | DAY_HOUR (R) |
DAY_MICROSECOND (R) | DAY_MINUTE (R) | DAY_SECOND (R) |
DEALLOCATE | DEC (R) | DECIMAL (R) |
DECLARE (R) | DEFAULT (R) | DEFAULT_AUTH |
DEFINER | DELAYED (R) | DELAY_KEY_WRITE |
DELETE (R) | DESC (R) | DESCRIBE (R) |
DES_KEY_FILE | DETERMINISTIC (R) | DIAGNOSTICS |
DIRECTORY | DISABLE | DISCARD |
DISK | DISTINCT (R) | DISTINCTROW (R) |
DIV (R) | DO | DOUBLE (R) |
DROP (R) | DUAL (R) | DUMPFILE |
DUPLICATE | DYNAMIC | EACH (R) |
ELSE (R) | ELSEIF (R) | ENABLE |
ENCLOSED (R) | ENCRYPTION | END |
ENDS | ENGINE | ENGINES |
ENUM | ERROR | ERRORS |
ESCAPE | ESCAPED (R) | EVENT |
EVENTS | EVERY | EXCHANGE |
EXECUTE | EXISTS (R) | EXIT (R) |
EXPANSION | EXPIRE | EXPLAIN (R) |
EXPORT | EXTENDED | EXTENT_SIZE |
FALSE (R) | FAST | FAULTS |
FETCH (R) | FIELDS | FILE |
FILE_BLOCK_SIZE | FILTER | FIRST |
FIXED | FLOAT(R) | FLOAT4(R) |
FLOAT8(R) | FLUSH | FOLLOWS |
FOR(R) | FORCE(R) | FOREIGN(R) |
FORMAT | FOUND | FROM(R) |
FULL | FULLTEXT(R) | FUNCTION |
GENERAL | GENERATED(R) | GEOMETRY |
GEOMETRYCOLLECTION | GET(R) | GET_FORMAT |
GLOBAL | GRANT(R) | GRANTS |
GROUP(R) | GROUP_REPLICATION | HANDLER |
HASH | HAVING(R) | HELP |
HIGH_PRIORITY(R) | HOST | HOSTS |
HOUR | HOUR_MICROSECOND(R) | HOUR_MINUTE(R) |
HOUR_SECOND(R) | IDENTIFIED | IF(R) |
IGNORE(R) | IGNORE_SERVER_IDS | IMPORT |
IN(R) | INDEX(R) | INDEXES |
INFILE(R) | INITIAL_SIZE | INNER(R) |
INOUT(R) | INSENSITIVE(R) | INSERT(R) |
INSERT_METHOD | INSTALL | INSTANCE |
INT(R) | INT1(R) | INT2(R) |
INT3(R) | INT4(R) | INT8(R) |
INTEGER(R) | INTERVAL(R) | INTO(R) |
INVOKER | IO | IO_AFTER_GTIDS(R) |
IO_BEFORE_GTIDS(R) | IO_THREAD | IPC |
IS(R) | ISOLATION | ISSUER |
ITERATE(R) | JOIN(R) | JSON |
KEY(R) | KEYS(R) | KEY_BLOCK_SIZE |
KILL(R) | LANGUAGE | LAST |
LEADING(R) | LEAVE (R) | LEAVES |
LEFT (R) | LESS | LEVEL |
LIKE (R) | LIMIT (R) | LINEAR(R) |
LINES(R) | LINESTRING | LIST |
LOAD(R) | LOCAL | LOCALTIME(R) |
LOCALTIMESTAMP(R) | LOCK(R) | LOCKS |
LOGFILE | LOGS | LONG(R) |
LONGBLOB(R) | LONGTEXT(R) | LOOP(R) |
LOW_PRIORITY(R) | MASTER | MASTER_AUTO_POSITION |
MASTER_BIND(R) | MASTER_CONNECT_RETRY | MASTER_DELAY |
MASTER_HEARTBEAT_PERIOD | MASTER_HOST | MASTER_LOG_FILE |
MASTER_LOG_POS | MASTER_PASSWORD | MASTER_PORT |
MASTER_RETRY_COUNT | MASTER_SERVER_ID | MASTER_SSL |
MASTER_SSL_CA | MASTER_SSL_CAPATH | MASTER_SSL_CERT |
MASTER_SSL_CIPHER | MASTER_SSL_CRL | MASTER_SSL_CRLPATH |
MASTER_SSL_KEY | MASTER_SSL_VERIFY_SERVER_CERT(R) | MASTER_TLS_VERSION |
MASTER_USER | MATCH(R) | MAXVALUE(R) |
MAX_CONNECTIONS_PER_HOUR | MAX_QUERIES_PER_HOUR | MAX_ROWS |
MAX_SIZE | MAX_STATEMENT_TIME | MAX_UPDATES_PER_HOUR |
MAX_USER_CONNECTIONS | MEDIUM | MEDIUMBLOB(R) |
MEDIUMINT(R) | MEDIUMTEXT(R) | MEMORY |
MERGE | MESSAGE_TEXT | MICROSECOND |
MIDDLEINT(R) | MIGRATE | MINUTE |
MINUTE_MICROSECOND(R) | MINUTE_SECOND(R) | MIN_ROWS |
MOD(R) | MODE | MODIFIES(R) |
MODIFY | MONTH | MULTILINESTRING |
MULTIPOINT | MULTIPOLYGON | MUTEX |
MYSQL_ERRNO | NAME | NAMES |
NATIONAL | NATURAL(R) | NCHAR |
NDB | NDBCLUSTER | NEVER |
NEW | NEXT | NO |
NODEGROUP | NONBLOCKING | NONE |
NOT(R) | NO_WAIT | NO_WRITE_TO_BINLOG(R) |
NULL(R) | NUMBER | NUMERIC(R) |
NVARCHAR | OFFSET | OLD_PASSWORD |
ON(R) | ONE | ONLY |
OPEN | OPTIMIZE(R) | OPTIMIZER_COSTS(R) |
OPTION(R) | OPTIONALLY(R) | OPTIONS |
OR(R) | ORDER(R) | OUT(R) |
OUTER(R) | OUTFILE(R) | OWNER |
PACK_KEYS | PAGE | PARSER |
PARSE_GCOL_EXPR | PARTIAL | PARTITION(R) |
PARTITIONING | PARTITIONS | PASSWORD |
PHASE | PLUGIN | PLUGINS |
PLUGIN_DIR | POINT | POLYGON |
PORT | PRECEDES | PRECISION(R) |
PREPARE | PRESERVE | PREV |
PRIMARY(R) | PRIVILEGES | PROCEDURE(R) |
PROCESSLIST | PROFILE | PROFILES |
PROXY | PURGE(R) | QUARTER |
QUERY | QUICK | RANGE(R) |
READ(R) | READS(R) | READ_ONLY |
READ_WRITE(R) | REAL(R) | REBUILD |
RECOVER | REDOFILE | REDO_BUFFER_SIZE |
REDUNDANT | REFERENCES(R) | REGEXP(R) |
RELAY | RELAYLOG | RELAY_LOG_FILE |
RELAY_LOG_POS | RELAY_THREAD | RELEASE(R) |
RELOAD | REMOVE | RENAME(R) |
REORGANIZE | REPAIR | REPEAT(R) |
REPEATABLE | REPLACE(R) | REPLICATE_DO_DB |
REPLICATE_DO_TABLE | REPLICATE_IGNORE_DB | REPLICATE_IGNORE_TABLE |
REPLICATE_REWRITE_DB | REPLICATE_WILD_DO_TABLE | REPLICATE_WILD_IGNORE_TABLE |
REPLICATION | REQUIRE(R) | RESET |
RESIGNAL(R) | RESTORE | RESTRICT(R) |
RESUME | RETURN(R) | RETURNED_SQLSTATE |
RETURNS | REVERSE | REVOKE(R) |
RIGHT(R) | RLIKE(R) | ROLLBACK |
ROLLUP | ROTATE | ROUTINE |
ROW | ROWS | ROW_COUNT |
ROW_FORMAT | RTREE | SAVEPOINT |
SCHEDULE | SCHEMA(R) | SCHEMAS(R) |
SCHEMA_NAME | SECOND | SECOND_MICROSECOND(R) |
SECURITY | SELECT(R) | SENSITIVE(R) |
SEPARATOR(R) | SERIAL | SERIALIZABLE |
SERVER | SESSION | SET(R) |
SHARE | SHOW(R) | SHUTDOWN |
SIGNAL(R) | SIGNED | SIMPLE |
SLAVE | SLOW | SMALLINT(R) |
SNAPSHOT | SOCKET | SOME |
SONAME | SOUNDS | SOURCE |
SPATIAL (R) | SPECIFIC (R) | SQL (R) |
SQLEXCEPTION (R) | SQLSTATE (R) | SQLWARNING (R) |
SQL_AFTER_GTIDS | SQL_AFTER_MTS_GAPS | SQL_BEFORE_GTIDS |
SQL_BIG_RESULT(R) | SQL_BUFFER_RESULT | SQL_CACHE |
SQL_CALC_FOUND_ROWS(R) | SQL_NO_CACHE | SQL_SMALL_RESULT(R) |
SQL_THREAD | SQL_TSI_DAY | SQL_TSI_HOUR |
SQL_TSI_MINUTE | SQL_TSI_MONTH | SQL_TSI_QUARTER |
SQL_TSI_SECOND | SQL_TSI_WEEK | SQL_TSI_YEAR |
SSL(R) | STACKED | START |
STARTING(R) | STARTS | STATS_AUTO_RECALC |
STATS_PERSISTENT | STATS_SAMPLE_PAGES | STATUS |
STOP | STORAGE | STORED(R) |
STRAIGHT_JOIN(R) | STRING | SUBCLASS_ORIGIN |
SUBJECT | SUBPARTITION | SUBPARTITIONS |
SUPER | SUSPEND | SWAPS |
SWITCHES | TABLE(R) | TABLES |
TABLESPACE | TABLE_CHECKSUM | TABLE_NAME |
TEMPORARY | TEMPTABLE | TERMINATED(R) |
TEXT | THAN | THEN(R) |
TIME | TIMESTAMP | TIMESTAMPADD |
TIMESTAMPDIFF | TINYBLOB(R) | TINYINT(R) |
TINYTEXT(R) | TO(R) | TRAILING(R) |
TRANSACTION | TRIGGER (R) | TRIGGERS |
TRUE (R) | TRUNCATE | TYPE |
TYPES | UNCOMMITTED | UNDEFINED |
UNDO(R) | UNDOFILE | UNDO_BUFFER_SIZE |
UNICODE | UNINSTALL | UNION(R) |
UNIQUE(R) | UNKNOWN | UNLOCK(R) |
UNSIGNED(R) | UNTIL | UPDATE(R) |
UPGRADE | USAGE(R) | USE(R) |
USER | USER_RESOURCES | USE_FRM |
USING(R) | UTC_DATE(R) | UTC_TIME(R) |
UTC_TIMESTAMP(R) | VALIDATION | VALUE |
VALUES(R) | VARBINARY(R) | VARCHAR(R) |
VARCHARACTER(R) | VARIABLES | VARYING(R) |
VIEW | VIRTUAL(R) | WAIT |
WARNINGS | WEEK | WEIGHT_STRING |
WHEN(R) | WHERE(R) | WHILE(R) |
WITH(R) | WITHOUT | WORK |
WRAPPER | WRITE(R) | X509 |
XA | XID | XML |
XOR(R) | YEAR | YEAR_MONTH(R) |
ZEROFILL(R) |