[zeromicro/go-zero]goctl model mysql不能生成代码

2024-03-05 450 views
7
  1. 最新版位v1.1.7, 但go get goctl是v1.1.6
  2. 使用workbench生成sql,其中包含三个表, 总是提示错误 goctl model mysql ddl -src="./*.sql" -dir="./sql/model" error: syntax error at position 461 near 'drop
  3. 只有把包含三个table的sql文件,删的只剩一个table才能创建成功。
  4. https://github.com/jackluo2012/datacenter/blob/main/sql.sql 这个也是使用的go-zero, 也不能生成代码, 同样使用v1.1.6

回答

2

SQL建表都没问题。 直接workbench导出的。

0

试验了下,把所有的 DROP TABLE 注释掉就可以跑了,比如导出的可能是这样,就可以跑通的,会生成多个 model 文件:

-- MySQL Script generated by MySQL Workbench
-- 06/08/15 23:15:33
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering

/*!40101 SET NAMES utf8 */;

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

DROP TABLE IF EXISTS shorturl;
CREATE TABLE `shorturl`
(
    `shorten` varchar(255) NOT NULL COMMENT 'shorten key',
    `url`     varchar(255) NOT NULL COMMENT 'original url',
    PRIMARY KEY (`shorten`),
    INDEX url_idx(`url`(20))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- DROP TABLE IF EXISTS shorturl2;
CREATE TABLE `shorturl2`
(
    `shorten` varchar(255) NOT NULL COMMENT 'shorten key',
    `url`     varchar(255) NOT NULL COMMENT 'original url',
    PRIMARY KEY (`shorten`),
    INDEX url_idx(`url`(20))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
8

那应当改进一下, 毕竟这是官方直接导出来的sql,还是有用的。

5

UNIQUE INDEX uuid_UNIQUE (uuid ASC) VISIBLE, 你的用法不全, 加这一句就失败了, 是不是使用的解析包不行,解析不了各种情况。 @wangerzi

5

对的,因为要解析对还是比较麻烦,要换库才行,我们本来内网有个web界面,直接让选择哪个库,一键生成然后copy出来的

9

我今天使用datasource的方式, 只不过多了一个视图, 还是生成失败, 是不是不支持视图 missing primary key 视图没主键就不行吗?

7

主键是需要的

4

视图不是没主键吗? 还有一个问题, 不支持联合主键吗?

3

联合主键不支持的

7

建议还是把sql执行到数据库, 用datasource的方式跑model这样问题少一点

1

视图的代码, 分页的代码 等都是手撸的, 最好全是自动生成的, 现在支持的太简单了。