von der Befehlszeile in die Datenbank
von der Befehlszeile in die Datenbank
am 03.10.2006 20:48:27 von Erhard Rainer
Hallo.
Ich weiß zwar nicht genau ob das ueberhaupt geht, aber vielleicht geht es
ja und ich habe bei google vollkommen falsch gesucht.
Ich habe einige Linux Shell-Skripte die irgendwelche Statuswerte liefern,
die ich derzeit in eine Textdatei schreibe. Auf Dauer ist das jedoch nicht
zufriedenstellend. Daher habe ich mir gedacht, dass man diese
Statusvariablen auch in eine MySQL-Datenbank schreiben koennte.
Gibt es irgendwo eine gute Anleitung, wie man derartige Daten von der
Befehlszeile in die MySQL-Datenbank bringt.
Ich bin mir sicher, dass das geht, nur habe ich scheinbar die falschen
Suchworte verwendet.
Danke im voraus.
Erhard
Re: von der Befehlszeile in die Datenbank
am 03.10.2006 21:22:58 von Bernhard Kornberger
Erhard Rainer schrieb:
> Ich habe einige Linux Shell-Skripte die irgendwelche Statuswerte liefern,
> die ich derzeit in eine Textdatei schreibe. Auf Dauer ist das jedoch nicht
> zufriedenstellend. Daher habe ich mir gedacht, dass man diese
> Statusvariablen auch in eine MySQL-Datenbank schreiben koennte.
>
> Gibt es irgendwo eine gute Anleitung, wie man derartige Daten von der
> Befehlszeile in die MySQL-Datenbank bringt.
Sicher, z.B. so:
mysql -u Username -p"Passwd" -e "use dbName;update LOW_PRIORITY
tableName set max_results_day=${SMALLDAILYLIMIT} where id=${HOSTID};"
dabei sind ${SMALLDAILYLIMIT} und ${HOSTID} Shellvariable.
hth
Bernhard
Re: von der Befehlszeile in die Datenbank
am 03.10.2006 21:28:16 von Weinzierl Stefan
Erhard Rainer wrote:
> Hallo.
>
> Ich weiß zwar nicht genau ob das ueberhaupt geht, aber vielleicht geht es
> ja und ich habe bei google vollkommen falsch gesucht.
>
> Ich habe einige Linux Shell-Skripte die irgendwelche Statuswerte liefern,
> die ich derzeit in eine Textdatei schreibe. Auf Dauer ist das jedoch nicht
> zufriedenstellend. Daher habe ich mir gedacht, dass man diese
> Statusvariablen auch in eine MySQL-Datenbank schreiben koennte.
>
> Gibt es irgendwo eine gute Anleitung, wie man derartige Daten von der
> Befehlszeile in die MySQL-Datenbank bringt.
man mysql
mysql -e "INSERT INTO ...."
Stefan
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 00:18:21 von Erhard Rainer
Weinzierl Stefan
> mysql -e "INSERT INTO ...."
Sorry, aber so ganz verstehe ich die Syntax noch immer nicht.
Ich habe eine Tabelle mit 5 Spalten: Nr (Autowert), Name, Datum
(current_timestamp), Art, Artnr.
Nun lasse ich mir vom Skript eine sql-Datei generieren:
> INSERT INTO 'Tabellenname' ('Nr','Name','Datum','Art','Artnr')
> VALUES (NULL,'$Var1','CURRENT_TIMESTAMP','Multimedia','452')
und diese will ich dann importieren:
> /opt/lampp/bin/mysql --passwod=... --user=... verwaltung < /pfad/xy.sql
MySQL meldet jedoch Error 1064 (42000) at line 1: You have an error in your
SQL syntax....
Irgendwie scheine ich dafuer zu bloed zu sein.
Danke im voraus.
Erhard
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 00:22:54 von Christian Kirsch
Erhard Rainer schrieb:
> Weinzierl Stefan
>> mysql -e "INSERT INTO ...."
>
> Sorry, aber so ganz verstehe ich die Syntax noch immer nicht.
>
> Ich habe eine Tabelle mit 5 Spalten: Nr (Autowert), Name, Datum
> (current_timestamp), Art, Artnr.
>
> Nun lasse ich mir vom Skript eine sql-Datei generieren:
>> INSERT INTO 'Tabellenname' ('Nr','Name','Datum','Art','Artnr')
Das *ist* kein SQL. Tabellenspalten stehen nie nicht in
Anführungszeichen, auch nicht in einfachen. Die Dokumentation zu MySQL
findest Du (einschl. eines guten Tutorials) unter dev.mysql.com/doc
>> VALUES (NULL,'$Var1','CURRENT_TIMESTAMP','Multimedia','452')
>
Auch Integer schreibt man nicht in Anführungszeichen. Ebenso wenig
Funktionsnamen wie CURRENT_TIMESTAMP (warum hast Du eigentlich NULL
nicht gequoted?)
> und diese will ich dann importieren:
>> /opt/lampp/bin/mysql --passwod=... --user=... verwaltung < /pfad/xy.sql
>
> MySQL meldet jedoch Error 1064 (42000) at line 1: You have an error in your
> SQL syntax....
>
> Irgendwie scheine ich dafuer zu bloed zu sein.
Irgendwie scheinst Du die Dokumentation nicht gelesen zu haben.
Aber das lässt sich ja nachholen.
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 08:43:11 von Johannes Vogel
Hi Erhard, Christian
Christian Kirsch wrote:
> Erhard Rainer schrieb:
>> Weinzierl Stefan
>>> mysql -e "INSERT INTO ...."
>> Sorry, aber so ganz verstehe ich die Syntax noch immer nicht.
>> Ich habe eine Tabelle mit 5 Spalten: Nr (Autowert), Name, Datum
>> (current_timestamp), Art, Artnr.
>> Nun lasse ich mir vom Skript eine sql-Datei generieren:
>>> INSERT INTO 'Tabellenname' ('Nr','Name','Datum','Art','Artnr')
> Das *ist* kein SQL. Tabellenspalten stehen nie nicht in
> Anführungszeichen, auch nicht in einfachen. Die Dokumentation zu MySQL
> findest Du (einschl. eines guten Tutorials) unter dev.mysql.com/doc
Um langen Diskussionen vorzubeugen: In der Dokumentation werden "`"
(Backticks) verwendet. Die braucht man normalerweise nicht (ausser man
wählt Bezeichnungen mit Sonderzeichen). Backticks sind aber nicht
gleichzusetzen mit Single Quotes '.
HTH, Johannes
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 08:51:27 von Christian Kirsch
Johannes Vogel schrieb:
> Hi Erhard, Christian
>
> Christian Kirsch wrote:
>> Erhard Rainer schrieb:
>>> Weinzierl Stefan
>>>> mysql -e "INSERT INTO ...."
>>> Sorry, aber so ganz verstehe ich die Syntax noch immer nicht.
>>> Ich habe eine Tabelle mit 5 Spalten: Nr (Autowert), Name, Datum
>>> (current_timestamp), Art, Artnr.
>>> Nun lasse ich mir vom Skript eine sql-Datei generieren:
>>>> INSERT INTO 'Tabellenname' ('Nr','Name','Datum','Art','Artnr')
>> Das *ist* kein SQL. Tabellenspalten stehen nie nicht in
>> Anführungszeichen, auch nicht in einfachen. Die Dokumentation zu MySQL
>> findest Du (einschl. eines guten Tutorials) unter dev.mysql.com/doc
>
> Um langen Diskussionen vorzubeugen: In der Dokumentation werden "`"
> (Backticks) verwendet.
Wo? Auf http://dev.mysql.com/doc/refman/5.0/en/insert.html stehen `
lediglich in den Benutzerkommentaren, und die sind nicht relevant.
Auch in http://dev.mysql.com/doc/refman/5.0/en/loading-tables.html
tauchen keine Backticks auf.
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 10:11:14 von Claus Reibenstein
Johannes Vogel schrieb:
> Um langen Diskussionen vorzubeugen: In der Dokumentation werden "`"
> (Backticks) verwendet. Die braucht man normalerweise nicht (ausser man
> wählt Bezeichnungen mit Sonderzeichen).
Oder reservierte Wörter als Namen.
Gruß. Claus
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 10:17:17 von Claus Reibenstein
Christian Kirsch schrieb:
> Erhard Rainer schrieb:
>
>> Weinzierl Stefan
>>
>>> INSERT INTO 'Tabellenname' ('Nr','Name','Datum','Art','Artnr')
>
> Das *ist* kein SQL. Tabellenspalten stehen nie nicht in
> Anführungszeichen, auch nicht in einfachen. Die Dokumentation zu MySQL
> findest Du (einschl. eines guten Tutorials) unter dev.mysql.com/doc
Ob ihm das hilft? Ein (zusätzlicher) Hinweis auf die Verwendung von ``
statt '' wäre sicher hilfreicher gewesen.
>>> VALUES (NULL,'$Var1','CURRENT_TIMESTAMP','Multimedia','452')
>
> Auch Integer schreibt man nicht in Anführungszeichen.
Kann man aber. Ist nicht verkehrt. Erleichtert die programmgesteuerte
Generierung von SQL-Kommandos per PHP, C und dergleichen. Außerdem
wissen wir nicht, wie `Artnr` definiert ist. Wenn es CHAR oder VARCHAR
ist, _muss_ der Wert in Anführungszeichen.
> warum hast Du eigentlich NULL nicht gequoted?
Weil das ein anderer Wert wäre.
Gruß. Claus
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 10:24:05 von Claus Reibenstein
Christian Kirsch schrieb:
> Johannes Vogel schrieb:
>
>> Um langen Diskussionen vorzubeugen: In der Dokumentation werden "`"
>> (Backticks) verwendet.
>
> Wo?
http://dev.mysql.com/doc/refman/5.0/en/legal-names.html
Gruß. Claus
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 10:29:26 von Andreas Scherbaum
Christian Kirsch wrote:
> Johannes Vogel schrieb:
>>
>> Um langen Diskussionen vorzubeugen: In der Dokumentation werden "`"
>> (Backticks) verwendet.
>
> Wo? Auf http://dev.mysql.com/doc/refman/5.0/en/insert.html stehen `
> lediglich in den Benutzerkommentaren, und die sind nicht relevant.
>
> Auch in http://dev.mysql.com/doc/refman/5.0/en/loading-tables.html
> tauchen keine Backticks auf.
Aber mysqldump verwendet sie per Default für alle Spalten und Namen,
von daher kann das nicht ganz falsch sein ;-)
Bye
--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 11:34:09 von dnoeth
Andreas Scherbaum wrote:
> Aber mysqldump verwendet sie per Default für alle Spalten und Namen,
> von daher kann das nicht ganz falsch sein ;-)
Vermutlich damit die Inserts garantiert für kein anderes DBMS verwendbar
sind :-)
Wenn schon, dann nimmt man statt Backticks '`' Double Quotes '"', aber
das wäre ja wieder Standard SQL und soweit muss man ja doch nicht gehen.
Dieter
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 12:23:22 von Axel Schwenke
Dieter Noeth wrote:
> Andreas Scherbaum wrote:
>
>> Aber mysqldump verwendet sie per Default für alle Spalten und Namen,
>> von daher kann das nicht ganz falsch sein ;-)
>
> Vermutlich damit die Inserts garantiert für kein anderes DBMS verwendbar
> sind :-)
> Wenn schon, dann nimmt man statt Backticks '`' Double Quotes '"', aber
> das wäre ja wieder Standard SQL und soweit muss man ja doch nicht gehen.
Immer diese Gewohnheitsmeckerer. Und blind noch dazu ;-)
~ $mysqldump --compatible=ansi test
....
CREATE TABLE "t1" (
"c1" int(11) default NULL,
"c2" char(10) default NULL
);
INSERT INTO "t1" VALUES (42,'foo');
....
XL
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 12:44:46 von dnoeth
Axel Schwenke wrote:
> Immer diese Gewohnheitsmeckerer. Und blind noch dazu ;-)
>
>
> ~ $mysqldump --compatible=ansi test
> ...
> CREATE TABLE "t1" (
> "c1" int(11) default NULL,
> "c2" char(10) default NULL
> );
>
> INSERT INTO "t1" VALUES (42,'foo');
Da gibt's immer noch genug zu meckern :-)
Double Quotes sind nur dann nötig, wenn der Bezeichner sonst nicht
gültig ist. Und als üblen Nebeneffekt machen sie Bezeichner
Case-sensitiv und das will ja wirklich niemand.
Und "default NULL" ist überflüssig, denn das ist ja sowieso der Default.
Dieter
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 13:07:14 von Claus Reibenstein
Dieter Noeth schrieb:
> Da gibt's immer noch genug zu meckern :-)
>
> Double Quotes sind nur dann nötig, wenn der Bezeichner sonst nicht
> gültig ist. Und als üblen Nebeneffekt machen sie Bezeichner
> Case-sensitiv und das will ja wirklich niemand.
Sind Bezeichner nicht sowieso case-sensitiv?
> Und "default NULL" ist überflüssig, denn das ist ja sowieso der Default.
Es steht Dir frei, mysqldump so umzuschreiben, dass es alle möglichen
Fälle prüft und die Ausgabe auf das allernotwendigste beschränkt. Fragt
sich nur, wozu das gut sein soll.
Gruß. Claus
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 13:39:57 von dnoeth
Claus Reibenstein wrote:
>> Double Quotes sind nur dann nötig, wenn der Bezeichner sonst nicht
>> gültig ist. Und als üblen Nebeneffekt machen sie Bezeichner
>> Case-sensitiv und das will ja wirklich niemand.
>
> Sind Bezeichner nicht sowieso case-sensitiv?
Nö, das ist doch kein C.
Und selbst da kann ich nicht verstehen, wer auf so eine Idee gekommen
ist :-)
>> Und "default NULL" ist überflüssig, denn das ist ja sowieso der Default.
>
> Es steht Dir frei, mysqldump so umzuschreiben, dass es alle möglichen
> Fälle prüft und die Ausgabe auf das allernotwendigste beschränkt. Fragt
> sich nur, wozu das gut sein soll.
Ich hab's halt gerne, wenn's Standard SQL ist...
Dieter
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 15:12:01 von Claus Reibenstein
Dieter Noeth schrieb:
> Claus Reibenstein wrote:
>
>> Sind Bezeichner nicht sowieso case-sensitiv?
>
> Nö, das ist doch kein C.
Was hat das damit zu tun?
> Und selbst da kann ich nicht verstehen, wer auf so eine Idee gekommen
> ist :-)
Das ist bei vielen Sprachen und Betriebssystemen ganz normal. Die
gesamte Unix-Welt ist z.B. case-sensitiv. Dass MySQL bei Bezeichnern
_nicht_ case-sensitiv ist, halte ich sogar für einen Schwachpunkt.
Gruß. Claus
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 15:48:19 von Johannes Vogel
Hi Claus
Claus Reibenstein wrote:
> Dieter Noeth schrieb:
>> Claus Reibenstein wrote:
>>> Sind Bezeichner nicht sowieso case-sensitiv?
Nur Tabellennamen und DBs, Spalten nicht.
>> Und selbst da kann ich nicht verstehen, wer auf so eine Idee gekommen
>> ist :-)
> Das ist bei vielen Sprachen und Betriebssystemen ganz normal. Die
> gesamte Unix-Welt ist z.B. case-sensitiv. Dass MySQL bei Bezeichnern
> _nicht_ case-sensitiv ist, halte ich sogar für einen Schwachpunkt.
Wo ist der Zusammenhang zwischen DBS und Unix?
Welches andere DBS ist auch case-sensitiv?
Johannes
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 16:02:30 von Claus Reibenstein
Johannes Vogel schrieb:
> Claus Reibenstein wrote:
>
>> Dieter Noeth schrieb:
>>
>>> Claus Reibenstein wrote:
>>>
>>>> Sind Bezeichner nicht sowieso case-sensitiv?
>
> Nur Tabellennamen und DBs, Spalten nicht.
Irgendwie ist das inkonsequent.
>>> Und selbst da kann ich nicht verstehen, wer auf so eine Idee gekommen
>>> ist :-)
>>
>> Das ist bei vielen Sprachen und Betriebssystemen ganz normal. Die
>> gesamte Unix-Welt ist z.B. case-sensitiv. Dass MySQL bei Bezeichnern
>> _nicht_ case-sensitiv ist, halte ich sogar für einen Schwachpunkt.
>
> Wo ist der Zusammenhang zwischen DBS und Unix?
Bitte beachte den Kontext! Dieters Aussage bezog sich weder auf DBS noch
auf Unix, sondern auf C. Darauf bezog sich meine Antwort.
Wo ist der Zusammenhang zwischen DBS und C?
Gruß. Claus
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 19:32:54 von Johannes Vogel
Hi Claus
Claus Reibenstein wrote:
> Johannes Vogel schrieb:
>> Claus Reibenstein wrote:
>>> Dieter Noeth schrieb:
>>>> Claus Reibenstein wrote:
>>>>> Sind Bezeichner nicht sowieso case-sensitiv?
>> Nur Tabellennamen und DBs, Spalten nicht.
> Irgendwie ist das inkonsequent.
Korrekt. Hat aber wohl mit dem Zugriff auf die Daten zu tun. Hier macht
sich die Abhängigkeit zu Unices bzw. case sensitiven Filesystemen wohl
bemerkbar. Aber wem erzähl ich das?
>>>> Und selbst da kann ich nicht verstehen, wer auf so eine Idee gekommen
>>>> ist :-)
>>> Das ist bei vielen Sprachen und Betriebssystemen ganz normal. Die
>>> gesamte Unix-Welt ist z.B. case-sensitiv. Dass MySQL bei Bezeichnern
>>> _nicht_ case-sensitiv ist, halte ich sogar für einen Schwachpunkt.
>> Wo ist der Zusammenhang zwischen DBS und Unix?
> Bitte beachte den Kontext! Dieters Aussage bezog sich weder auf DBS noch
> auf Unix, sondern auf C. Darauf bezog sich meine Antwort.
Ok...
> Wo ist der Zusammenhang zwischen DBS und C?
Es ist derselbe, wie zwischen DBS und Unix: dummred. :-)
SQL ist aber IMHO case insensitive. IMHO muss sich MySQL aber durch die
Art der Datenablage an die Filesysteme halten. Jaja, natürlich kann man
auch InnoDB benutzen, etc. Aber eben... Generell...
Johannes
Re: von der Befehlszeile in die Datenbank
am 04.10.2006 20:15:55 von Kris
Johannes Vogel wrote:
> Korrekt. Hat aber wohl mit dem Zugriff auf die Daten zu tun. Hier macht
> sich die Abhängigkeit zu Unices bzw. case sensitiven Filesystemen wohl
> bemerkbar. Aber wem erzähl ich das?
Ihr wollt
[mysqld]
lower_case_table_names = 1
Kris