slick:MySQL:多列索引

时间:2016-02-07 21:15:21

标签: mysql scala slick myisam

我找到了一个答案here,关于我如何在MySQL中的多列索引中的辅助列上指定AUTO_INCREMENT,例如

CREATE TABLE foo (
  id INTEGER NOT NULL AUTO_INCREMENT,
  grp INTEGER NOT NULL ,
  name VARCHAR(64),
  PRIMARY KEY (id, grp)
) ENGINE = MyISAM;

我如何扩展slick.driver.MySQL.api.Table以便生成这样的表,如果确实可以的话?我目前遇到的困难:(1)我不知道如何在主要的create语句中创建一个复合主键,以及(2)我不知道如何指定使用MyISAM引擎。

更新:@ulas'建议之后,我使用slick.codegen从(已创建的)SQL表生成光滑的数据模型。但是,数据模型不能用于重新创建表 - 它生成两个语句而不是一个,并且都不引用MyISAM。对此,我在光滑的github repos中列出了issue

现在这给我留下了@RickJames'建议,我宁愿这样做,因为它不依赖于MyISAM,这是当前MySQL版本的非默认引擎。

所以现在我的问题可以解决了,我将如何使用光滑执行以下操作?

BEGIN;
SELECT @id := IFNULL(MAX(id), -1) + 1 FROM foo WHERE grp = 1 FOR UPDATE;
INSERT INTO foo VALUES (@id, 1, 'bar');
COMMIT;

我不知道如何使用“更高级别”抽象来实现它,所以我尝试按照光滑手册的Plain SQL Queries部分进行操作。我的尝试类似于:

val statements = DBIO.seq(
  sqlu" SELECT @id := IFNULL(MAX(id), -1) + 1 FROM foo WHERE grp = 1 FOR UPDATE",
  sqlu"INSERT INTO foo VALUES (@id, 1, 'bar')"
)

db.run(statements.transactionally)

但是我得到了错误:

Exception in thread "main" slick.SlickException: Update statements should not return a ResultSet

帮助表示感谢。

0 个答案:

没有答案