Toon posts:

[mysql] insert into if not exists

Pagina: 1
Acties:
  • 132 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hi,

ik ben bezig met een query, en nou vraag ik me af of het mogelijk is om iets te inserten als het niet bestaat in de tabel, bijv.

code:
1
INSERT INTO test IF NOT EXISTS naam = 'testje' ( naam, test2 ) VALUES ('dms_algemeen','table.dms-menu');


Dit bovenstaande werkt niet, maar vraag me of zo'n constructie bestaat...


Alvast bedankt

  • lytjepole
  • Registratie: September 2000
  • Laatst online: 23-05 11:25

lytjepole

Schier?

'andersom' kan het iig wel, een unique constraint op een kolom uit je tabel en je weet zeker dat die waarde niet 2 keer voorkomt

[Did you know... ... that 35% of statistics are made-up?]


Verwijderd

Topicstarter
lytjepole schreef op 20 januari 2004 @ 09:40:
'andersom' kan het iig wel, een unique constraint op een kolom uit je tabel en je weet zeker dat die waarde niet 2 keer voorkomt
ja ik heb de volgende tabel


code:
1
2
3
4
5
CREATE TABLE IF NOT EXISTS test (
            `naam` varchar(255) NOT NULL default '',
            `test2` longtext NOT NULL,
            UNIQUE KEY `naam` (`naam`) )
            TYPE=MyISAM;



Maar het probleem is als ik dus 2x hetzelfde toevoeg, krijg ik een error van php en dat wil ik juist nie...

[ Voor 18% gewijzigd door Verwijderd op 20-01-2004 09:43 ]


  • lytjepole
  • Registratie: September 2000
  • Laatst online: 23-05 11:25

lytjepole

Schier?

volgens mij is dat wel wat je wilt, alleen je wilt de error niet op het scherm, dus dat zul je iets anders op moeten lossen

zie ook:
manual

[ Voor 24% gewijzigd door lytjepole op 20-01-2004 09:52 ]

[Did you know... ... that 35% of statistics are made-up?]


  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Uit de Mysql manual:
The features listed in this section are implemented in MySQL 4.1:

A new INSERT ... ON DUPLICATE KEY UPDATE ... syntax has been implemented. This allows you to UPDATE an existing row if the INSERT would have caused a duplicate in a PRIMARY or UNIQUE key (index).
Dit kan vanaf Mysql 4.1 dus.
Andersom denk ik dat je een UNIQUE index moet hebben en na een mislukte update via mysql_errno = 1032 (uit mnhoofd) erachter kan komen dat een indexwaarde niet bestaat.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Misschien is de REPLACE syntax iets voor jouw?

http://www.mysql.com/doc/en/REPLACE.html

Programmer - an organism that turns coffee into software.


Verwijderd

Mss een beetje crappy oplossing vergeleken met vorige oplossingen (die vaak pas in hogere MySQL versie werken, weet niet welke versie jij draait), maar je kunt het ook met een query eerst controleren, of dat ID / record al bestaat?

wel een beetje vuil en krom :r, but it gets the job done . Zou sowieso ff die UNIQUE constraint aanleggen.

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 22-05 11:36
Zelf doe ik het op een wat minder nette manier (weet ook niet of het werkt bij MySQL):

SQL:
1
2
3
4
IF (SELECT COUNT(*) FROM [Tabel] WHERE [Voorwaarde])=0
  INSERT [Tabel] ([velden]) VALUES ([Waarden])
 ELSE
  UPDATE [Tabel] SET [veld]=[Waarden] WHERE [Voorwaarde];


En dit werkt altijd goed.

Verwijderd

ik weet wat je nu precies wilt.
Maar ik heb een keer lopen pielen met inserts en updates, als de key nog niet bestond moest die updaten, zoniet inserten.
Dit moest of een zo'n meest efficiente manier.

Ik heb het toen op zo gelost:
voor eerst een update uit
kijk of er een row "affective" is
zo niet insert
Pagina: 1