- 最新版位v1.1.7, 但go get goctl是v1.1.6
- 使用workbench生成sql,其中包含三个表, 总是提示错误 goctl model mysql ddl -src="./*.sql" -dir="./sql/model" error: syntax error at position 461 near 'drop
- 只有把包含三个table的sql文件,删的只剩一个table才能创建成功。
- https://github.com/jackluo2012/datacenter/blob/main/sql.sql 这个也是使用的go-zero, 也不能生成代码, 同样使用v1.1.6
Q
[zeromicro/go-zero]goctl model mysql不能生成代码
7
A
回答
8
直接手动执行 SQL 有问题吗,看起来跟这个 ISSUE 描述的问题有点像 https://github.com/tal-tech/go-zero/issues/745
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
2
@william-best 应该是的,我之前也遇到类似的,官方建议用 datasource 的形式去做自动生成,https://github.com/tal-tech/go-zero/issues/740#issuecomment-851781769
5
对的,因为要解析对还是比较麻烦,要换库才行,我们本来内网有个web界面,直接让选择哪个库,一键生成然后copy出来的
9
我今天使用datasource的方式, 只不过多了一个视图, 还是生成失败, 是不是不支持视图 missing primary key 视图没主键就不行吗?
7
主键是需要的
4
视图不是没主键吗? 还有一个问题, 不支持联合主键吗?
3
联合主键不支持的
7
建议还是把sql执行到数据库, 用datasource的方式跑model这样问题少一点
1
视图的代码, 分页的代码 等都是手撸的, 最好全是自动生成的, 现在支持的太简单了。