Hallo, Gast |
Du musst dich registrieren bevor du auf unserer Seite Beiträge schreiben kannst.
|
Foren-Statistiken |
» Mitglieder: 1
» Neuestes Mitglied: Joopi
» Foren-Themen: 492
» Foren-Beiträge: 673
Komplettstatistiken
|
Benutzer Online |
Momentan sind 9 Benutzer online » 0 Mitglieder » 5 Gäste Bytespider, DotBot, Google, bot
|
|
|
unique key hinzufügen |
Geschrieben von: Joopi - 07-01-2023, 10:12 - Forum: Programmieren
- Keine Antworten
|
|
Um Doppelerfassung zu vermeiden, bietet es sich an, dass entsprechende Feld auf unique zu setzen. Wird es bei der Erstellung der Tabelle noch nicht erledigt, so kann das nachträglich wie folgt gemacht werden:
Code: ALTER TABLE tabelle ADD UNIQUE ("id");
|
|
|
Tabelle kopieren |
Geschrieben von: Joopi - 07-01-2023, 10:08 - Forum: Programmieren
- Keine Antworten
|
|
Mit nachstehenden MySQL-Befehlen lässt sich eine Tabelle recht einfach in eine andere Datenbank kopieren. In diesem Beispiel werden die Daten von db1 in db2 kopiert.
Zunächst muss die neue Tabelle (mit gleicher Struktur) erstellt werden:
Code: CREATE TABLE db2.newTable LIKE db1.oldTable;
Danach können die Daten in die neue Tabelle kopiert werden:
Code: ALTER TABLE db2.newTable DISABLE KEYS;
Code: INSERT INTO db2.newTable SELECT * FROM db1.oldTable;
Code: ALTER TABLE db2.newTable ENABLE KEYS;
|
|
|
Tabelle create |
Geschrieben von: Joopi - 07-01-2023, 10:07 - Forum: Programmieren
- Keine Antworten
|
|
Sofern ich Tabellen auf der Konsole anlege, benutze ich folgenden Befehl:
Code: CREATE TABLE tabelle (
id integer NOT NULL auto_increment,
text varchar(30) NOT NULL,
beschreibung text NOT NULL,
erfasst datetime NOT NULL,
geaendert timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
primary key(id)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Diese Darstellung ist nur exemplarisch. Wichtig sind für mich die beiden Felder mit Datumsangaben.
|
|
|
Select verstehen und richtig anwenden |
Geschrieben von: Joopi - 07-01-2023, 10:05 - Forum: Programmieren
- Keine Antworten
|
|
Man lernt in der Tat nie aus und immer wieder was neues. Aus allen Lehrbüchern, die ich zu MySQL und/oder PHP gelesen habe, wurde noch nie vermittelt, dass der Befehlsteil SELECT * FROM so in der Form nie verwendet werden soll. Mit dieser Anweisung werden alle Spalten einer Tabelle in die Abfrage aufgenommen, egal, ob sie dann auch genutzt werden oder nicht.
Da selbst die Doku von MySQL diese Schreibweise nutzt, später aber aussagt, dass man es nie in echten Programmen tun soll, haben wohl viele Autoren diese Vereinfachung übernommen. Man soll tatsächlich explizit alle in der Abfrage notwendigen Spalten angeben. Warum das so sein soll, habe ich nach dem Lesen des folgenden Artikels verstanden:
Warum soll ich nicht SELECT * schreiben?
Meine Programme sind zwar klein, und die Tabellenabfragen sind eher einfach, aber ich werde in Zukunft schon darauf achten, die tatsächlich zu nutzenden Spalten in die SELECT-Anweisung aufzunehmen.
|
|
|
Letzten Datensatz ermitteln |
Geschrieben von: Joopi - 07-01-2023, 10:03 - Forum: Programmieren
- Keine Antworten
|
|
Dann und wann ist es notwendig, den letzten Datensatz einer Tabelle zu ermitteln. Meist ist es die ID aus einem Autowert-Feld.
Die einfachste Methode ist eine SELECT-Abfrage mit LIMIT 1 und einer Sortierung mit DESC (aufwärts).
Code: SELECT id FROM tabelle ORDER BY id DESC LIMIT 1;
Diese Methode funktioniert natürlich in allen Scripten entsprechend, die eine Verbindung zu einer MySQL-Datenbank aufbauen können. Im vorliegenden Beispiel benötigte ich den letzten Datensatz eben in einem Shellscript.
Code: lastid=($(mysql -u $user -h $server --password="$pw" $db -e "SELECT id FROM $tabelle1 ORDER BY id DESC LIMIT 1";))
|
|
|
Installation und Rootpasswort |
Geschrieben von: Joopi - 07-01-2023, 09:57 - Forum: Programmieren
- Keine Antworten
|
|
Irgendwie komme ich bei Neuinstallationen immer wieder in Konflikt mit dem Rootpasswort für MariaDB oder MySQL.
Heute, am 01.01.2022, hatte ich versucht, in einer virtuellen Maschine (VirtualBox) einen MariaDB-Server aufzusetzen. Das hat nicht funktioniert. Das Setzen des Rootpassworts wollte nicht gelingen. Dabei fiel mir erst später auf, dass MariaDB gar nicht gestartet worden war. Es gelang mir auch nicht, MariaDB zum Laufen zu bekommen.
Kurzerhand entschied ich mich das gute alte MySQL zu installieren. Das ging sehr gut.
Folgende Befehle setzte ich ab:
Code: sudo apt-get install mysql-server mysql-client
Code: sudo mysql_secure_installation
Bei diesem Befehl hatte MariaDB eine Fehlermeldung ausgegeben. MySQL lief schön durch und ich konnte das Rootpasswort setzen. Doch eine Anmeldung in der Konsole wollte nur gelingen, wenn ich die Anmeldung als Sudo-User vornahm. Das hatte auch den Nachteil, dass ich mich über Adminer im Browser nicht anmelden konnte.
Der Workaround hierzu ist sehr gut auf der folgenden Webseite beschrieben:
can't login as mysql user root from normal user account in ubuntu 16.04
In der Kurzform für mich sind folgende Befehl abzuarbeiten, um dem MySQL-User root wieder normal funktionsfähig zu machen.
Der Sudo-User loggt sich in die MySQL-Konsole ein:
Code: sudo mysql -u root -h localhost -p
Sodann überprüft er, wie der MySQL-User root in der entsprechenden Tabelle der Datenbank mysql steht:
Code: SELECT User,Host FROM mysql.user;
Der User root ist dann zu löschen:
Code: DROP USER 'root'@'localhost';
Der User root ist dann neu anzulegen:
Code: CREATE USER 'root'@'localhost' IDENTIFIED BY 'passwort';
Die komplette Latte an Rechten ist dem User root zu vergeben:
Code: GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
Und dann sind die neuen Berechtigungen sofort auszurollen:
Danach konnte ich mich auf der Konsole als normaler User und Passwort nach MySQL einloggen und in Adminer konnte ich mich auch einloggen mit dem User root und dem neuen Passwort.
Adminer kann nur genutzt werden, wenn der User root ein Passwort hat. Das nur am Rande erwähnt.
|
|
|
Fehlerbehandlung |
Geschrieben von: Joopi - 07-01-2023, 09:51 - Forum: Programmieren
- Keine Antworten
|
|
Wenn über ein HTML(PHP)-Formular Daten in eine Tabelle geschrieben werden sollen, dann sollte auch eine Fehlerbehandlung erfolgen.
Mit diesem Code-Schnipsel kann man die Fehlermeldung und die Fehlernummer anzeigen lassen, die ausgegeben werden, wenn es zu einem Fehler kommen sollte. Der Datensatz sollte dann auch nicht in der Tabelle erscheinen.
PHP-Code: if(mysqli_error($db)) { echo "<p>Das ist der Fehler: " . mysqli_error($db) . " und der Fehlercode:" . mysqli_errno($db) . "</p>"; echo "<a href=\"mail_add.php\"><img border=\"0\" src=\"header_button3.php?text=Mailaddi&font=4\"></a>\n"; }
Die Prüfung erfolgt über die Datenbankverbindugn **\$db**. Die Fehlerausgabe erfolgt mit Klartext und mit Fehlernummer.
|
|
|
Datensätze aller Tabellen in der Datenbank |
Geschrieben von: Joopi - 07-01-2023, 09:49 - Forum: Programmieren
- Keine Antworten
|
|
Wenn man wissen will, wie viele Datensätze in den diversen Tabellen einer Datenbank enthalten sind, kann man das mit einem Befehl ermittlen:
Code: SELECT table_name, table_rows FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'datenbankname';
|
|
|
Datenbank erstellen |
Geschrieben von: Joopi - 07-01-2023, 09:48 - Forum: Programmieren
- Keine Antworten
|
|
Sofern ich Datenbanken auf der Konsole anlege, benutze ich folgenden Befehl:
Code: CREATE DATABASE datenbankname DEFAULT CHARACTER SET utf8 COLLATE utf8mb4_general_ci;
|
|
|
Daten erfassen |
Geschrieben von: Joopi - 07-01-2023, 09:47 - Forum: Programmieren
- Keine Antworten
|
|
Es gibt zwei gute Möglichkeiten, um Datensätze in eine MySQL-Tabelle zu erfassen. Über **INSERT INTO** kann man entweder die **Values**-Variante nehmen (die Erfassung mehrerer Datensätze ist möglich) oder mit **SET** (es kann nur ein Datensatz erfasst werden).
Zwei Varianten der Datenerfassung:
Code: mysql> INSERT INTO tabelle (nname, vname, erfassung) VALUES ("Mustermann","Klaus",NOW());
Code: mysql> INSERT INTO tabelle SET nname="Mustermann", vname="Klaus", erfassung=NOW();
Erklärung:
Wie bereits oben erwähnt ist die SET-Variante ausschließlich für die Erfassung eines einzelnen Datensatzes vorgesehen. Insbesondere Neulinge, die die Syntax von MySQL noch nicht so gut beherrschen, sollten sich in der ersten Zeit mit dieser Anweisung begnügen. Ich spreche da aus Erfahrung.
Update:
Die obige Erklärung habe ich vor ca. 15 Jahren geschrieben. Heute kann ich darüber lachen. Aber wenn man von der Thematik keine Ahnung hat, dann sind die einfachen Formen der Handhabung immer noch die besten. Heutzutage kommt es produktiv nicht mehr vor, dass ich Datensätze via Konsolenbefehl in die Tabellen erfasse. Wenn ich etwas teste, dann kann das vorkommen.
|
|
|
|