Well, my "hack" (which is sort of like what you suggest) is to change my
primary key from just an auto_increment 'id' field to a combination of two
other fields (mac/scanner_id) that I know must be unique. Then I rely upon
the fact that mySQL will not allow a duplicate PK. (I did say it was a
hack). A co-worker assures me that a SELECT is cheap, however a version I
tried (without my hack) still allowed duplicates to slip through because I
wasn't locking the tables. I have multiple scanners hitting the same table
and locking seems to me a bad idea.

Also, I guess my TIMESTAMP brainstorm won't work b/c the resolution of that
field is 1 second and these queries happen faster than that. *Neuman!*  :-/

REPLACE INTO won't work, as I need the previous record (hence the update). I
store the first and last time I saw a node, amongst other info. REPLACE
would delete that data.

http://daevid.com

> -----Original Message-----
> From: Steve Meyers [mailto:[EMAIL PROTECTED] 
> Sent: Thursday, May 27, 2004 7:42 AM
> To: Daevid Vincent
> Cc: [EMAIL PROTECTED]
> Subject: Re: Feature Request: UPDATE 'error codes' or 
> mysql_affected_rows() to be more "accurate"
> 
> http://dev.mysql.com/doc/mysql/en/INSERT.html
> 
>       INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
>           [INTO] tbl_name [(col_name,...)]
>           VALUES ({expr | DEFAULT},...),(...),...
>           [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
>       
>       If you specify the ON DUPLICATE KEY UPDATE clause (new 
> in MySQL      
>       4.1.0), and a row is inserted that would cause a duplicate value
>       in a UNIQUE index or PRIMARY KEY, an UPDATE of the old row is
>       performed.
> 
> 
> Daevid Vincent wrote:
> > I'm developing a program where I try an "UPDATE ... LIMIT 1" and if
> > mysql_affected_rows == 0, then I know nothing was updated 
> and so I do an
> > INSERT. I find this is much cleaner and the majority of the 
> time, I'm going
> > to do UPDATES, so I didn't want to waste a SELECT (even 
> though I hear
> > they're "cheap"). I'm doing these queries several times per second.
> > 
> > however... Of course UPDATE doesn't 'ERROR" if the record 
> doesn't exist, it
> > just didn't do anything (therefore that's why I use the 
> mysql_num_rows() to
> > check). The problem is that if I am actually doing an 
> UPDATE to a record
> > where nothing actually changed in the existing record, I still get
> > mysql_affected_rows() equal to 0. *grrr*.
> > 
> > It would be extremely useful to somehow get a result of 
> maybe -1 if I tried
> > to update a record that didn't exist, versus a result of -2 
> if I tried to
> > update a record that did exist, but mySQL didn't change anything.
> > 
> > I don't know exactly what I'm asking for other than a way 
> to know the
> > difference...
> > 
> > At the very least, it seems to me that if I update a record 
> that exists
> > already (even if no data changed), I should still get 
> mysql_affected_rows()
> > 
> >>0 (since in theory I matched something, even if mySQL 
> behind the scenes
> > 
> > didn't change the data).  
> > 
> > Out of curiosity, if I have a TIMESTAMP column, would that 
> solve my problem,
> > since mySQL should be forced to update that TIMESTAMP 
> right?? [btw, I know I
> > could try this idea, but I'm home and my code is at work 
> right now and I
> > just had the idea! ;-]
> > 
> > http://daevid.com
> > 
> > 
> 


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to