This seems more like the solution I want. I am using perl-DBI and when
there is an error (i.e. duplicate insert), the rest of the scrip it not
executed. But this is gives me the following error. What am I doing
wrong ?

mysql> desc tb;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| myID      | int(11)     |      | PRI | NULL    | auto_increment |
| firstname | varchar(10) | YES  | MUL | NULL    |                |
| lastname  | varchar(10) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> INSERT INTO tb (firstname, lastname) VALUES ('Jack', 'Doe') ON
DUPLICATE KEY UPDATE lastname = lastname;
ERROR 1064: You have an error in your SQL syntax near 'ON DUPLICATE KEY
UPDATE lastname = lastname' at line 1

Alternatively, I am looking for 'try' equivalent in perl, so that if the
insert is duplicate, the rest of the script is still run. Thank you.

Regards, Adai.


On Mon, 2004-07-26 at 17:20, Michael Dykman wrote:
> from http://dev.mysql.com/doc/mysql/en/INSERT.html:
> 14.1.4 INSERT Syntax
> 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.
> ...
> <end quote>
> 
> there is no IF NOT EXISTS syntax in INSERT, but you could make use of the 
> ON DUPLICATE KEY mechanism. Assuming you create a unique index on 
> firstname, lastname, your update might read:
> INSERT INTO tb (firstname, lastname) VALUES ('Jack', 'Doe') 
> ON DUPLICATE KEY UPDATE lastname = lastname;
> 
> which renders the insert neutral.
> 
> On Mon, 2004-07-26 at 11:05, Adaikalavan Ramasamy wrote:
> > I am creating a small database that keeps track of users and assigns
> > them a unique user ID. 
> > 
> > The problem is that sometimes the users might request to be added more
> > than once (i.e. click on the submit button multiple times). Therefore I
> > only want to add users if their details (here defined by both firstname,
> > lastname) are not in the database. Example :
> > 
> >  CREATE TABLE tb ( myID INT NOT NULL auto_increment, firstname       
> >                 VARCHAR(10), lastname VARCHAR(10), PRIMARY KEY(myID) );
> >   INSERT INTO tb (firstname, lastname) VALUES ('John', 'Doe'); 
> >   INSERT INTO tb (firstname, lastname) VALUES ('Jack', 'Doe');
> >   INSERT INTO tb (firstname, lastname) VALUES ('Paul', 'Smith');
> >   SELECT * from tb;
> > +------+-----------+----------+
> > | myID | firstname | lastname |
> > +------+-----------+----------+
> > |    1 | John      | Doe      |
> > |    2 | Jack      | Doe      |
> > |    3 | John      | Smith    |
> > +------+-----------+----------+
> > 
> > I get syntax error with the following :
> > 
> >  INSERT INTO tb (firstname, lastname) VALUES ('Jack', 'Doe') IF NOT  
> >  EXISTS ( SELECT * FROM tb WHERE firstname='Jack' AND lastname='Doe' );
> > 
> > In this case, I want no insert because Jack Doe already exists. Can
> > anyone help me ?
> > 
> > Thank you.
> > 
> > Regards, Adai.
> > 
> > 
> > 
> > 
> > 


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

Reply via email to