我找到了一个答案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
帮助表示感谢。