2012-08-22 82 views
0

我在python中使用MySQLdb的executemany函數來插入多重行更新重複。它的工作原理如此。但有一個問題。大多數行通常需要更新一次或兩次插入。我在該表中有一個自動編號字段。每次查詢運行時,即使實際插入的計數低於跳轉,自動編號字段也會跳轉。 ID基本上被浪費了。 任何線索這裏發生了什麼,以及如何避免這種情況? 謝謝!Python MySQLdb executemany更新重複

回答

0

這是MySQL服務器如何處理自動增量字段的結果。 MySQLdb模塊根本不會影響自動遞增行爲。

MySQL Performance Blog詳細解釋了差距發生的原因,以及如何通過使用mutex table來避免這些差距。簡而言之:

create table mutex(
    i int not null primary key 
); 
insert into mutex(i) values (1); 

insert into foo(name) select 1 from mutex left outer join foo on foo.name=1 where mutex.i = 1 and foo.name is null; 

即插入具有針對互斥表進行左外連接的子選擇。爲什麼這個工作?如果該ID已經在互斥表中,則重用;否則,連接產生一個NULL,並觸發自動遞增。