【问题标题】:SQLite Autoincrement Based on Another Column's Value基于另一列值的 SQLite 自动增量
【发布时间】:2017-09-30 18:16:51
【问题描述】:

我基本上是想创建一个这样的表

col1|col2
---------
1    1
1    2
1    3
2    1
3    1
2    2
1    4

其中第 2 列自动增量,但其自动增量值不与整个表相关,而是与第 1 列的值相关。这可能吗?

【问题讨论】:

  • @BillKarwin 我不确定这是否可以在 SQLite 中轻松完成。

标签: sql database sqlite


【解决方案1】:

我以为我发现了一个重复的问题,但它是针对 PostgreSQL 的。抱歉暂时将您的问题标记为重复。我已经扭转了这一点。

我不确定这是否可以在 SQLite 中以自动化方式实现,但一种解决方案是分步进行:

  1. BEGIN 一个事务和INSERT 在表的一行中,col2 为 NULL。这应该获取一个保留锁并防止其他并发进程执行相同的操作并导致竞争条件。

  2. SELECT MAX(col2) FROM mytable WHERE col1 = ? 获取迄今为止为给定组插入的最大值。

  3. UPDATE mytable SET col2 = ?+1 WHERE col1 = ? AND col2 IS NULL 使用步骤 2 中发现的 MAX。

  4. COMMIT 将更改写入文件。

【讨论】:

  • BEGIN IMMEDIATE 或 BEGIN EXCLUSIVE 已锁定。
猜你喜欢
  • 2021-03-07
  • 2015-07-11
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多