/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL: Indsæt kun hvis primary key ik
Fra : Jonas Delfs


Dato : 14-02-07 13:14

Hej gruppe

Kan jeg med én forespørgsel indsætte en række i en tabel, med den
betingelse at der ikke allerede eksisterer en række med samme primary key?
Altså lidt modsat REPLACE INTO der jo netop overskriver hvis rækken
allerede eksisterer.
Logisk nogle a'la:

INSERT INTO <table> SET added=NOW() IF (SELECT COUNT(id) FROM <table>
WHERE id=39887) == 0

På forhånd tak!

Mvh. Jonas

 
 
Jens Gyldenkærne Cla~ (14-02-2007)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 14-02-07 13:36

Jonas Delfs skrev:

> Kan jeg med én forespørgsel indsætte en række i en tabel, med
> den betingelse at der ikke allerede eksisterer en række med
> samme primary key?

Du kan vel bare fyre en normal INSERT af og så håndtere
fejlmeddelelsen om duplikeret primærnøgleværdi i stilhed.
--
Bolig søges. Andel eller leje i Emdrup, Nordvest, Nørrebro, Søborg
eller Brønshøj, max 6000 pr. måned.
Kontakt pr. mail - nospam(at)gyros.dk
Jens Gyldenkærne Clausen

Kim Andersen (14-02-2007)
Kommentar
Fra : Kim Andersen


Dato : 14-02-07 15:40

>> Kan jeg med én forespørgsel indsætte en række i en tabel, med
>> den betingelse at der ikke allerede eksisterer en række med
>> samme primary key?
>
> Du kan vel bare fyre en normal INSERT af og så håndtere
> fejlmeddelelsen om duplikeret primærnøgleværdi i stilhed.

Alternativ er

INSERT IGNORE


/Kim



Kristian Damm Jensen (15-02-2007)
Kommentar
Fra : Kristian Damm Jensen


Dato : 15-02-07 15:21

Kim Andersen wrote:
>>> Kan jeg med én forespørgsel indsætte en række i en tabel, med
>>> den betingelse at der ikke allerede eksisterer en række med
>>> samme primary key?
>>
>> Du kan vel bare fyre en normal INSERT af og så håndtere
>> fejlmeddelelsen om duplikeret primærnøgleværdi i stilhed.
>
> Alternativ er
>
> INSERT IGNORE

Eller (mere generisk)

insert into foo
select bar
where not exists (select * from foo where bar)


--
Venlig hilsen /Best regards
Kristian Damm Jensen



Leif Neland (14-02-2007)
Kommentar
Fra : Leif Neland


Dato : 14-02-07 22:39

Jonas Delfs wrote:
> Hej gruppe
>
> Kan jeg med én forespørgsel indsætte en række i en tabel, med den
> betingelse at der ikke allerede eksisterer en række med samme primary
> key? Altså lidt modsat REPLACE INTO der jo netop overskriver hvis
> rækken allerede eksisterer.
> Logisk nogle a'la:
>
> INSERT INTO <table> SET added=NOW() IF (SELECT COUNT(id) FROM <table>
> WHERE id=39887) == 0
>
> På forhånd tak!

Brug INSERT IGNORE

Og i den forbindelse så er der også ON DUPLICATE KEY

F.ex: (Inspireret af http://dev.mysql.com/doc/refman/5.0/en/insert.html)

site_id er unikt index:
INSERT INTO logs (`site_id`, `added`,`hits`) VALUES (1,NOW(), 1) ON
DUPLICATE KEY UPDATE hits=hits+1;

Leif



Søg
Reklame
Statistik
Spørgsmål : 177452
Tips : 31962
Nyheder : 719565
Indlæg : 6408137
Brugere : 218879

Månedens bedste
Årets bedste
Sidste års bedste