我是新手,所以希望有一些耐心。 :)
如果某个值不存在,我正在尝试填充两个表。基本上我有:
TABLE b
(
id VARCHAR(254) PRIMARY KEY NOT NULL
);
TABLE d
(
id VARCHAR(254) PRIMARY KEY NOT NULL,
relay INT NOT NULL,
FOREIGN KEY ( relay ) REFERENCES b ( id )
);
所以我试着编写一个用新值填充两个表的函数,如果它不存在,或者忽略它,否则......当然包含在事务中:
IF (NOT EXISTS(SELECT * FROM b where id='something'))
insert into b values('something')
insert into d values(1, 'something')
END
实现这样的目标最有效的方法是什么?如果重要的话我正在使用POstgreSQL 9.1,但我想保持它相当通用。
(编辑) 这些是我目前的表格defs(为简化说明而简化):
object d extends Table[(String, String, Int)]("d")
{
def id=column[String]("id", O.PrimaryKey)
def relay=column[Int]("relay")
def relay_ref=foreignKey("d2b.fk", relay, b)(_.id)
def * = id ~ relay
}
object b extends Table[(String)]("b")
{
def id=column[String]("id", O.PrimaryKey)
def * = id
}
答案 0 :(得分:10)
在Slick 1.0.1中
db.withTransaction{ implicit session : Session =>
if( ! Query(b).filter(_.id==="something").exists.run ){
b.insert( "something" )
d.insert( (1,"something") )
}
}
在Slick 2.0中
val b = TableQuery[b]
db.withTransaction{ implicit session =>
if( ! b.filter(_.id==="something").exists.run ){
b += "something"
d += (1,"something")
}
}