Maybe this is some SQL standard implementation and that's why it is what it
is, but to me it seems completely retarded that you have to explicitly call
out the columns... 

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Why doesn't it work in a more convenient and sane way?!

So instead of this cumbersome incantation that makes you want to rip out
your hair and puch your cube-mate dead in the nose:

insert into table1 (c1,c2,c3) values (v1,v2,v3) on duplicate key
update c1=v1, c2=v2, c3=v3; 

Just allow a more sane and logical:

insert into table1 (c1,c2,c3) values (v1,v2,v3) on duplicate key update;

And then mySQL should be smart enough to do the c1=v1 mapping, just like it
can do on a regular insert.  If the columns are called out like that, then
you know what values I was trying to put in them. Honestly it could even
work if I used 'insert into table1 values (v1,v2,v3) on duplicate key
update' as mySQL could just look up all the columns and map accordingly.

It's baffling. I can sorta see how it might be useful to have the current
syntax in the RARE occasion you only want to update a portion of the record
or some other column not called out, like this:

insert into table1 (c1,c2,c3) values (v1,v2,v3) on duplicate key
update c1=v2+v3;

or

insert into table1 (c1,c2,c3) values (v1,v2,v3) on duplicate key
update c4=v4;

But honestly, I can't think of a case that you couldn't achieve it with my
suggestion.

So close and yet so far... 

Can the mySQL guys consider implementing this 'extension' as well? With
InnoDB becoming more useful all the time, and FKs being used, REPLACE INTO
is becoming more and more dangerous to use. So many times we have a
programmer wipe out some important data because of that statement (as it
does a DELETE first, which triggers the constraint!). I thought that the
INSERT INTO...ON DUPE UP was gonna be an easy change, but it's just as
tricky to match up all the columns and honestly it doesn't really get you
all that much once your done typing everything out.

d


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

Reply via email to