MySQL WorkBench正向工程报Error 1064错误,请求排查解决
Error 1064错误分析与解决办法
错误原因
错误出在CREATE TABLE语句的id字段定义:
`id` INT GENERATED ALWAYS AS () VIRTUAL,
MySQL的**生成列(Generated Column)**要求必须指定有效的计算表达式,空括号()不符合语法规范,这直接触发了Error 1064语法错误。
解决办法
根据业务需求,分两种场景处理:
场景1:id作为自增主键(最常用场景)
如果id是用于唯一标识记录的自增主键,无需使用生成列,改为自增字段即可:
CREATE TABLE IF NOT EXISTS `myBank`.`Clients` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(1000) NULL, `place_of_birth` VARCHAR(1000) NULL, `date_of_birth` DATE NULL, `address` VARCHAR(1000) NULL, `passport` VARCHAR(100) NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB;
场景2:id确实需要作为生成列
如果id必须基于其他字段计算生成,需在括号内填写合法表达式,示例如下(根据实际需求调整):
-- 示例:基于passport和出生日期拼接生成id CREATE TABLE IF NOT EXISTS `myBank`.`Clients` ( `passport` VARCHAR(100) NULL, `date_of_birth` DATE NULL, `id` INT GENERATED ALWAYS AS (CONCAT(passport, DATE_FORMAT(date_of_birth, '%Y%m%d'))) VIRTUAL, `name` VARCHAR(1000) NULL, `place_of_birth` VARCHAR(1000) NULL, `address` VARCHAR(1000) NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB;
操作提示
修改完成后,在MySQL WorkBench中重新执行正向工程,或直接运行修正后的建表语句即可解决该错误。
内容的提问来源于stack exchange,提问作者Ilya Budakov
相关产品推荐
相关产品推荐

