插入问题

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:V3.0.8
  • 【问题描述】:单条sql语句插入不成功。语句如下 insert into kernel_role(TenantId,ShardId,CompanyId,RoleId,StationId,RoleName,Type,Status,Level,Rank,Description,CreateAccount,CreateTime,UpdateAccount,UpdateTime,IsActive,IsDeleted,IsShow,IsInternally) values (0,0,0,0,387,‘商户超级管理员’,1,0,0,0,‘商户[11]超级管理员’,2912,‘2020-02-06 17:19:39.967865’,2912,‘2020-02-06 17:19:39.967970’,1,0,0,0) 错误如下:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 103 near “Rank,Description,CreateAccount,CreateTime,UpdateAccount,UpdateTime,IsActive,IsDeleted,IsShow,IsInternally) values (0,0,0,0,387,‘商户超级管理员’,1,0,0,0,‘商户[11]超级管理员’,2912,‘2020-02-06 17:19:39.967865’,2912,‘2020-02-06 17:19:39.967970’,1,0,0,0)” 我一开始以为是level是关键词可能会有问题但是我修改level 改为level_x 也是同样的出错误

  1. 麻烦提供一下 kernel_role 的建表语句。
  2. select tidb_version() 提供下具体的版本号。

我给rank加上rank 就可以了

请问下这是为什么?应用是ORM操作表的,不太好加`怎么处理

CREATE TABLE kernel_role ( TenantId int(11) DEFAULT NULL, ShardId int(11) DEFAULT NULL, CompanyId int(20) NOT NULL, RoleId int(20) NOT NULL, RoleName varchar(50) DEFAULT NULL, Type int(11) DEFAULT NULL, Status int(11) DEFAULT NULL, Level int(11) DEFAULT NULL, Rank int(11) DEFAULT NULL, Description varchar(300) DEFAULT NULL, CreateAccount int(20) DEFAULT NULL, CreateTime datetime DEFAULT NULL, UpdateAccount int(20) DEFAULT NULL, UpdateTime datetime DEFAULT NULL, IsActive bit(1) DEFAULT NULL, IsDeleted bit(1) DEFAULT NULL, StationId int(11) DEFAULT NULL, IsShow bit(1) DEFAULT b’1’ COMMENT ‘是否显示’, IsInternally bit(1) DEFAULT b’0’ COMMENT ‘角色是否为内置数据’, PRIMARY KEY (RoleId) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

我查了下rank 是个窗口函数,这个还有其他办法吗

我这边先复现下问题排查一下。

测试了一下 Rank 是窗口函数的关键字,因此需要加上 ’ ` ’ 来定义。 MySQL 8.0 也是会报错的。与 MySQL 的行为是一致的。所以建议不要使用关键字来做列名。

可是mysql5.7不会报错:disappointed_relieved:

mysql5.7 还不支持 rank 等窗口函数,不会把它作为关键字。