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]