2017-05-03 4 views
0

私は基本的にオートインクリメントの値が全体のテーブルが、列1の値に関連付けられていない2列自動インクリメントが、これSQLiteの自動インクリメントベース

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

のような表を作成したいです。これは可能ですか?

+0

@BillKarwinこれは簡単にSQLiteで行うことができません。 –

答えて

1

私は重複した質問を見つけたと思っていましたが、それはPostgreSQLでした。一時的に質問を重複としてマークすることについての申し立て。私はそれを逆転させた。

これは、自動化された方法でのSQLiteで可能であるならば、私は確かに知りませんが、一つの解決策を段階的にそれを行うには、次のようになります。

  1. BEGIN取引とINSERT 1行の表でcol2の場合はNULLです。これはRESERVEDロックを獲得し、他の並行プロセスが同じことをして競合状態を引き起こさないようにする必要があります。

  2. SELECT MAX(col2) FROM mytable WHERE col1 = ?これまでのところ、与えられたグループに対して最大の値が挿入されました。 MAXを使用して

  3. UPDATE mytable SET col2 = ?+1 WHERE col1 = ? AND col2 IS NULLは、ファイルに変更を書き込むためにステップ2.

  4. COMMITで発見しました。

+0

[BEGIN](http://www.sqlite.org/lang_transaction.html)IMMEDIATEまたはBEGIN EXCLUSIVEはすでにロックをとります。 –

+0

@ CL。先端のおかげで! –

関連する問題