2016-05-17 66 views
2

插入id 1和2.刪除id 2.插入新行,它會得到id 2而不是3.如何更改此?我不想重用主鍵。不要使用已刪除的主鍵

import sqlite3, os 

os.remove('mydatabase.db') 
conn = sqlite3.connect("mydatabase.db") # or use :memory: to put it in RAM 
cursor = conn.cursor() 

# create a table 
cursor.execute("CREATE TABLE if not exists albums (id INTEGER PRIMARY KEY NOT NULL, title text, artist text, release_date text, publisher text, media_type text)") 
cursor.execute("CREATE TABLE if not exists anti (id INTEGER, title text, artist text, release_date text, publisher text, media_type text)") 
conn.commit() 

cursor.execute("INSERT INTO albums VALUES (null, 'Glow', 'Andy Hunter', '7/24/2012', 'Xplore Records', 'MP3')") 
cursor.execute("INSERT INTO albums VALUES (null, 'second', 'artist', '7/24/2012', 'Xplore Records', 'MP3')") 
conn.commit() 

cursor.execute("SELECT * FROM albums") 
print(cursor.fetchall()) 

cursor.execute("INSERT INTO anti SELECT * FROM albums WHERE title='second'") 
cursor.execute("DELETE FROM albums WHERE title='second'") 
cursor.execute("INSERT INTO albums VALUES (null, 'third', 'artist', '7/24/2012', 'Xplore Records', 'MP3')") 
conn.commit() 

cursor.execute("SELECT * FROM albums") 
print(cursor.fetchall()) 
cursor.execute("SELECT * FROM anti") 
print(cursor.fetchall()) 

回答

3

https://www.sqlite.org/autoinc.html

如果出現AUTOINCREMENT關鍵字後INTEGER PRIMARY KEY,改變了自動ROWID分配算法,以防止的ROWID的再利用對數據庫的壽命。換句話說,AUTOINCREMENT的目的是防止重複使用以前刪除的行中的ROWID。

+0

這個問題值得追究嗎?我沒有看到任何重複的信息 – user193661

+0

是的,我認爲是。我認爲你不應該覺得你需要刪除一個問題,如果它是重複的。問題不斷以重複方式關閉,但未被刪除。如果有重複的話,這裏的措詞可能會對搜索引擎更友好。 –

+1

@ user193661你很幸運; [其他問題](http://stackoverflow.com/questions/33135324/sqlite-prevent-primary-key-value-from-resetting-after-delete-all-rows?lq=1)不太一般。 –