MySQL执行正向工程时建表设置外键约束出现语法报错问题
MySQL正向工程建表语法错误原因及解决方案
报错原因
- 核心原因是MySQL版本不兼容语法:
VISIBLE是MySQL 8.0版本新增的索引可见性属性,如果你使用的是MySQL 5.7及更低版本,数据库无法识别该关键字,会直接抛出语法错误。错误位置刚好对应你代码中索引定义行之后的外键约束位置,所以报错提示会截断显示外键相关代码。 - 补充排查项:如果你使用的是MySQL 8.0及以上版本仍报错,可以检查
mydb.state_tab表是否已经提前创建,且表中存在idstate字段、字段类型和city表的state_idstate完全一致(必须都是INT非空),不过这类问题属于约束校验错误,不会提示语法错误,仅作参考。
解决方案
- 方案1:移除不兼容的
VISIBLE关键字,修改索引定义行即可,修改后的完整建表代码如下:
-- ----------------------------------------------------- -- Table `mydb`.`city` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `mydb`.`city` ( `idcity` INT NOT NULL, `city_name` VARCHAR(45) NOT NULL, `state_idstate` INT NOT NULL, PRIMARY KEY (`idcity`), INDEX `fk_city_state1_idx` (`state_idstate` ASC), CONSTRAINT `fk_city_state1` FOREIGN KEY (`state_idstate`) REFERENCES `mydb`.`state_tab` (`idstate`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
- 方案2:如果需要使用索引可见性特性,将你的MySQL数据库升级到8.0及以上正式版本即可直接执行原代码。
内容的提问来源于stack exchange,提问作者Maulik Vaghasiya
相关产品推荐
相关产品推荐

