MySQL中ACTION、Link关键字含义及迁移至CockroachDB相关问题
MySQL
Action与Link关键字相关问题解答 关键字属性结论
ACTION是MySQL的非保留关键字,仅在特定语法场景下有特殊含义:通常用于外键约束的参照动作定义,比如ON UPDATE NO ACTION、ON DELETE NO ACTION这类语法,非该场景下可以直接作为普通标识符使用,不需要额外转义。LINK不属于MySQL的关键字范畴,完全是普通字符串,没有任何特殊语法作用。
你提供的建表语句说明
你贴出的两个建表语句里的Action、Link都不是作为关键字使用的,只是带空格的表名的组成部分:
- 第一条语句的表名实际是
tabDocType Action,MySQL中包含空格的标识符需要用反引号包裹,原语句是缺了反引号的不规范写法,正确写法应为:
CREATE TABLE `tabDocType Action` ( name varchar(140) COLLATE utf8mb4_unicode_ci NOT NULL, creation TIMESTAMP(6) DEFAULT NULL, modified TIMESTAMP(6) DEFAULT NULL, modified_by varchar(140) COLLATE utf8mb4_unicode_ci DEFAULT NULL, owner varchar(140) COLLATE utf8mb4_unicode_ci DEFAULT NULL, docstatus INT NOT NULL DEFAULT 0, parent varchar(140) COLLATE utf8mb4_unicode_ci DEFAULT NULL, parentfield varchar(140) COLLATE utf8mb4_unicode_ci DEFAULT NULL, parenttype varchar(140) COLLATE utf8mb4_unicode_ci DEFAULT NULL, idx INT NOT NULL DEFAULT 0, label varchar(140) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `group` varchar(140) COLLATE utf8mb4_unicode_ci DEFAULT NULL, action_type varchar(140) COLLATE utf8mb4_unicode_ci DEFAULT NULL, action text COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (name) );
注意其中group也是MySQL的保留关键字,作为字段名使用也需要用反引号包裹。
2. 第二条语句的表名是tabDocType Link,已经用反引号包裹,属于合法的带空格表名写法,Link只是表名的一部分,没有其他特殊用途。
迁移到CockroachDB的适配建议
- 所有需要转义的标识符(带空格的表名、关键字作为字段名等)统一用双引号包裹,CockroachDB遵循SQL标准,使用双引号作为标识符转义符,不支持MySQL的反引号写法。
utf8mb4_unicode_ci这类MySQL专属排序规则可以替换为CockroachDB支持的排序规则,默认使用en_US.utf8即可满足大多数场景需求。- 语句中的
TIMESTAMP(6)、INT等数据类型CockroachDB完全兼容,无需修改。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

