2010-12-06 18 views
0

ich immer in das Einfügen von Daten in eine MySQL-Tabelle Ich benutze eine Auswahl für diese Daten vor dem Einfügen, um doppelte Datensätze zu vermeiden, und wenn die Abfrage null zurückgeben, dann füge ich Datensatz.Wie verhindert man das Duplizieren von Datensätzen in mysql Insertionsabfragen?

aber ich denke, es ist vielleicht keine professionelle Art, diesen Job zu machen.

würden Sie mir die Art, wie Sie tun, lassen?

+0

eine geeignete Einschränkung hinzufügen, wie bereits vorgeschlagen, in der Regel ein guter Weg ist, zu gehen, aber wenn aus irgendeinem Grund, der nicht geeignet ist, Sie könnten versuchen, eine bedingte einfügen (im Wesentlichen, was Sie jetzt tun, aber alles in einer Aussage): http://stackoverflow.com/questions/2852935/sql-conditional-row-insert – Mike

+0

Dank Mike, aber wenn ich solche Bedingungen ausführen Abfrage mit WHERE NOT EXISTS-Anweisung mysql gibt mir einen Syntaxfehler. –

Antwort

0

Der "professionelle" Weg, dies zu tun, wird eine Primärschlüsselbeschränkung verwenden.

+0

ok, ich habe einen Primärschlüssel, und das ist eine ID, die automatisch erhöht wird, aber es wird Änderungen für jeden Datensatz sein –

+0

meine Antwort wird Ihnen ermöglichen, einen eindeutigen Index festzulegen, der Ihr Problem eines autoinkrementierenden Schlüssels – Jroc

+0

umgehen wird Sie können eine eindeutige Einschränkung für beide Ansätze festlegen. –

1

Wenn der Grund, warum Sie keine Primärschlüssel oder eindeutige Indizes verwenden möchten, auf dem Fehler beruht, der generiert wird (was ein Problem darstellt, wenn Sie mehrere Zeilen in einer einzigen Abfrage einfügen), können Sie Folgendes verwenden Syntax

Sie können auch ON DUPLICATE KEY UPDATE verwenden, um bestimmte Felder zu aktualisieren.

insert into [tablename]() VALUES() ON DUPLICATE KEY UPDATE 

für weitere Informationen einen Blick auf http://dev.mysql.com/doc/refman/5.1/en/insert.html

+0

Dies ist ein guter Ansatz, wenn Sie vorhaben, für immer bei MySQL zu bleiben. Ich würde stattdessen empfehlen, wo möglich, Standard-SQL zu verwenden. –

0
$qry="INSERT username INTO users"; 
if(!mysql_query($qry)) 
{ 
    if(mysql_errno()=1062) 
    { 
    echo 'Unique costraint violation!'; 
    } 
    else 
    { 
    //other error 
    } 
} 
0
You can try the following example. I would suggest you to try this first in your testing environment then you can implement this in your actual scenario. 

Follow the below steps: 

Step 1: create a table 

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(30) NOT NULL, 
    `email` varchar(50) NOT NULL, 
    `password` varchar(20) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 


Step 2: Run this query multiple times and check that only one row is inserted 

INSERT INTO `student` (`name`, `age`) 
SELECT `name`, `age` FROM `student` 
WHERE NOT EXISTS (SELECT 1 
    FROM `student` 
    WHERE `name` = 'manish' 
    AND `age` = '23' 
    ); 
Verwandte Themen