有谁知道如何在Slick中获取最近插入的自动递增列的ID?我想使用Slick执行条目插入,然后取回最近使用Scala/Slick插入的主列ID的值,然后将其用于另一次插入。 最佳答案 您可以使用返回:valsomeTable=TableQuery[MyEntity]valthisId=(someTablereturningsomeTable.map(_.id))+=someRow请注意,这会返回插入行的ID(可能是最新的,也可能不是最新的),因此只有在该行存储后才插入到数据库中。这个问题是你不应该将它用于另一个插入,你有一个自动递增
我的C#应用程序使用FluentNhibernate,我有一个非常基本的问题。我想知道当我们有多个主键时,NHibernate映射类应该是什么样子。这是一个示例,展示了我如何实现映射和其他模型类:CREATETABLEStudents(idINTNOTNULL,nameVARCHAR(20)NOTNULL,ageINTNOTNULL,PRIMARYKEY(id));publicclassStudents{publicvirtualintID{get;set;}publicvirtualstringName{get;set;}publicvirtualintAge{get;set;}}p
我正在使用MySQL和PHP开发一个库存软件,本地数据库将同步到在线数据库。假设我有一张表sell并且sell_id是该表的主键。我通常使用INT和带主键的自动递增。本地数据库1sell表有2个条目(sell_id1,2),本地数据库2sell表有2个条目(sell_id1,2)。如果我将这2个本地销售表条目同步/插入到在线销售表中,它将变为(sell_id1,2,3,4)。随着销售ID的更改,它会影响其他表中使用sell_id作为外键的那些条目。在这种情况下我应该如何计划创建主键。我打算使用alpha-numericid,这对两个数据库都是唯一的。它会产生任何问题或进一步减慢我对数百
我有一个结构良好的数据库的表创建脚本。但是,出于某种原因,可以说,表创建脚本不包含主键或外键信息。为使用这些脚本创建的数据库生成ERD/UML的最佳方法是什么-假设索引完好无损。是否有任何工具可用于检查列名并生成ERD/UML?我应该手动执行此操作吗? 最佳答案 您问题的答案-我应该手动执行此操作吗?-是的,恐怕。让我们考虑自动检测主键和外键的可能性。无论这样的算法是已经存在还是由您自己编写,它都必须从给定的数据库方案中确定哪些属性组合符合PK和FK。有一个简单的案例,但我怀疑这不适用于您的数据库,否则您不会问这个问题。如果有命名约
我们网站上的特定UPDATE查询有时会运行得非常慢,并且会检查比必要的多得多的行。它按主键过滤,所以我希望MySQL总是只需要检查一行。以下是MySQL的慢查询日志中的一些示例:#Time:09070212:59:06#User@Host:XXX[XXX]@XXX[XXX]#Query_time:21Lock_time:0Rows_sent:0Rows_examined:500500SETtimestamp=1246532346;UPDATE`folders`SET`folder_id`='1705641',`updated_at`=now()WHERE`folders`.`id`='
一直在研究使用多列主键,并且由于性能对于流量和数据库的大小非常重要,所以在我开始在我的许多表上放弃唯一ID方法之前,我需要知道是否有什么需要考虑的开始使用多列主键。那么,使用多列主键与基本的单列、auto-inc主键相比,在性能/优化方面的优缺点是什么? 最佳答案 您是否有特殊原因需要/想要使用多列键而不是(我假设)已经创建的单列键?NaturalKeys的问题之一正在处理对所有外键的键值进行级联更新。诸如自动增量列之类的代理键可以避免这种情况。在性能方面,根据行数、列的数据类型、存储引擎以及专用于MySQL的RAM量,多列键可能会
在决定表的键时,表有一个INT主键(自动增量)和数据库范围有一个GUID(除了INT)是否好?鉴于将有更多的表DML语句,对INT进行操作会更快,而如果要执行任何泛数据库DML语句,GUID将派上用场。请注意我正在使用MySQL,以防万一。请发表意见。 最佳答案 我以前做过并且成功了:正如你所指出的,使用GUID意味着我们在合并时避免了冲突,比如说,来自一个数据库的数据与另一个数据库,并且int为我们提供了高效的连接等。当您处理OLAP时,我永远不会使用GUID作为键,因为那样会提高性能。
此代码在我的本地RoR/Windows7(64位)上运行:sql=ActiveRecord::Base.connection()last_pk=sql.insert("insertintomanual(name)values('hellonewvalue')")puts'last_pk=',last_pk但始终显示“0”。由于各种原因,我无法在这种情况下使用ActiveRecord。(注意:以上代码在我的共享主机上运行良好。另请注意:为了使任何数据库连接正常工作,我必须根据StackOverflow.com上的另一个答案将mysql5\bin\libmySQL.dll替换为不同的DLL
我有2个表,都带有自动递增的主键,我希望id在两个表之间是唯一的-即不会将两个相等的值用作这些表的主键。为了说明这一点,我想做一些类似于facebook使用他们的ID所做的事情——在用户、页面、事件等之间共享它们。另外,我想确保我可以在未来扩展系统。我现在脑子里有三个想法,无法决定采用其中一个。将ID递增10并从不同的值开始-即表A:1、11、21....&表B:2、12、22-这有点愚蠢,因为你丢失了很多ID使用GUID-我认为我可以做得更好对id列使用unsignedbigint,一个表从1开始,另一个表从足够大的数字开始最好的方法是什么?还是有别的办法?谢谢!
如果我运行插入查询但由于重复键错误而失败,有没有办法在不进行其他选择的情况下获取其主键?基本上:INSERTINTOtbl(field)VALUES('myvalue')这会失败,因为已经有ID为1且字段为myvalue的记录。现在我想知道ID:1而无需执行另一个查询:SELECTidFROMtblWHEREfield='myvalue'有可能吗? 最佳答案 这是一个链接,它提供了四种不同的方法来处理这个问题:http://mikefenwick.com/blog/insert-into-database-or-return-id-