ON DUPLICATE KEY
am 15.09.2007 18:29:15 von Albert Hermeling
Guten Abend,
ich bin, was SQL Betrifft, blutiger Anfänger. Um mich jetzt mit SQL vertraut
zu machen habe ich in MySQL (Ver 14.12 Distrib 5.0.26, for suse-linux-gnu
(x86_64)) eine kleine Datenbank Namens test mit der Tabelle foobar
angelegt. Diese Tabelle soll jetzt über die Kommandozeile von MySQL mit
Daten befühlt werden. "Normale" INSERT Anweisungen funktionieren
einwandfrei :-).
Für das neu anlegen bzw. aktualisieren von schon bestehenden Datensetzen
nehme ich folgenden SQL Befehl:
INSERT INTO foobar (index, word, anzahl) VALUES
(8410158949543912268,"albert",1) ON DUPLICATE KEY UPDATE anzahl=anzahl+1;
In der Tabelle foobar sollen in den Spalten index, word, anzahl die Werte
ein 8410158949543912268,"albert",1 eingefügt werden. Ist der
Primärschlüssel index schon vorhanden dann soll die Spalte anzahl um 1
erhöht werden. So weit so gut nur wenn ich den Befehl abschicke bekomme ich
ein "Fehler in der SQL-Syntax" gemeldet.
Es Ist ist warscheinlich ein sehr einfacher Fehler, nur ich komme nicht
drauf :-(. Schon mal danke für die Hilfe.
MfG
Albert
Re: ON DUPLICATE KEY
am 15.09.2007 22:19:51 von Claus Reibenstein
Albert Hermeling schrieb:
> INSERT INTO foobar (index, word, anzahl) VALUES
> (8410158949543912268,"albert",1) ON DUPLICATE KEY UPDATE anzahl=anzahl+1;
^ ^
Setze hier mal einfache Anführungszeichen ein.
> [...] wenn ich den Befehl abschicke bekomme ich
> ein "Fehler in der SQL-Syntax" gemeldet.
Bitte _immer_ die _komplette_ Fehlermeldung im Original zitieren. Das
ist per Copy&Paste schnell erledigt und erleichtert uns, die wir hier
unsere freie Zeit investieren, um Anderen zu helfen, die Arbeit.
> Es Ist ist warscheinlich ein sehr einfacher Fehler, nur ich komme nicht
> drauf :-(
Ist es, und trotzdem habe ich erst einmal eine Weile ratlos davor
gesessen und den Fehler nicht bemerkt, weil "Fehler in der SQL-Syntax"
einfach zu dürftig war.
GruÃ. Claus
Re: ON DUPLICATE KEY
am 15.09.2007 22:53:58 von Andreas Scherbaum
Hallo,
Albert Hermeling wrote:
>
> ich bin, was SQL Betrifft, blutiger Anfänger. Um mich jetzt mit SQL vertraut
> zu machen
Nun ja, möchtest du dich mit MySQL oder mit SQL vertraut machen?
Denn:
> INSERT INTO foobar (index, word, anzahl) VALUES
> (8410158949543912268,"albert",1) ON DUPLICATE KEY UPDATE anzahl=anzahl+1;
>
> In der Tabelle foobar sollen in den Spalten index, word, anzahl die Werte
> ein 8410158949543912268,"albert",1 eingefügt werden. Ist der
> Primärschlüssel index schon vorhanden dann soll die Spalte anzahl um 1
> erhöht werden. So weit so gut nur wenn ich den Befehl abschicke bekomme ich
> ein "Fehler in der SQL-Syntax" gemeldet.
>
> Es Ist ist warscheinlich ein sehr einfacher Fehler, nur ich komme nicht
> drauf :-(. Schon mal danke für die Hilfe.
Der passende (und portable) Weg wäre:
- Transaktion starten
- Prüfen, ob Key vorhanden
- Wenn ja, Update
- Wenn nein, Insert
- Transaktion abschliessen.
SQL 2003 bringt dann wohl auch ein MERGE, mal schauen, wann das seinen Weg
findet.
Bye
--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)
Re: ON DUPLICATE KEY
am 16.09.2007 11:36:48 von dnoeth
Andreas Scherbaum wrote:
> SQL 2003 bringt dann wohl auch ein MERGE, mal schauen, wann das seinen Weg
> findet.
Hat es schon :-)
Zumindest bei Oracle, DB2, Teradata, MS SQL in der nächsten Version
Dieter
Re: ON DUPLICATE KEY
am 16.09.2007 12:34:19 von Andreas Scherbaum
Dieter Noeth wrote:
> Andreas Scherbaum wrote:
>
>> SQL 2003 bringt dann wohl auch ein MERGE, mal schauen, wann das seinen Weg
>> findet.
>
> Hat es schon :-)
> Zumindest bei Oracle, DB2, Teradata, MS SQL in der nächsten Version
Und MySQL?
Darum geht es in dieser Newsgroup imho ;-)
Bye
--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)
Re: ON DUPLICATE KEY
am 17.09.2007 10:19:27 von Albert Hermeling
Andreas Scherbaum wrote:
> Hallo,
>
> Albert Hermeling wrote:
>>
>> ich bin, was SQL Betrifft, blutiger Anfänger. Um mich jetzt mit SQL
>> vertraut zu machen
>
> Nun ja, möchtest du dich mit MySQL oder mit SQL vertraut machen?
> Denn:
Ich möchte mich mit MySQL vertraut machen. Daher ist die Portabilität erst
mal zweitrangig.
MfG
Albert
Re: ON DUPLICATE KEY
am 17.09.2007 10:36:17 von Albert Hermeling
Claus Reibenstein wrote:
> Albert Hermeling schrieb:
Guten Morgen Claus,
>> INSERT INTO foobar (index, word, anzahl) VALUES
>> (8410158949543912268,"albert",1) ON DUPLICATE KEY UPDATE anzahl=anzahl+1;
> ^ ^
>
> Setze hier mal einfache Anführungszeichen ein.
Also wenn ich einfache Anführungszeichen | ' | in die Zahl einfüge gibt es
bei mir den gleichen SQL-Fehler. Vieleicht werden die beiden Caret Zeichen
nicht an der Richtigen Position dargestellt. Bei mir Funktionierts nicht.
> Bitte _immer_ die _komplette_ Fehlermeldung im Original zitieren.
Hier noch mal der SQL-Befehl der den Fehler produziert:
INSERT INTO foobar (index, word, anzahl) VALUES
(8410158949543912268, 'albert', 1) ON DUPLICATE KEY UPDATE anzahl = anzahl
+ 1;
Hier die komplette Fehlermeldung:
ERROR 1064 (42000): Fehler in der SQL-Syntax. Bitte die korrekte Syntax im
Handbuch nachschlagen bei 'index, word, anzahl) VALUES
(8410158949543912268, 'albert', 1) ON DUPLICATE KEY ' in Zeile 1
Hier das Chreate Skript das die Tabelle foobar in der Datenbnak test
erzeugt:
CREATE TABLE `foobar` (
`index` bigint(20) NOT NULL COMMENT 'Zum Testen',
`word` varchar(60) NOT NULL COMMENT 'Das Word',
`anzahl` int(11) NOT NULL COMMENT 'Anzahl der Wörter',
PRIMARY KEY (`index`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
>
>> Es Ist ist warscheinlich ein sehr einfacher Fehler, nur ich komme nicht
>> drauf :-(
>
> Ist es, und trotzdem habe ich erst einmal eine Weile ratlos davor
Tja und ich bin immer noch ratlos und ein bisschen genervt über meine eigene
Blödheit :-((
MfG
Albert
Re: ON DUPLICATE KEY
am 17.09.2007 12:36:18 von Axel Schwenke
Albert Hermeling wrote:
>
> Hier die komplette Fehlermeldung:
>
> ERROR 1064 (42000): Fehler in der SQL-Syntax. Bitte die korrekte Syntax im
> Handbuch nachschlagen bei 'index, word, anzahl) VALUES
> (8410158949543912268, 'albert', 1) ON DUPLICATE KEY ' in Zeile 1
"index" ist ein reserviertes Wort. Mußt du in `Backticks` setzen, damit
MySQL das als Bezeichner akzeptiert.
XL
Re: ON DUPLICATE KEY
am 17.09.2007 14:35:09 von Claus Reibenstein
Albert Hermeling schrieb:
> Claus Reibenstein wrote:
>
>> Bitte _immer_ die _komplette_ Fehlermeldung im Original zitieren.
>
> Hier die komplette Fehlermeldung:
Na also. Geht doch ;-)
> ERROR 1064 (42000): Fehler in der SQL-Syntax. Bitte die korrekte Syntax im
> Handbuch nachschlagen bei 'index, word, anzahl) VALUES
Hier wird das Problem sofort offensichtlich: Er stört sich an dem Wort
"index". Dies ist ein reserviertes Wort.
Wenn Du reservierte Wörter als Bezeichner verwenden möchtest, musst Du
diese in `Backticks` setzen.
>>> Es Ist ist warscheinlich ein sehr einfacher Fehler, [...]
>>
>> Ist es, [...]
>
> Tja und ich bin immer noch ratlos und ein bisschen genervt über meine eigene
> Blödheit :-((
Tja, und hättest Du _gleich_ die komplette Fehlermeldung gepostet,
hätten wir Dir _sofort_ sagen können, was falsch ist.
GruÃ. Claus