Schrift
[thread]3669[/thread]

SQL Insert Statement: keine doppelten Eintraege zulassen



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
paidopoieo
 2006-03-31 05:58
#34174 #34174
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
Hi,
Ich hab ein Perl Programm das mir Files ausliest und diese Daten dann in einer mySQL datenbank speichert.
kann ich bevor das insert statement durchgefuehrt wird, irgendwie abfragen ob diejenigen Daten bereits drinnen stehen, gibt es da eine andere moeglichkeit ausser mit einem select statement, wenn ja welche, wenn nicht wie mach ich das genau.....

Dankeschoen im voraus...

mfg
renee
 2006-03-31 09:58
#34175 #34175
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das wirst Du nicht anders machen können als mit einem weiteren SELECT. Außer Du wählst einen geschickten Primary Key, weil dann das Insert einfach fehlschlägt.

Wenn Du immer noch mit Genom-Daten arbeitest, dann würde ich die CRC64-Zahl (wie bei SwissProt) als Primary Key benutzen, weil die für jede Sequenz unterschiedlich ist. Für die Zahl gibt es ein Modul in BioPerl oder Du schaust mal in CPAN:Bio::FASTASequence nach...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2006-03-31 10:29
#34176 #34176
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Du kannst Felder UNIQUE machen. Dann schlägt ein INSERT-Statement fehl, wenn die Daten schon existieren.
pq
 2006-03-31 13:04
#34177 #34177
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
evtl. willst du auch REPLACE. aber du hast leider nicht geschrieben,
was passieren soll, wenn die daten schon vorhanden sind. schau also
in die doku von REPLACE.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
paidopoieo
 2006-03-31 23:27
#34178 #34178
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
hi,
@renee: ich wollte am Anfang die CRC64 Zahl als primary key verwenden...
ich verwende Jakarta Struts, Hibernate und mySQL um die Informationen abzurufen, und bioperl um blast results zu parsen und zu inserten....., jedoch hab ich es leider nicht geschafft mein Hibernate Mapping so hinzubekommen das er mir die CRC Zahl als primary key akzeptiert....so hab ich dann einfach einen auto_increment wert als primary key genommen....

@ptk: heisst das wenn ich einen Spaltennamen als unique bezeichne, dann wird vor jedem insert abgefragt ob dieser Wert schon in der Datenbank vorkommt, oder muss ich die ganze tabelle unique setzen, kann ich das im nachhinein auch noch machen....
paidopoieo
 2006-04-01 01:23
#34179 #34179
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
hi,
hab noch ein anderes problem, wie kann ich ueberpruefen, ob ein insert statement erfolgreich durchgefuehrt wurde, und wenn nicht soll das ganze programm angehalten werden.......
weiters hab ich zwei insert statements, die hintereinander ausgefuehrt werden, ich will erreichen, das, wenn das erste statement nicht ausgefuehrt wird, weil der Eintrag schon drinnen ist, das dann das zweite auch nicht durchgefuehrt wird

es sind nur zwei tabellen, die eine 1:n beziehung haben.....

mfg
ptk
 2006-04-01 01:35
#34180 #34180
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ob INSERT geklappt hat, siehst du am Rückgabewert von do() oder execute(). In $errstr erfährst du den genauen Grund.
paidopoieo
 2006-04-01 05:05
#34181 #34181
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
hi ptk,
ich hab kein do() und execute(), ich verwende das modul Net::MySQL
hab das jetzt folgendermassen gemacht:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$mysql->query(qq{SELECT * FROM protein WHERE accession_code = '$accession_code'});

print $mysql->has_selected_record(), "\n";

if ($mysql->has_selected_record() == 1) {

$id = $mysql->query (qq{INSERT INTO protein (accession_code, name_of_protein, length_of_protein)

VALUES('$accession_code', '$name_of_protein', '$length_of_protein')});

print "return value insert protein: ", $id, "\n";


$id_pep = $mysql->query(qq{INSERT INTO peptide (startpos_in_proteinseq, endpos_in_proteinseq, peptide_seq, expect_val, length_of_peptideseq)

VALUES ('$startpos_in_proteinseq', '$endpos_in_proteinseq', '$peptide_seq', '$expect_val', '$length_of_peptideseq')});

print "return value insert peptide: ", $id_pep, "\n";



print "Affected row:", $mysql->get_affected_rows_length, "\n";
#
print $mysql->get_error_message if $mysql->is_error, "\n";

print "\n";


} else {

print "don't do anything, ENTRY !!!!!!!! is already in the database \n";


}
paidopoieo
 2006-04-01 05:08
#34182 #34182
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
verdammt, ok, so war das jetzt nicht gemeint....
der code laesst sich nicht vernuenftig formatieren.....

meine frage zu dem code...., wenn ich die abfrage mache ob der Eintrag schon drinnen ist, dann funktioniert es nicht.......egal wie ich abfrage, er sagt mir immer das was drinnen ist, obwohl nichts drinnen ist....

mfg
paidopoieo
 2006-04-01 05:52
#34183 #34183
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
ok, hab das jetzt mit unique geloest, funktioniert auch sehr gut, das einzige problem das ich noch habe ist, das er wenn er das erste insert statement nicht ausfuehrt auch das zweite nicht ausfuehren soll....nur weiss ich nicht wie ich das abfragen soll....

mfg
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2006-03-31 05:58.