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