私は基本的にオートインクリメントの値が全体のテーブルが、列1の値に関連付けられていない2列自動インクリメントが、これSQLiteの自動インクリメントベース
col1|col2
---------
1 1
1 2
1 3
2 1
3 1
2 2
1 4
のような表を作成したいです。これは可能ですか?
私は基本的にオートインクリメントの値が全体のテーブルが、列1の値に関連付けられていない2列自動インクリメントが、これSQLiteの自動インクリメントベース
col1|col2
---------
1 1
1 2
1 3
2 1
3 1
2 2
1 4
のような表を作成したいです。これは可能ですか?
私は重複した質問を見つけたと思っていましたが、それはPostgreSQLでした。一時的に質問を重複としてマークすることについての申し立て。私はそれを逆転させた。
これは、自動化された方法でのSQLiteで可能であるならば、私は確かに知りませんが、一つの解決策を段階的にそれを行うには、次のようになります。
BEGIN
取引とINSERT
1行の表でcol2の場合はNULLです。これはRESERVEDロックを獲得し、他の並行プロセスが同じことをして競合状態を引き起こさないようにする必要があります。
SELECT MAX(col2) FROM mytable WHERE col1 = ?
これまでのところ、与えられたグループに対して最大の値が挿入されました。 MAXを使用して
UPDATE mytable SET col2 = ?+1 WHERE col1 = ? AND col2 IS NULL
は、ファイルに変更を書き込むためにステップ2.
COMMIT
で発見しました。
[BEGIN](http://www.sqlite.org/lang_transaction.html)IMMEDIATEまたはBEGIN EXCLUSIVEはすでにロックをとります。 –
@ CL。先端のおかげで! –
@BillKarwinこれは簡単にSQLiteで行うことができません。 –