Quantcast
Channel: MySQL Forums - InnoDB
Viewing all articles
Browse latest Browse all 1957

auto increment primary key skips numbers (2 replies)

$
0
0
These are the tables:
create table tracker(

ip varchar( 32 ) primary key,
http_refererid int unsigned,
unixtime int,

index( http_refererid )

)engine = InnoDB;

/*******************************************************************************
*******************************************************************************/
create table referer(

id int unsigned auto_increment primary key,
referer text,

unique( referer( 16 ))

)engine = InnoDB;

This is the code:

qd_query( "set autocommit = 0" );

/******************************************************************************/
$_Sql = sprintf( "

select 1 from tracker
where tracker.ip = %s
for update

"

, quote_smart( $_SERVER['REMOTE_ADDR'] )

) ;

if( mysql_fetch_assoc( qd_query ( $_Sql ))){

error_log( "{$_SERVER['REMOTE_ADDR']} already visited." );
qd_query( "set autocommit = 1" );

return;
}

/******************************************************************************/
$_Sql = sprintf( "

select referer.id from referer
where referer.referer = %s
for update

"

, quote_smart( $_SERVER['HTTP_REFERER'] )

) ;

if( $_Referer = mysql_fetch_assoc( qd_query ( $_Sql ))){

$_Refererid = $_Referer['id'];
error_log( "{$_SERVER['REMOTE_ADDR']} first visit. Referer {$_Refererid}".
" has history." );

}else{

/******************************************************************************/
$_Sql = sprintf ( "

insert into referer set
referer.referer = %s

"

, quote_smart( $_SERVER['HTTP_REFERER'] )

) ;

qd_query ( $_Sql ) ;
$_Refererid = mysql_insert_id();
error_log( "{$_SERVER['REMOTE_ADDR']} first visit. New referer {$_Refererid}." );
}

/******************************************************************************/
$_Sql = sprintf ( "

insert into tracker set
tracker.ip = %s
, tracker.http_refererid = %u
, tracker.unixtime = %d
"

, quote_smart( $_SERVER['REMOTE_ADDR'] )
, $_Refererid
, time()

);
qd_query ( $_Sql );
qd_query( "set autocommit = 1" );


Table "referer" shows the following sequence of ids:
1
2
3
4
7
8
10
11
12
16
17

Why are some numbers being skipped?
I am aware of this page http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html#innodb-auto-increment-configurable

But aparently my code doesn't do any rollbacks, I only do the simple insert shown above, and I never delete any rows.
My MySQL version is 5.1.41-3ubuntu12.10

Viewing all articles
Browse latest Browse all 1957

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>