MySQL - Kurzanleitung

Was ist eine Datenbank?

Eine Datenbank ist eine separate Anwendung, in der eine Sammlung von Daten gespeichert wird. Jede Datenbank verfügt über eine oder mehrere unterschiedliche APIs zum Erstellen, Zugreifen auf, Verwalten, Suchen und Replizieren der darin enthaltenen Daten.

Es können auch andere Arten von Datenspeichern verwendet werden, z. B. Dateien im Dateisystem oder große Hash-Tabellen im Speicher, aber das Abrufen und Schreiben von Daten wäre mit diesen Systemtypen nicht so schnell und einfach.

Heutzutage verwenden wir relationale Datenbankverwaltungssysteme (RDBMS), um große Datenmengen zu speichern und zu verwalten. Dies wird als relationale Datenbank bezeichnet, da alle Daten in verschiedenen Tabellen gespeichert werden und Beziehungen mithilfe von Primärschlüsseln oder anderen Schlüsseln hergestellt werden, die als bezeichnet werdenForeign Keys.

EIN Relational DataBase Management System (RDBMS) ist eine Software, die -

  • Ermöglicht die Implementierung einer Datenbank mit Tabellen, Spalten und Indizes.

  • Garantiert die referenzielle Integrität zwischen Zeilen verschiedener Tabellen.

  • Aktualisiert die Indizes automatisch.

  • Interpretiert eine SQL-Abfrage und kombiniert Informationen aus verschiedenen Tabellen.

RDBMS-Terminologie

Bevor wir mit der Erläuterung des MySQL-Datenbanksystems fortfahren, lassen Sie uns einige Definitionen in Bezug auf die Datenbank überarbeiten.

  • Database - Eine Datenbank ist eine Sammlung von Tabellen mit zugehörigen Daten.

  • Table- Eine Tabelle ist eine Matrix mit Daten. Eine Tabelle in einer Datenbank sieht aus wie eine einfache Tabelle.

  • Column - Eine Spalte (Datenelement) enthält ein und dieselbe Art von Daten, beispielsweise die Postleitzahl der Spalte.

  • Row - Eine Zeile (= Tupel, Eintrag oder Datensatz) ist eine Gruppe zusammengehöriger Daten, z. B. die Daten eines Abonnements.

  • Redundancy - Speichern Sie Daten zweimal redundant, um das System schneller zu machen.

  • Primary Key- Ein Primärschlüssel ist eindeutig. Ein Schlüsselwert kann nicht zweimal in einer Tabelle vorkommen. Mit einem Schlüssel können Sie nur eine Zeile finden.

  • Foreign Key - Ein Fremdschlüssel ist der Verbindungsstift zwischen zwei Tabellen.

  • Compound Key - Ein zusammengesetzter Schlüssel (zusammengesetzter Schlüssel) ist ein Schlüssel, der aus mehreren Spalten besteht, da eine Spalte nicht eindeutig genug ist.

  • Index - Ein Index in einer Datenbank ähnelt einem Index am Ende eines Buches.

  • Referential Integrity - Die referenzielle Integrität stellt sicher, dass ein Fremdschlüsselwert immer auf eine vorhandene Zeile verweist.

MySQL-Datenbank

MySQL ist ein schnelles, benutzerfreundliches RDBMS, das für viele kleine und große Unternehmen verwendet wird. MySQL wird von MySQL AB, einem schwedischen Unternehmen, entwickelt, vermarktet und unterstützt. MySQL wird aus vielen guten Gründen immer beliebter -

  • MySQL wird unter einer Open-Source-Lizenz veröffentlicht. Sie müssen also nichts bezahlen, um es zu verwenden.

  • MySQL ist ein sehr leistungsfähiges Programm für sich. Es verarbeitet einen großen Teil der Funktionalität der teuersten und leistungsstärksten Datenbankpakete.

  • MySQL verwendet eine Standardform der bekannten SQL-Datensprache.

  • MySQL funktioniert unter vielen Betriebssystemen und mit vielen Sprachen, einschließlich PHP, PERL, C, C ++, JAVA usw.

  • MySQL funktioniert sehr schnell und funktioniert auch bei großen Datenmengen gut.

  • MySQL ist sehr freundlich zu PHP, der beliebtesten Sprache für die Webentwicklung.

  • MySQL unterstützt große Datenbanken mit bis zu 50 Millionen Zeilen oder mehr in einer Tabelle. Die Standardbeschränkung für die Dateigröße einer Tabelle beträgt 4 GB. Sie können diese jedoch (sofern Ihr Betriebssystem damit umgehen kann) auf eine theoretische Beschränkung von 8 Millionen Terabyte (TB) erhöhen.

  • MySQL ist anpassbar. Mit der Open-Source-GPL-Lizenz können Programmierer die MySQL-Software an ihre spezifischen Umgebungen anpassen.

Bevor Sie beginnen

Bevor Sie mit diesem Tutorial beginnen, sollten Sie über Grundkenntnisse der Informationen in unseren PHP- und HTML-Tutorials verfügen.

Dieses Tutorial konzentriert sich stark auf die Verwendung von MySQL in einer PHP-Umgebung. Viele Beispiele in diesem Tutorial sind für PHP-Programmierer hilfreich.

Wir empfehlen Ihnen, unser PHP-Tutorial als Referenz zu lesen .

Alle Downloads für MySQL finden Sie unter MySQL Downloads . Wählen Sie die Versionsnummer vonMySQL Community Server Dies ist zusammen mit der Plattform erforderlich, auf der Sie es ausführen werden.

Installation von MySQL unter Linux / UNIX

Die empfohlene Methode zur Installation von MySQL auf einem Linux-System ist RPM. MySQL AB stellt die folgenden RPMs auf seiner Website zum Download bereit:

  • MySQL - Der MySQL-Datenbankserver verwaltet die Datenbanken und Tabellen, steuert den Benutzerzugriff und verarbeitet die SQL-Abfragen.

  • MySQL-client - MySQL-Client-Programme, die es ermöglichen, eine Verbindung zum Server herzustellen und mit ihm zu interagieren.

  • MySQL-devel - Bibliotheken und Header-Dateien, die beim Kompilieren anderer Programme, die MySQL verwenden, nützlich sind.

  • MySQL-shared - Freigegebene Bibliotheken für den MySQL-Client.

  • MySQL-bench - Benchmark- und Leistungstest-Tools für den MySQL-Datenbankserver.

Die hier aufgeführten MySQL-RPMs basieren alle auf a SuSE Linux system, aber sie funktionieren normalerweise problemlos mit anderen Linux-Varianten.

Jetzt müssen Sie die folgenden Schritte ausführen, um mit der Installation fortzufahren.

  • Melden Sie sich mit dem am System an root Nutzer.

  • Wechseln Sie in das Verzeichnis mit den RPMs.

  • Installieren Sie den MySQL-Datenbankserver, indem Sie den folgenden Befehl ausführen. Denken Sie daran, den Dateinamen kursiv durch den Dateinamen Ihres RPM zu ersetzen.

[root@host]# rpm -i MySQL-5.0.9-0.i386.rpm

Mit dem obigen Befehl wird der MySQL-Server installiert, ein Benutzer von MySQL erstellt, die erforderliche Konfiguration erstellt und der MySQL-Server automatisch gestartet.

Sie finden alle MySQL-bezogenen Binärdateien in / usr / bin und / usr / sbin. Alle Tabellen und Datenbanken werden im Verzeichnis / var / lib / mysql erstellt.

Das folgende Codefeld enthält einen optionalen, aber empfohlenen Schritt, um die verbleibenden RPMs auf dieselbe Weise zu installieren:

[root@host]# rpm -i MySQL-client-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-devel-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-shared-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-bench-5.0.9-0.i386.rpm

Installation von MySQL unter Windows

Die Standardinstallation unter jeder Windows-Version ist jetzt viel einfacher als früher, da MySQL jetzt ordentlich mit einem Installationsprogramm geliefert wird. Laden Sie einfach das Installationspaket herunter, entpacken Sie es an einer beliebigen Stelle und führen Sie die Datei setup.exe aus.

Das Standardinstallationsprogramm setup.exe führt Sie durch den einfachen Prozess und installiert standardmäßig alles unter C: \ mysql.

Testen Sie den Server, indem Sie ihn beim ersten Mal über die Eingabeaufforderung starten. Gehen Sie zum Ort desmysqld server Das ist wahrscheinlich C: \ mysql \ bin, und geben Sie -

mysqld.exe --console

NOTE - Wenn Sie unter NT arbeiten, müssen Sie mysqld-nt.exe anstelle von mysqld.exe verwenden

Wenn alles gut gegangen ist, werden einige Meldungen zum Start und angezeigt InnoDB. Wenn nicht, liegt möglicherweise ein Berechtigungsproblem vor. Stellen Sie sicher, dass das Verzeichnis, in dem sich Ihre Daten befinden, für jeden Benutzer (wahrscheinlich MySQL) zugänglich ist, unter dem die Datenbankprozesse ausgeführt werden.

MySQL fügt sich nicht selbst in das Startmenü ein, und es gibt auch keine besonders schöne GUI-Möglichkeit, den Server zu stoppen. Wenn Sie dazu neigen, den Server durch Doppelklicken auf die ausführbare Datei von mysqld zu starten, sollten Sie daher daran denken, den Prozess manuell mithilfe von mysqladmin, Task List, Task Manager oder anderen Windows-spezifischen Mitteln anzuhalten.

Überprüfen der MySQL-Installation

Nachdem MySQL erfolgreich installiert wurde, wurden die Basistabellen initialisiert und der Server gestartet: Sie können anhand einiger einfacher Tests überprüfen, ob alles ordnungsgemäß funktioniert.

Verwenden Sie das Dienstprogramm mysqladmin, um den Serverstatus abzurufen

Verwenden mysqladminbinär, um die Serverversion zu überprüfen. Diese Binärdatei wäre unter Linux in / usr / bin und unter Windows in C: \ mysql \ bin verfügbar.

[root@host]# mysqladmin --version

Unter Linux wird das folgende Ergebnis erzielt. Dies kann je nach Installation variieren.

mysqladmin  Ver 8.23 Distrib 5.0.9-0, for redhat-linux-gnu on i386

Wenn Sie eine solche Meldung nicht erhalten, liegt möglicherweise ein Problem in Ihrer Installation vor, und Sie benötigen Hilfe, um das Problem zu beheben.

Führen Sie einfache SQL-Befehle mit dem MySQL-Client aus

Sie können über den MySQL-Client und mithilfe von eine Verbindung zu Ihrem MySQL-Server herstellen mysqlBefehl. In diesem Moment müssen Sie kein Passwort eingeben, da es standardmäßig leer ist.

Sie können einfach den folgenden Befehl verwenden:

[root@host]# mysql

Es sollte mit einer mysql> Eingabeaufforderung belohnt werden. Jetzt sind Sie mit dem MySQL-Server verbunden und können alle SQL-Befehle an der Eingabeaufforderung mysql> wie folgt ausführen:

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
|   mysql  | 
|   test   |  
+----------+
2 rows in set (0.13 sec)

Schritte nach der Installation

MySQL wird mit einem leeren Passwort für den Root-MySQL-Benutzer geliefert. Sobald Sie die Datenbank und den Client erfolgreich installiert haben, müssen Sie ein Root-Passwort festlegen, wie im folgenden Codeblock angegeben:

[root@host]# mysqladmin -u root password "new_password";

Um nun eine Verbindung zu Ihrem MySQL-Server herzustellen, müssten Sie den folgenden Befehl verwenden:

[root@host]# mysql -u root -p
Enter password:*******

UNIX-Benutzer möchten auch Ihr MySQL-Verzeichnis in Ihren PATH einfügen, damit Sie nicht jedes Mal, wenn Sie den Befehlszeilenclient verwenden möchten, den vollständigen Pfad eingeben müssen.

Für Bash wäre es so etwas wie -

export PATH = $PATH:/usr/bin:/usr/sbin

Ausführen von MySQL beim Booten

Wenn Sie den MySQL-Server beim Booten ausführen möchten, stellen Sie sicher, dass Sie den folgenden Eintrag in der Datei /etc/rc.local haben.

/etc/init.d/mysqld start

Außerdem sollte sich die mysqld-Binärdatei im Verzeichnis /etc/init.d/ befinden.

Ausführen und Herunterfahren von MySQL Server

Überprüfen Sie zunächst, ob Ihr MySQL-Server ausgeführt wird oder nicht. Sie können den folgenden Befehl verwenden, um dies zu überprüfen:

ps -ef | grep mysqld

Wenn Ihr MySQL ausgeführt wird, werden Sie sehen mysqldProzess in Ihrem Ergebnis aufgeführt. Wenn der Server nicht ausgeführt wird, können Sie ihn mit dem folgenden Befehl starten:

root@host# cd /usr/bin
./safe_mysqld &

Wenn Sie nun einen bereits laufenden MySQL-Server herunterfahren möchten, können Sie dies mit dem folgenden Befehl tun:

root@host# cd /usr/bin
./mysqladmin -u root -p shutdown
Enter password: ******

Einrichten eines MySQL-Benutzerkontos

Um einen neuen Benutzer zu MySQL hinzuzufügen, müssen Sie lediglich einen neuen Eintrag zum hinzufügen user Tabelle in der Datenbank mysql.

Das folgende Programm ist ein Beispiel für das Hinzufügen eines neuen Benutzers guest mit den Berechtigungen SELECT, INSERT und UPDATE mit dem Kennwort guest123; Die SQL-Abfrage lautet -

root@host# mysql -u root -p
Enter password:*******
mysql> use mysql;
Database changed

mysql> INSERT INTO user 
   (host, user, password, 
   select_priv, insert_priv, update_priv) 
   VALUES ('localhost', 'guest', 
   PASSWORD('guest123'), 'Y', 'Y', 'Y');
Query OK, 1 row affected (0.20 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)

mysql> SELECT host, user, password FROM user WHERE user = 'guest';
+-----------+---------+------------------+
|    host   |   user  |     password     |    
+-----------+---------+------------------+
| localhost |  guest  | 6f8c114b58f2ce9e |
+-----------+---------+------------------+
1 row in set (0.00 sec)

Denken Sie beim Hinzufügen eines neuen Benutzers daran, das neue Kennwort mit der von MySQL bereitgestellten Funktion PASSWORD () zu verschlüsseln. Wie Sie im obigen Beispiel sehen können, ist das Kennwort mypass mit 6f8c114b58f2ce9e verschlüsselt.

Beachten Sie die Anweisung FLUSH PRIVILEGES. Dadurch wird der Server angewiesen, die Grant-Tabellen neu zu laden. Wenn Sie es nicht verwenden, können Sie mit dem neuen Benutzerkonto erst eine Verbindung zu MySQL herstellen, wenn der Server neu gestartet wird.

Sie können einem neuen Benutzer auch andere Berechtigungen angeben, indem Sie die Werte der folgenden Spalten in der Benutzertabelle beim Ausführen der INSERT-Abfrage auf 'Y' setzen oder sie später mithilfe der UPDATE-Abfrage aktualisieren.

  • Select_priv
  • Insert_priv
  • Update_priv
  • Delete_priv
  • Create_priv
  • Drop_priv
  • Reload_priv
  • Shutdown_priv
  • Process_priv
  • File_priv
  • Grant_priv
  • References_priv
  • Index_priv
  • Alter_priv

Eine andere Möglichkeit zum Hinzufügen eines Benutzerkontos ist die Verwendung des Befehls GRANT SQL. Im folgenden Beispiel wird ein Benutzer hinzugefügtzara mit Passwort zara123 für eine bestimmte Datenbank, die als benannt ist TUTORIALS.

root@host# mysql -u root -p password;
Enter password:*******
mysql> use mysql;
Database changed

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
   -> ON TUTORIALS.*
   -> TO 'zara'@'localhost'
   -> IDENTIFIED BY 'zara123';

Dadurch wird auch ein Eintrag in der MySQL-Datenbanktabelle mit dem Namen erstellt user.

NOTE - MySQL beendet einen Befehl erst, wenn Sie am Ende des SQL-Befehls ein Semikolon (;) eingeben.

Die Dateikonfiguration /etc/my.cnf

In den meisten Fällen sollten Sie diese Datei nicht berühren. Standardmäßig enthält es die folgenden Einträge:

[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock

[mysql.server]
user = mysql
basedir = /var/lib

[safe_mysqld]
err-log = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid

Hier können Sie ein anderes Verzeichnis für das Fehlerprotokoll angeben, andernfalls sollten Sie keinen Eintrag in dieser Tabelle ändern.

Administrativer MySQL-Befehl

Hier ist die Liste der wichtigen MySQL-Befehle, die Sie von Zeit zu Zeit verwenden, um mit der MySQL-Datenbank zu arbeiten.

  • USE Databasename - Hiermit wird eine Datenbank im MySQL-Arbeitsbereich ausgewählt.

  • SHOW DATABASES - Listet die Datenbanken auf, auf die das MySQL-DBMS zugreifen kann.

  • SHOW TABLES - Zeigt die Tabellen in der Datenbank an, sobald eine Datenbank mit dem Befehl use ausgewählt wurde.

  • SHOW COLUMNS FROM tablename: Zeigt die Attribute, Attributtypen, Schlüsselinformationen, ob NULL zulässig ist, Standardeinstellungen und andere Informationen für eine Tabelle an.

  • SHOW INDEX FROM tablename - Zeigt die Details aller Indizes in der Tabelle an, einschließlich des PRIMARY KEY.

  • SHOW TABLE STATUS LIKE tablename\G - Meldet Details zur Leistung und Statistik von MySQL DBMS.

Im nächsten Kapitel werden wir diskutieren, wie PHP-Syntax in MySQL verwendet wird.

MySQL funktioniert sehr gut in Kombination verschiedener Programmiersprachen wie PERL, C, C ++, JAVA und PHP. Von diesen Sprachen ist PHP aufgrund seiner Entwicklungsmöglichkeiten für Webanwendungen die beliebteste.

Dieses Tutorial konzentriert sich stark auf die Verwendung von MySQL in einer PHP-Umgebung. Wenn Sie sich für MySQL mit PERL interessieren, können Sie das PERL- Tutorial lesen .

PHP bietet verschiedene Funktionen, um auf die MySQL-Datenbank zuzugreifen und die Datensätze in der MySQL-Datenbank zu bearbeiten. Sie müssten die PHP-Funktionen genauso aufrufen wie jede andere PHP-Funktion.

Die PHP-Funktionen zur Verwendung mit MySQL haben das folgende allgemeine Format:

mysql_function(value,value,...);

Der zweite Teil des Funktionsnamens ist funktionsspezifisch, normalerweise ein Wort, das beschreibt, was die Funktion tut. Das Folgende sind zwei der Funktionen, die wir in unserem Tutorial verwenden werden -

mysqli_connect($connect);
mysqli_query($connect,"SQL statement");

Das folgende Beispiel zeigt eine generische Syntax von PHP zum Aufrufen einer beliebigen MySQL-Funktion.

<html>
   <head>
      <title>PHP with MySQL</title>
   </head>
   
   <body>
      <?php
         $retval = mysql_function(value, [value,...]);
         if( !$retval ) {
            die ( "Error: a related error message" );
         }
         // Otherwise MySQL  or PHP Statements
      ?>
   </body>
</html>

Ab dem nächsten Kapitel sehen wir alle wichtigen MySQL-Funktionen zusammen mit PHP.

MySQL-Verbindung mit MySQL Binary

Sie können die MySQL-Datenbank mit dem einrichten mysql binär an der Eingabeaufforderung.

Beispiel

Hier ist ein einfaches Beispiel für die Verbindung zum MySQL-Server über die Eingabeaufforderung:

[root@host]# mysql -u root -p
Enter password:******

Dadurch erhalten Sie die Eingabeaufforderung mysql>, an der Sie einen beliebigen SQL-Befehl ausführen können. Das Folgende ist das Ergebnis des obigen Befehls -

Der folgende Codeblock zeigt das Ergebnis des obigen Codes -

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2854760 to server version: 5.0.9

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

Im obigen Beispiel haben wir verwendet rootAls Benutzer können Sie aber auch jeden anderen Benutzer verwenden. Jeder Benutzer kann alle SQL-Vorgänge ausführen, die diesem Benutzer gestattet sind.

Sie können jederzeit mit der Verbindung zur MySQL-Datenbank trennen exit Befehl an der Eingabeaufforderung mysql>.

mysql> exit
Bye

MySQL-Verbindung mit PHP-Skript

PHP bietet mysql_connect()Funktion zum Öffnen einer Datenbankverbindung. Diese Funktion verwendet fünf Parameter und gibt bei Erfolg eine MySQL-Link-ID oder bei einem Fehler FALSE zurück.

Syntax

connection mysql_connect(server,user,passwd,new_link,client_flag);

Sr.Nr. Parameter & Beschreibung
1

server

Optional - Der Hostname, auf dem der Datenbankserver ausgeführt wird. Wenn nicht angegeben, ist der Standardwertlocalhost:3306.

2

user

Optional - Der Benutzername, der auf die Datenbank zugreift. Wenn nicht angegeben, ist der Standard der Name des Benutzers, dem der Serverprozess gehört.

3

passwd

Optional - Das Kennwort des Benutzers, der auf die Datenbank zugreift. Wenn nicht angegeben, ist das Standardkennwort ein leeres Kennwort.

4

new_link

Optional - Wenn mysql_connect () mit denselben Argumenten erneut aufgerufen wird, wird keine neue Verbindung hergestellt. Stattdessen wird die Kennung der bereits geöffneten Verbindung zurückgegeben.

5

client_flags

Optional - Eine Kombination der folgenden Konstanten -

  • MYSQL_CLIENT_SSL - Verwenden Sie die SSL-Verschlüsselung.

  • MYSQL_CLIENT_COMPRESS - Komprimierungsprotokoll verwenden.

  • MYSQL_CLIENT_IGNORE_SPACE - Lassen Sie nach den Funktionsnamen Platz.

  • MYSQL_CLIENT_INTERACTIVE - Ermöglichen Sie interaktive Timeout-Sekunden der Inaktivität, bevor Sie die Verbindung schließen.

Sie können jederzeit mit einer anderen PHP-Funktion die Verbindung zur MySQL-Datenbank trennen mysql_close(). Diese Funktion verwendet einen einzelnen Parameter, bei dem es sich um eine Verbindung handelt, die von der zurückgegeben wirdmysql_connect() Funktion.

Syntax

bool mysql_close ( resource $link_identifier );

Wenn keine Ressource angegeben ist, wird die zuletzt geöffnete Datenbank geschlossen. Diese Funktion gibt true zurück, wenn die Verbindung erfolgreich geschlossen wird, andernfalls wird false zurückgegeben.

Beispiel

Versuchen Sie das folgende Beispiel, um eine Verbindung zu einem MySQL-Server herzustellen:

<html>
   <head>
      <title>Connecting MySQL Server</title>
   </head>
   <body>
      <?php
         $dbhost = 'localhost:3306'; $dbuser = 'guest';
         $dbpass = 'guest123'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }
         echo 'Connected successfully';
         mysql_close($conn);
      ?>
   </body>
</html>

Datenbank mit mysqladmin erstellen

Sie benötigen spezielle Berechtigungen, um eine MySQL-Datenbank zu erstellen oder zu löschen. Angenommen, Sie haben Zugriff auf den Root-Benutzer, können Sie eine beliebige Datenbank mit MySQL erstellenmysqladmin binär.

Beispiel

Hier ist ein einfaches Beispiel zum Erstellen einer Datenbank mit dem Namen TUTORIALS - -

[root@host]# mysqladmin -u root -p create TUTORIALS
Enter password:******

Dadurch wird eine MySQL-Datenbank namens TUTORIALS erstellt.

Erstellen Sie eine Datenbank mit PHP Script

PHP verwendet mysql_queryFunktion zum Erstellen oder Löschen einer MySQL-Datenbank. Diese Funktion verwendet zwei Parameter und gibt bei Erfolg TRUE oder bei Fehler FALSE zurück.

Syntax

bool mysql_query( sql, connection );

Sr.Nr. Parameter & Beschreibung
1

sql

Erforderlich - SQL-Abfrage zum Erstellen oder Löschen einer MySQL-Datenbank

2

connection

Optional - Wenn nicht angegeben, wird die zuletzt von mysql_connect geöffnete Verbindung verwendet.

Beispiel

Das folgende Beispiel zum Erstellen einer Datenbank -

<html>
   <head>
      <title>Creating MySQL Database</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'root'; $dbpass = 'rootpassword';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
         if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = 'CREATE DATABASE TUTORIALS';
         $retval = mysql_query( $sql, $conn ); if(! $retval ) {
            die('Could not create database: ' . mysql_error());
         }
         echo "Database TUTORIALS created successfully\n";
         mysql_close($conn);
      ?>
   </body>
</html>

Löschen Sie eine Datenbank mit mysqladmin

Sie benötigen spezielle Berechtigungen, um eine MySQL-Datenbank zu erstellen oder zu löschen. Vorausgesetzt, Sie haben Zugriff auf den Root-Benutzer, können Sie eine beliebige Datenbank mit MySQL erstellenmysqladmin binär.

Seien Sie beim Löschen einer Datenbank vorsichtig, da Sie alle in Ihrer Datenbank verfügbaren Daten verlieren.

Hier ist ein Beispiel zum Löschen einer Datenbank (TUTORIALS), die im vorherigen Kapitel erstellt wurde:

[root@host]# mysqladmin -u root -p drop TUTORIALS
Enter password:******

Dies gibt Ihnen eine Warnung und bestätigt, ob Sie diese Datenbank wirklich löschen möchten oder nicht.

Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'TUTORIALS' database [y/N] y
Database "TUTORIALS" dropped

Löschen Sie die Datenbank mit PHP Script

PHP verwendet mysql_queryFunktion zum Erstellen oder Löschen einer MySQL-Datenbank. Diese Funktion verwendet zwei Parameter und gibt bei Erfolg TRUE oder bei Fehler FALSE zurück.

Syntax

bool mysql_query( sql, connection );

Sr.Nr. Parameter & Beschreibung
1

sql

Erforderlich - SQL-Abfrage zum Erstellen oder Löschen einer MySQL-Datenbank

2

connection

Optional - Wenn nicht angegeben, wird die zuletzt von mysql_connect geöffnete Verbindung verwendet.

Beispiel

Versuchen Sie das folgende Beispiel, um eine Datenbank zu löschen:

<html>
   <head>
      <title>Deleting MySQL Database</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'root'; $dbpass = 'rootpassword';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
         if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = 'DROP DATABASE TUTORIALS';
         $retval = mysql_query( $sql, $conn ); if(! $retval ) {
            die('Could not delete database: ' . mysql_error());
         }
         echo "Database TUTORIALS deleted successfully\n";
         mysql_close($conn);
      ?>
   </body>
</html>

WARNING- Beim Löschen einer Datenbank mit dem PHP-Skript werden Sie nicht zur Bestätigung aufgefordert. Seien Sie also vorsichtig, wenn Sie eine MySQL-Datenbank löschen.

Sobald Sie mit dem MySQL-Server verbunden sind, müssen Sie eine Datenbank auswählen, mit der Sie arbeiten möchten. Dies liegt daran, dass mit dem MySQL Server möglicherweise mehr als eine Datenbank verfügbar ist.

Auswählen der MySQL-Datenbank über die Eingabeaufforderung

Es ist sehr einfach, eine Datenbank über die Eingabeaufforderung mysql> auszuwählen. Sie können den SQL-Befehl verwendenuse um eine Datenbank auszuwählen.

Beispiel

Hier ist ein Beispiel für die Auswahl einer Datenbank mit dem Namen TUTORIALS - -

[root@host]# mysql -u root -p
Enter password:******
mysql> use TUTORIALS;
Database changed
mysql>

Nachdem Sie die TUTORIALS-Datenbank ausgewählt haben, werden alle nachfolgenden Vorgänge für die TUTORIALS-Datenbank ausgeführt.

NOTE- Bei allen Datenbanknamen, Tabellennamen und Tabellenfeldnamen wird zwischen Groß- und Kleinschreibung unterschieden. Sie müssten also die richtigen Namen verwenden, während Sie einen SQL-Befehl erteilen.

Auswählen einer MySQL-Datenbank mit PHP-Skript

PHP bietet Funktion mysql_select_dbum eine Datenbank auszuwählen. Bei Erfolg wird TRUE oder bei Misserfolg FALSE zurückgegeben.

Syntax

bool mysql_select_db( db_name, connection );

Sr.Nr. Parameter & Beschreibung
1

db_name

Erforderlich - Der Name der MySQL-Datenbank muss ausgewählt werden

2

connection

Optional - Wenn nicht angegeben, wird die zuletzt von mysql_connect geöffnete Verbindung verwendet.

Beispiel

Hier ist ein Beispiel, das Ihnen zeigt, wie Sie eine Datenbank auswählen.

<html>
   <head>
      <title>Selecting MySQL Database</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'guest'; $dbpass = 'guest123';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
         if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully'; mysql_select_db( 'TUTORIALS' ); mysql_close($conn);
      ?>
   </body>
</html>

Die richtige Definition der Felder in einer Tabelle ist wichtig für die Gesamtoptimierung Ihrer Datenbank. Sie sollten nur den Typ und die Größe des Feldes verwenden, das Sie wirklich verwenden müssen. Definieren Sie beispielsweise kein 10 Zeichen breites Feld, wenn Sie wissen, dass Sie nur 2 Zeichen verwenden werden. Diese Art von Feldern (oder Spalten) wird nach dem auch als Datentyp bezeichnettype of data Sie werden in diesen Feldern speichern.

MySQL verwendet viele verschiedene Datentypen, die in drei Kategorien unterteilt sind:

  • Numeric
  • Datum (und Uhrzeit
  • Zeichenfolgentypen.

Lassen Sie uns sie jetzt im Detail diskutieren.

Numerische Datentypen

MySQL verwendet alle numerischen numerischen ANSI SQL-Datentypen. Wenn Sie also von einem anderen Datenbanksystem zu MySQL kommen, sind Ihnen diese Definitionen vertraut.

Die folgende Liste zeigt die gängigen numerischen Datentypen und ihre Beschreibungen -

  • INT- Eine ganzzahlige Ganzzahl, die mit oder ohne Vorzeichen signiert werden kann. Wenn signiert, liegt der zulässige Bereich zwischen -2147483648 und 2147483647. Wenn nicht signiert, liegt der zulässige Bereich zwischen 0 und 4294967295. Sie können eine Breite von bis zu 11 Stellen angeben.

  • TINYINT- Eine sehr kleine Ganzzahl, die mit oder ohne Vorzeichen signiert werden kann. Wenn signiert, liegt der zulässige Bereich zwischen -128 und 127. Wenn nicht signiert, liegt der zulässige Bereich zwischen 0 und 255. Sie können eine Breite von bis zu 4 Stellen angeben.

  • SMALLINT- Eine kleine Ganzzahl, die signiert oder nicht signiert sein kann. Wenn signiert, liegt der zulässige Bereich zwischen -32768 und 32767. Wenn nicht signiert, liegt der zulässige Bereich zwischen 0 und 65535. Sie können eine Breite von bis zu 5 Stellen angeben.

  • MEDIUMINT- Eine mittelgroße Ganzzahl, die mit oder ohne Vorzeichen signiert werden kann. Wenn signiert, liegt der zulässige Bereich zwischen -8388608 und 8388607. Wenn nicht signiert, liegt der zulässige Bereich zwischen 0 und 16777215. Sie können eine Breite von bis zu 9 Stellen angeben.

  • BIGINT- Eine große Ganzzahl, die mit oder ohne Vorzeichen signiert werden kann. Wenn signiert, liegt der zulässige Bereich zwischen -9223372036854775808 und 9223372036854775807. Wenn nicht signiert, liegt der zulässige Bereich zwischen 0 und 18446744073709551615. Sie können eine Breite von bis zu 20 Stellen angeben.

  • FLOAT(M,D)- Eine Gleitkommazahl, die nicht vorzeichenlos sein kann. Sie können die Anzeigelänge (M) und die Anzahl der Dezimalstellen (D) definieren. Dies ist nicht erforderlich und wird standardmäßig auf 10,2 gesetzt, wobei 2 die Anzahl der Dezimalstellen und 10 die Gesamtzahl der Ziffern (einschließlich Dezimalstellen) ist. Die Dezimalgenauigkeit kann für einen FLOAT bis zu 24 Stellen betragen.

  • DOUBLE(M,D)- Eine Gleitkommazahl mit doppelter Genauigkeit, die nicht vorzeichenlos sein kann. Sie können die Anzeigelänge (M) und die Anzahl der Dezimalstellen (D) definieren. Dies ist nicht erforderlich und wird standardmäßig auf 16,4 gesetzt, wobei 4 die Anzahl der Dezimalstellen ist. Die Dezimalgenauigkeit kann für ein DOPPELTES auf 53 Stellen gehen. REAL ist ein Synonym für DOUBLE.

  • DECIMAL(M,D)- Eine entpackte Gleitkommazahl, die nicht vorzeichenlos sein kann. In den entpackten Dezimalstellen entspricht jede Dezimalstelle einem Byte. Das Definieren der Anzeigelänge (M) und der Anzahl der Dezimalstellen (D) ist erforderlich. NUMERIC ist ein Synonym für DECIMAL.

Datums- und Uhrzeittypen

Die Datentypen für Datum und Uhrzeit von MySQL lauten wie folgt:

  • DATE- Ein Datum im Format JJJJ-MM-TT zwischen 1000-01-01 und 9999-12-31. Zum Beispiel würde der 30. Dezember 1973 als 1973-12-30 gespeichert.

  • DATETIME- Eine Kombination aus Datum und Uhrzeit im Format JJJJ-MM-TT HH: MM: SS zwischen 1000-01-01 00:00:00 und 9999-12-31 23:59:59. Zum Beispiel würde 3:30 Uhr nachmittags am 30. Dezember 1973 als 1973-12-30 15:30:00 gespeichert.

  • TIMESTAMP- Ein Zeitstempel zwischen Mitternacht, 1.Januar st , 1970 und irgendwann in 2037. Dies sieht aus wie das vorherige DATETIME- Format, nur ohne die Bindestriche zwischen den Zahlen; Am 30. Dezember 1973 um 3:30 Uhr nachmittags wird 19731230153000 (JJJJMMTTHHMMSS) gespeichert.

  • TIME - Speichert die Zeit in einem HH: MM: SS-Format.

  • YEAR(M)- Speichert ein Jahr im zweistelligen oder vierstelligen Format. Wenn die Länge mit 2 angegeben ist (z. B. JAHR (2)), kann das JAHR zwischen 1970 und 2069 (70 bis 69) liegen. Wenn die Länge als 4 angegeben ist, kann YEAR zwischen 1901 und 2155 liegen. Die Standardlänge ist 4.

Zeichenfolgentypen

Obwohl die numerischen und Datumstypen Spaß machen, werden die meisten Daten, die Sie speichern, in einem Zeichenfolgenformat vorliegen. Diese Liste beschreibt die gängigen String-Datentypen in MySQL.

  • CHAR(M)- Eine Zeichenfolge mit fester Länge zwischen 1 und 255 Zeichen (z. B. CHAR (5)), die beim Speichern mit Leerzeichen auf die angegebene Länge aufgefüllt wird. Das Definieren einer Länge ist nicht erforderlich, der Standardwert ist jedoch 1.

  • VARCHAR(M)- Eine Zeichenfolge mit variabler Länge zwischen 1 und 255 Zeichen. Zum Beispiel VARCHAR (25). Sie müssen eine Länge definieren, wenn Sie ein VARCHAR-Feld erstellen.

  • BLOB or TEXT- Ein Feld mit einer maximalen Länge von 65535 Zeichen. BLOBs sind "Binary Large Objects" und werden zum Speichern großer Mengen von Binärdaten wie Bildern oder anderen Dateitypen verwendet. Als TEXT definierte Felder enthalten auch große Datenmengen. Der Unterschied zwischen den beiden besteht darin, dass die Sortierungen und Vergleiche der gespeicherten Daten sindcase sensitive auf BLOBs und sind not case sensitivein TEXT-Feldern. Sie geben keine Länge mit BLOB oder TEXT an.

  • TINYBLOB or TINYTEXT- Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 255 Zeichen. Sie geben mit TINYBLOB oder TINYTEXT keine Länge an.

  • MEDIUMBLOB or MEDIUMTEXT- Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 16777215 Zeichen. Sie geben mit MEDIUMBLOB oder MEDIUMTEXT keine Länge an.

  • LONGBLOB or LONGTEXT- Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 4294967295 Zeichen. Sie geben mit LONGBLOB oder LONGTEXT keine Länge an.

  • ENUM- Eine Aufzählung, die ein ausgefallener Begriff für Liste ist. Wenn Sie eine ENUM definieren, erstellen Sie eine Liste von Elementen, aus denen der Wert ausgewählt werden muss (oder er kann NULL sein). Wenn Sie beispielsweise möchten, dass Ihr Feld "A" oder "B" oder "C" enthält, definieren Sie Ihre ENUM als ENUM ('A', 'B', 'C') und nur diese Werte (oder NULL). könnte jemals dieses Feld füllen.

Im nächsten Kapitel werden wir diskutieren, wie Tabellen in MySQL erstellt werden.

Für den Befehl zum Erstellen von Tabellen sind zunächst die folgenden Details erforderlich:

  • Name der Tabelle
  • Name der Felder
  • Definitionen für jedes Feld

Syntax

Hier ist eine generische SQL-Syntax zum Erstellen einer MySQL-Tabelle:

CREATE TABLE table_name (column_name column_type);

Nun erstellen wir die folgende Tabelle in der TUTORIALS Datenbank.

create table tutorials_tbl(
   tutorial_id INT NOT NULL AUTO_INCREMENT,
   tutorial_title VARCHAR(100) NOT NULL,
   tutorial_author VARCHAR(40) NOT NULL,
   submission_date DATE,
   PRIMARY KEY ( tutorial_id )
);

Hier müssen einige Punkte erklärt werden -

  • Feldattribut NOT NULLwird verwendet, weil dieses Feld nicht NULL sein soll. Wenn ein Benutzer versucht, einen Datensatz mit einem NULL-Wert zu erstellen, gibt MySQL einen Fehler aus.

  • Feldattribut AUTO_INCREMENT weist MySQL an, die nächste verfügbare Nummer zum ID-Feld hinzuzufügen.

  • Stichwort PRIMARY KEYwird verwendet, um eine Spalte als Primärschlüssel zu definieren. Sie können mehrere durch Komma getrennte Spalten verwenden, um einen Primärschlüssel zu definieren.

Erstellen von Tabellen über die Eingabeaufforderung

Es ist einfach, eine MySQL-Tabelle über die Eingabeaufforderung mysql> zu erstellen. Sie verwenden den SQL-BefehlCREATE TABLE um eine Tabelle zu erstellen.

Beispiel

Hier ist ein Beispiel, das erstellt wird tutorials_tbl - -

root@host# mysql -u root -p
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> CREATE TABLE tutorials_tbl(
   -> tutorial_id INT NOT NULL AUTO_INCREMENT,
   -> tutorial_title VARCHAR(100) NOT NULL,
   -> tutorial_author VARCHAR(40) NOT NULL,
   -> submission_date DATE,
   -> PRIMARY KEY ( tutorial_id )
   -> );
Query OK, 0 rows affected (0.16 sec)
mysql>

NOTE - MySQL beendet einen Befehl erst, wenn Sie am Ende des SQL-Befehls ein Semikolon (;) eingeben.

Erstellen von Tabellen mit PHP-Skript

Um eine neue Tabelle in einer vorhandenen Datenbank zu erstellen, müssten Sie die PHP-Funktion verwenden mysql_query(). Sie übergeben das zweite Argument mit einem geeigneten SQL-Befehl, um eine Tabelle zu erstellen.

Beispiel

Das folgende Programm ist ein Beispiel zum Erstellen einer Tabelle mit einem PHP-Skript:

<html>
   <head>
      <title>Creating MySQL Tables</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3036'; $dbuser = 'root';
         $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }
         echo 'Connected successfully<br />';
         $sql = "CREATE TABLE tutorials_tbl( ". "tutorial_id INT NOT NULL AUTO_INCREMENT, ". "tutorial_title VARCHAR(100) NOT NULL, ". "tutorial_author VARCHAR(40) NOT NULL, ". "submission_date DATE, ". "PRIMARY KEY ( tutorial_id )); "; mysql_select_db( 'TUTORIALS' ); $retval = mysql_query( $sql, $conn );
         
         if(! $retval ) { die('Could not create table: ' . mysql_error()); } echo "Table created successfully\n"; mysql_close($conn);
      ?>
   </body>
</html>

Es ist sehr einfach, eine vorhandene MySQL-Tabelle zu löschen, aber Sie müssen beim Löschen einer vorhandenen Tabelle sehr vorsichtig sein, da die verlorenen Daten nach dem Löschen einer Tabelle nicht wiederhergestellt werden.

Syntax

Hier ist eine generische SQL-Syntax zum Löschen einer MySQL-Tabelle:

DROP TABLE table_name ;

Tabellen aus der Eingabeaufforderung löschen

Um Tabellen an der Eingabeaufforderung zu löschen, müssen Sie den Befehl DROP TABLE SQL an der Eingabeaufforderung mysql> ausführen.

Beispiel

Das folgende Programm ist ein Beispiel, das das löscht tutorials_tbl - -

root@host# mysql -u root -p
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> DROP TABLE tutorials_tbl
Query OK, 0 rows affected (0.8 sec)
mysql>

Tabellen mit PHP-Skript löschen

Um eine vorhandene Tabelle in einer Datenbank abzulegen, müssten Sie die PHP-Funktion verwenden mysql_query(). Sie übergeben das zweite Argument mit einem geeigneten SQL-Befehl, um eine Tabelle zu löschen.

Beispiel

<html>
   <head>
      <title>Creating MySQL Tables</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3036'; $dbuser = 'root';
         $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }
         echo 'Connected successfully<br />';
         $sql = "DROP TABLE tutorials_tbl"; mysql_select_db( 'TUTORIALS' ); $retval = mysql_query( $sql, $conn );
         
         if(! $retval ) { die('Could not delete table: ' . mysql_error()); } echo "Table deleted successfully\n"; mysql_close($conn);
      ?>
   </body>
</html>

Um Daten in eine MySQL-Tabelle einzufügen, müssten Sie SQL verwenden INSERT INTOBefehl. Sie können Daten in die MySQL-Tabelle einfügen, indem Sie die Eingabeaufforderung mysql> oder ein beliebiges Skript wie PHP verwenden.

Syntax

Hier ist eine generische SQL-Syntax des Befehls INSERT INTO zum Einfügen von Daten in die MySQL-Tabelle:

INSERT INTO table_name ( field1, field2,...fieldN )
   VALUES
   ( value1, value2,...valueN );

Um String-Datentypen einzufügen, müssen alle Werte in doppelte oder einfache Anführungszeichen gesetzt werden. Zum Beispiel"value".

Einfügen von Daten über die Eingabeaufforderung

Um Daten an der Eingabeaufforderung einzufügen, verwenden wir den Befehl SQL INSERT INTO, um Daten in die MySQL-Tabelle tutorials_tbl einzufügen.

Beispiel

Im folgenden Beispiel werden 3 Datensätze erstellt tutorials_tbl Tabelle -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed

mysql> INSERT INTO tutorials_tbl 
   ->(tutorial_title, tutorial_author, submission_date)
   ->VALUES
   ->("Learn PHP", "John Poul", NOW());
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO tutorials_tbl
   ->(tutorial_title, tutorial_author, submission_date)
   ->VALUES
   ->("Learn MySQL", "Abdul S", NOW());
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO tutorials_tbl
   ->(tutorial_title, tutorial_author, submission_date)
   ->VALUES
   ->("JAVA Tutorial", "Sanjay", '2007-05-06');
Query OK, 1 row affected (0.01 sec)
mysql>

NOTE- Bitte beachten Sie, dass alle Pfeilzeichen (->) nicht Teil des SQL-Befehls sind. Sie zeigen eine neue Zeile an und werden automatisch von der MySQL-Eingabeaufforderung erstellt, während die Eingabetaste gedrückt wird, ohne dass am Ende jeder Befehlszeile ein Semikolon angegeben wird.

Im obigen Beispiel haben wir keine tutorial_id angegeben, da wir zum Zeitpunkt der Tabellenerstellung die Option AUTO_INCREMENT für dieses Feld angegeben hatten. MySQL sorgt also dafür, dass diese IDs automatisch eingefügt werden. Hier,NOW() ist eine MySQL-Funktion, die das aktuelle Datum und die aktuelle Uhrzeit zurückgibt.

Einfügen von Daten mit einem PHP-Skript

Sie können denselben SQL INSERT INTO-Befehl in der PHP-Funktion verwenden mysql_query() um Daten in eine MySQL-Tabelle einzufügen.

Beispiel

In diesem Beispiel werden drei Parameter vom Benutzer übernommen und in die MySQL-Tabelle eingefügt.

<html>

   <head>
      <title>Add New Record in MySQL Database</title>
   </head>

   <body>
      <?php
         if(isset($_POST['add'])) { $dbhost = 'localhost:3036';
            $dbuser = 'root'; $dbpass = 'rootpassword';
            $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
            if(! $conn ) { die('Could not connect: ' . mysql_error()); } if(! get_magic_quotes_gpc() ) { $tutorial_title = addslashes ($_POST['tutorial_title']); $tutorial_author = addslashes ($_POST['tutorial_author']); } else { $tutorial_title = $_POST['tutorial_title']; $tutorial_author = $_POST['tutorial_author']; } $submission_date = $_POST['submission_date']; $sql = "INSERT INTO tutorials_tbl ".
               "(tutorial_title,tutorial_author, submission_date) "."VALUES ".
               "('$tutorial_title','$tutorial_author','$submission_date')"; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
         
            if(! $retval ) { die('Could not enter data: ' . mysql_error()); } echo "Entered data successfully\n"; mysql_close($conn);
         } else {
      ?>
   
      <form method = "post" action = "<?php $_PHP_SELF ?>">
         <table width = "600" border = "0" cellspacing = "1" cellpadding = "2">
            <tr>
               <td width = "250">Tutorial Title</td>
               <td>
                  <input name = "tutorial_title" type = "text" id = "tutorial_title">
               </td>
            </tr>
         
            <tr>
               <td width = "250">Tutorial Author</td>
               <td>
                  <input name = "tutorial_author" type = "text" id = "tutorial_author">
               </td>
            </tr>
         
            <tr>
               <td width = "250">Submission Date [   yyyy-mm-dd ]</td>
               <td>
                  <input name = "submission_date" type = "text" id = "submission_date">
               </td>
            </tr>
      
            <tr>
               <td width = "250"> </td>
               <td> </td>
            </tr>
         
            <tr>
               <td width = "250"> </td>
               <td>
                  <input name = "add" type = "submit" id = "add"  value = "Add Tutorial">
               </td>
            </tr>
         </table>
      </form>
   <?php
      }
   ?>
   </body>
</html>

Verwenden Sie beim Einfügen von Daten am besten die Funktion get_magic_quotes_gpc()um zu überprüfen, ob die aktuelle Konfiguration für Magic Quote festgelegt ist oder nicht. Wenn diese Funktion false zurückgibt, verwenden Sie die Funktionaddslashes() um Schrägstriche vor den Anführungszeichen einzufügen.

Sie können viele Validierungen durchführen, um zu überprüfen, ob die eingegebenen Daten korrekt sind oder nicht, und die entsprechenden Maßnahmen ergreifen.

Die SQL SELECTBefehl wird verwendet, um Daten aus der MySQL-Datenbank abzurufen. Sie können diesen Befehl an der Eingabeaufforderung mysql> sowie in jedem Skript wie PHP verwenden.

Syntax

Hier ist die generische SQL-Syntax des SELECT-Befehls zum Abrufen von Daten aus der MySQL-Tabelle:

SELECT field1, field2,...fieldN 
FROM table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • Sie können eine oder mehrere durch Kommas getrennte Tabellen verwenden, um verschiedene Bedingungen mithilfe einer WHERE-Klausel einzuschließen. Die WHERE-Klausel ist jedoch ein optionaler Teil des Befehls SELECT.

  • Sie können ein oder mehrere Felder in einem einzigen SELECT-Befehl abrufen.

  • Sie können anstelle von Feldern den Stern (*) angeben. In diesem Fall gibt SELECT alle Felder zurück.

  • Sie können jede Bedingung mit der WHERE-Klausel angeben.

  • Sie können einen Versatz mit angeben OFFSETVon dort aus beginnt SELECT mit der Rückgabe von Datensätzen. Standardmäßig beginnt der Offset bei Null.

  • Sie können die Anzahl der Rücksendungen mit dem begrenzen LIMIT Attribut.

Abrufen von Daten von einer Eingabeaufforderung

Dies verwendet den SQL SELECT-Befehl, um Daten aus der MySQL-Tabelle abzurufen tutorials_tbl.

Beispiel

Im folgenden Beispiel werden alle Datensätze aus dem zurückgegeben tutorials_tbl Tabelle -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl 
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           1 | Learn PHP      | John Poul       | 2007-05-21      |
|           2 | Learn MySQL    | Abdul S         | 2007-05-21      |
|           3 | JAVA Tutorial  | Sanjay          | 2007-05-21      |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.01 sec)

mysql>

Abrufen von Daten mit einem PHP-Skript

Sie können denselben SQL SELECT-Befehl in einer PHP-Funktion verwenden mysql_query(). Diese Funktion wird verwendet, um den SQL-Befehl und später eine andere PHP-Funktion auszuführenmysql_fetch_array()kann verwendet werden, um alle ausgewählten Daten abzurufen. Diese Funktion gibt die Zeile als assoziatives Array, numerisches Array oder beides zurück. Diese Funktion gibt FALSE zurück, wenn keine Zeilen mehr vorhanden sind.

Das folgende Programm ist ein einfaches Beispiel, das zeigt, wie Datensätze aus dem Internet abgerufen / angezeigt werden tutorials_tbl Tabelle.

Beispiel

Der folgende Codeblock zeigt alle Datensätze aus der Tabelle tutorials_tbl an.

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root'; $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn ); if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

Der Inhalt der Zeilen wird der Variablen $ row zugewiesen und die Werte in dieser Zeile werden dann gedruckt.

NOTE - Denken Sie immer daran, geschweifte Klammern zu setzen, wenn Sie einen Array-Wert direkt in eine Zeichenfolge einfügen möchten.

Im obigen Beispiel ist die Konstante MYSQL_ASSOC wird als zweites Argument für die PHP-Funktion verwendet mysql_fetch_array(), so dass die Zeile als assoziatives Array zurückgegeben wird. Mit einem assoziativen Array können Sie auf das Feld zugreifen, indem Sie dessen Namen anstelle des Index verwenden.

PHP bietet eine weitere Funktion namens mysql_fetch_assoc(), die auch die Zeile als assoziatives Array zurückgibt.

Beispiel

Das folgende Beispiel zeigt alle Datensätze aus der Tabelle tutorial_tbl mit der Funktion mysql_fetch_assoc () an.

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl'; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_assoc($retval)) { echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ". "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>

Sie können auch die Konstante verwenden MYSQL_NUMals zweites Argument für die PHP-Funktion mysql_fetch_array (). Dadurch gibt die Funktion ein Array mit dem numerischen Index zurück.

Beispiel

Probieren Sie das folgende Beispiel aus, um alle Datensätze aus der Tabelle tutorials_tbl mit dem Argument MYSQL_NUM anzuzeigen.

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl'; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_NUM)) { echo "Tutorial ID :{$row[0]}  <br> ".
         "Title: {$row[1]} <br> ". "Author: {$row[2]} <br> ".
         "Submission Date : {$row[3]} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>

Alle obigen drei Beispiele führen zum gleichen Ergebnis.

Speicher freigeben

Es wird empfohlen, den Cursorspeicher am Ende jeder SELECT-Anweisung freizugeben. Dies kann mithilfe der PHP-Funktion erfolgenmysql_free_result(). Das folgende Programm zeigt anhand eines Beispiels, wie es verwendet werden soll.

Beispiel

Probieren Sie das folgende Beispiel aus:

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl'; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_NUM)) { echo "Tutorial ID :{$row[0]}  <br> ".
         "Title: {$row[1]} <br> ". "Author: {$row[2]} <br> ".
         "Submission Date : {$row[3]} <br> ". "--------------------------------<br>"; } mysql_free_result($retval);
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

Während Sie Daten abrufen, können Sie einen so komplexen Code schreiben, wie Sie möchten. Die Vorgehensweise bleibt jedoch dieselbe wie oben beschrieben.

Wir haben die SQL gesehen SELECTBefehl zum Abrufen von Daten aus einer MySQL-Tabelle. Wir können eine Bedingungsklausel verwenden, die alsWHERE Clauseum die Ergebnisse herauszufiltern. Mit dieser WHERE-Klausel können wir Auswahlkriterien angeben, um die erforderlichen Datensätze aus einer Tabelle auszuwählen.

Syntax

Der folgende Codeblock enthält eine generische SQL-Syntax des Befehls SELECT mit der WHERE-Klausel zum Abrufen von Daten aus der MySQL-Tabelle.

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • Sie können eine oder mehrere durch Komma getrennte Tabellen verwenden, um verschiedene Bedingungen mithilfe einer WHERE-Klausel einzuschließen. Die WHERE-Klausel ist jedoch ein optionaler Teil des Befehls SELECT.

  • Sie können jede Bedingung mit der WHERE-Klausel angeben.

  • Sie können mehr als eine Bedingung mit dem angeben AND oder der OR Betreiber.

  • Eine WHERE-Klausel kann zusammen mit dem SQL-Befehl DELETE oder UPDATE verwendet werden, um auch eine Bedingung anzugeben.

Das WHERE Klausel funktioniert wie eine if conditionin jeder Programmiersprache. Diese Klausel wird verwendet, um den angegebenen Wert mit dem in einer MySQL-Tabelle verfügbaren Feldwert zu vergleichen. Wenn der angegebene Wert von außen dem verfügbaren Feldwert in der MySQL-Tabelle entspricht, wird diese Zeile zurückgegeben.

Hier ist die Liste der Operatoren, die mit dem verwendet werden können WHERE Klausel.

Angenommen, Feld A enthält 10 und Feld B enthält 20, dann -

Operator Beschreibung Beispiel
= Überprüft, ob die Werte der beiden Operanden gleich sind oder nicht. Wenn ja, wird die Bedingung erfüllt. (A = B) ist nicht wahr.
! = Überprüft, ob die Werte der beiden Operanden gleich sind oder nicht. Wenn die Werte nicht gleich sind, wird die Bedingung wahr. (A! = B) ist wahr.
> Überprüft, ob der Wert des linken Operanden größer als der Wert des rechten Operanden ist. Wenn ja, wird die Bedingung erfüllt. (A> B) ist nicht wahr.
< Überprüft, ob der Wert des linken Operanden kleiner als der Wert des rechten Operanden ist. Wenn ja, wird die Bedingung erfüllt. (A <B) ist wahr.
> = Überprüft, ob der Wert des linken Operanden größer oder gleich dem Wert des rechten Operanden ist. Wenn ja, wird die Bedingung erfüllt. (A> = B) ist nicht wahr.
<= Überprüft, ob der Wert des linken Operanden kleiner oder gleich dem Wert des rechten Operanden ist. Wenn ja, wird die Bedingung erfüllt. (A <= B) ist wahr.

Die WHERE-Klausel ist sehr nützlich, wenn Sie die ausgewählten Zeilen aus einer Tabelle abrufen möchten, insbesondere wenn Sie die verwenden MySQL Join. Joins werden in einem anderen Kapitel behandelt.

Es ist üblich, mit dem nach Datensätzen zu suchen Primary Key um die Suche schneller zu machen.

Wenn die angegebene Bedingung keinem Datensatz in der Tabelle entspricht, gibt die Abfrage keine Zeile zurück.

Abrufen von Daten von der Eingabeaufforderung

Dies verwendet den SQL SELECT-Befehl mit der WHERE-Klausel, um die ausgewählten Daten aus der MySQL-Tabelle abzurufen. tutorials_tbl.

Beispiel

Im folgenden Beispiel werden alle Datensätze aus dem zurückgegeben tutorials_tbl Tabelle, für die der Autorenname lautet Sanjay.

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl WHERE tutorial_author = 'Sanjay';
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|      3      | JAVA Tutorial  |      Sanjay     |    2007-05-21   |      
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 sec)

mysql>

Es sei denn, Sie führen eine LIKEBeim Vergleich einer Zeichenfolge wird nicht zwischen Groß- und Kleinschreibung unterschieden. Sie können Ihre Suche zwischen Groß- und Kleinschreibung unterscheiden, indem Sie die Option verwendenBINARY Schlüsselwort wie folgt -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl \
   WHERE BINARY tutorial_author = 'sanjay';
Empty set (0.02 sec)

mysql>

Abrufen von Daten mit einem PHP-Skript

Sie können denselben SQL SELECT-Befehl mit WHERE CLAUSE in der PHP-Funktion verwenden mysql_query(). Diese Funktion wird verwendet, um den SQL-Befehl und später eine andere PHP-Funktion auszuführenmysql_fetch_array()kann verwendet werden, um alle ausgewählten Daten abzurufen. Diese Funktion gibt eine Zeile als assoziatives Array, numerisches Array oder beides zurück. Diese Funktion gibt FALSE zurück, wenn keine Zeilen mehr vorhanden sind.

Beispiel

Im folgenden Beispiel werden alle Datensätze aus dem zurückgegeben tutorials_tbl Tabelle, für die der Autorenname lautet Sanjay - -

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root'; $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title, 
      tutorial_author, submission_date
      FROM tutorials_tbl
      WHERE tutorial_author = "Sanjay"';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn ); if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ".
      "Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ".
      "--------------------------------<br>";
   } 

   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

Möglicherweise müssen die vorhandenen Daten in einer MySQL-Tabelle geändert werden. Sie können dies mithilfe von SQL tunUPDATEBefehl. Dadurch wird jeder Feldwert einer MySQL-Tabelle geändert.

Syntax

Der folgende Codeblock verfügt über eine generische SQL-Syntax des Befehls UPDATE zum Ändern der Daten in der MySQL-Tabelle.

UPDATE table_name SET field1 = new-value1, field2 = new-value2
[WHERE Clause]
  • Sie können ein oder mehrere Felder insgesamt aktualisieren.
  • Sie können jede Bedingung mit der WHERE-Klausel angeben.
  • Sie können die Werte jeweils in einer Tabelle aktualisieren.

Die WHERE-Klausel ist sehr nützlich, wenn Sie die ausgewählten Zeilen in einer Tabelle aktualisieren möchten.

Aktualisieren von Daten über die Eingabeaufforderung

Dies verwendet den SQL UPDATE-Befehl mit der WHERE-Klausel, um die ausgewählten Daten in der MySQL-Tabelle zu aktualisieren tutorials_tbl.

Beispiel

Das folgende Beispiel aktualisiert die tutorial_title Feld für einen Datensatz mit der tutorial_id als 3.

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> UPDATE tutorials_tbl 
   -> SET tutorial_title = 'Learning JAVA' 
   -> WHERE tutorial_id = 3;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>

Aktualisieren von Daten mithilfe eines PHP-Skripts

Sie können den SQL UPDATE-Befehl mit oder ohne WHERE CLAUSE in der PHP-Funktion verwenden - mysql_query(). Diese Funktion führt den SQL-Befehl auf ähnliche Weise aus wie an der Eingabeaufforderung mysql>.

Beispiel

Das folgende Beispiel zum Aktualisieren der tutorial_title Feld für einen Datensatz mit tutorial_id als 3.

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root'; $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'UPDATE tutorials_tbl
      SET tutorial_title="Learning JAVA"
      WHERE tutorial_id=3';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn ); if(! $retval ) {
      die('Could not update data: ' . mysql_error());
   }
   echo "Updated data successfully\n";
   mysql_close($conn);
?>

Wenn Sie einen Datensatz aus einer MySQL-Tabelle löschen möchten, können Sie den SQL-Befehl verwenden DELETE FROM. Sie können diesen Befehl an der Eingabeaufforderung mysql> sowie in jedem Skript wie PHP verwenden.

Syntax

Der folgende Codeblock verfügt über eine generische SQL-Syntax des Befehls DELETE zum Löschen von Daten aus einer MySQL-Tabelle.

DELETE FROM table_name [WHERE Clause]
  • Wenn die WHERE-Klausel nicht angegeben ist, werden alle Datensätze aus der angegebenen MySQL-Tabelle gelöscht.

  • Sie können jede Bedingung mit der WHERE-Klausel angeben.

  • Sie können Datensätze in einer einzelnen Tabelle gleichzeitig löschen.

Die WHERE-Klausel ist sehr nützlich, wenn Sie ausgewählte Zeilen in einer Tabelle löschen möchten.

Daten von der Eingabeaufforderung löschen

Dies verwendet den SQL DELETE-Befehl mit der WHERE-Klausel, um ausgewählte Daten in der MySQL-Tabelle zu löschen. tutorials_tbl.

Beispiel

Im folgenden Beispiel wird ein Datensatz aus dem tutorial_tbl gelöscht, dessen tutorial_id 3 ist.

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> DELETE FROM tutorials_tbl WHERE tutorial_id=3;
Query OK, 1 row affected (0.23 sec)

mysql>

Daten mit einem PHP-Skript löschen

Sie können den SQL DELETE-Befehl mit oder ohne WHERE CLAUSE in der PHP-Funktion verwenden - mysql_query(). Diese Funktion führt den SQL-Befehl auf die gleiche Weise aus, wie er an der Eingabeaufforderung mysql> ausgeführt wird.

Beispiel

Versuchen Sie das folgende Beispiel, um einen Datensatz aus dem tutorial_tbl zu löschen, dessen tutorial_id 3 ist.

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root'; $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'DELETE FROM tutorials_tbl WHERE tutorial_id = 3';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn ); if(! $retval ) {
      die('Could not delete data: ' . mysql_error());
   }
   echo "Deleted data successfully\n";
   mysql_close($conn);
?>

Wir haben die SQL gesehen SELECTBefehl zum Abrufen von Daten aus der MySQL-Tabelle. Wir können auch eine Bedingungsklausel verwenden, die alsWHERE Klausel zur Auswahl der erforderlichen Datensätze.

Eine WHERE-Klausel mit dem Gleichheitszeichen (=) funktioniert gut, wenn wir eine genaue Übereinstimmung erzielen möchten. Wie wenn "tutorial_author = 'Sanjay'". Möglicherweise müssen wir jedoch alle Ergebnisse herausfiltern, bei denen der Name tutorial_author "jay" enthalten soll. Dies kann mit behandelt werdenSQL LIKE Clause zusammen mit der WHERE-Klausel.

Wenn die SQL LIKE-Klausel zusammen mit dem% -Zeichen verwendet wird, funktioniert sie wie ein Metazeichen (*) wie unter UNIX, während alle Dateien oder Verzeichnisse an der Eingabeaufforderung aufgelistet werden. Ohne ein% -Zeichen entspricht die LIKE-Klausel derequal to unterschreiben Sie zusammen mit der WHERE-Klausel.

Syntax

Der folgende Codeblock enthält eine generische SQL-Syntax des Befehls SELECT sowie die LIKE-Klausel zum Abrufen von Daten aus einer MySQL-Tabelle.

SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • Sie können jede Bedingung mit der WHERE-Klausel angeben.

  • Sie können die LIKE-Klausel zusammen mit der WHERE-Klausel verwenden.

  • Sie können die LIKE-Klausel anstelle von verwenden equals to Zeichen.

  • Wenn LIKE zusammen mit dem% -Zeichen verwendet wird, funktioniert es wie eine Metazeichensuche.

  • Sie können mit mehr als einer Bedingung angeben AND oder OR Betreiber.

  • Eine WHERE ... LIKE-Klausel kann zusammen mit dem SQL-Befehl DELETE oder UPDATE verwendet werden, um auch eine Bedingung anzugeben.

Verwenden der LIKE-Klausel an der Eingabeaufforderung

Dies verwendet den SQL SELECT-Befehl mit der WHERE ... LIKE-Klausel, um die ausgewählten Daten aus der MySQL-Tabelle abzurufen. tutorials_tbl.

Beispiel

Im folgenden Beispiel werden alle Datensätze aus dem zurückgegeben tutorials_tbl Tabelle, mit der der Autorenname endet jay - -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl 
   -> WHERE tutorial_author LIKE '%jay';
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|      3      |  JAVA Tutorial |     Sanjay      |    2007-05-21   |   
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 sec)

mysql>

Verwenden der LIKE-Klausel in PHP Script

Sie können eine ähnliche Syntax der WHERE ... LIKE-Klausel in der PHP-Funktion verwenden - mysql_query(). Diese Funktion wird verwendet, um den SQL-Befehl und später eine andere PHP-Funktion auszuführen -mysql_fetch_array() kann verwendet werden, um alle ausgewählten Daten abzurufen, wenn die WHERE ... LIKE-Klausel zusammen mit dem SELECT-Befehl verwendet wird.

Wenn jedoch die WHERE ... LIKE-Klausel mit dem Befehl DELETE oder UPDATE verwendet wird, ist kein weiterer PHP-Funktionsaufruf erforderlich.

Beispiel

Probieren Sie das folgende Beispiel aus, um alle Datensätze von zurückzugeben tutorials_tbl Tabelle, für die der Autorenname enthält jay - -

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root'; $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title, 
      tutorial_author, submission_date
      FROM tutorials_tbl
      WHERE tutorial_author LIKE "%jay%"';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn ); if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

Wir haben die SQL gesehen SELECTBefehl zum Abrufen von Daten aus einer MySQL-Tabelle. Wenn Sie Zeilen auswählen, kann der MySQL-Server diese in beliebiger Reihenfolge zurückgeben, sofern Sie nichts anderes anweisen, indem Sie angeben, wie das Ergebnis sortiert werden soll. Sie sortieren eine Ergebnismenge jedoch, indem Sie eine hinzufügenORDER BY Klausel, die die Spalte (n) benennt, die Sie sortieren möchten.

Syntax

Der folgende Codeblock ist eine generische SQL-Syntax des Befehls SELECT zusammen mit der ORDER BY-Klausel zum Sortieren der Daten aus einer MySQL-Tabelle.

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
  • Sie können das zurückgegebene Ergebnis nach jedem Feld sortieren, wenn dieses Feld aufgelistet ist.

  • Sie können das Ergebnis nach mehreren Feldern sortieren.

  • Sie können das Schlüsselwort ASC oder DESC verwenden, um das Ergebnis in aufsteigender oder absteigender Reihenfolge zu erhalten. Standardmäßig ist es die aufsteigende Reihenfolge.

  • Sie können die WHERE ... LIKE-Klausel auf die übliche Weise verwenden, um eine Bedingung zu setzen.

Verwenden der ORDER BY-Klausel an der Eingabeaufforderung

Dies verwendet den SQL SELECT-Befehl mit dem ORDER BY Klausel zum Abrufen von Daten aus der MySQL-Tabelle - tutorials_tbl.

Beispiel

Probieren Sie das folgende Beispiel aus, das das Ergebnis in aufsteigender Reihenfolge zurückgibt.

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl ORDER BY tutorial_author ASC
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|      2      |  Learn MySQL   |     Abdul S     |    2007-05-24   |   
|      1      |   Learn PHP    |    John Poul    |    2007-05-24   |   
|      3      | JAVA Tutorial  |     Sanjay      |    2007-05-06   |   
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.42 sec)

mysql>

Überprüfen Sie alle Autorennamen, die in aufsteigender Reihenfolge aufgeführt sind.

Verwenden der ORDER BY-Klausel in einem PHP-Skript

Sie können eine ähnliche Syntax der ORDER BY-Klausel in der PHP-Funktion verwenden - mysql_query(). Diese Funktion wird verwendet, um den SQL-Befehl und später eine andere PHP-Funktion auszuführenmysql_fetch_array() kann verwendet werden, um alle ausgewählten Daten abzurufen.

Beispiel

Probieren Sie das folgende Beispiel aus, das das Ergebnis in absteigender Reihenfolge der Autoren des Tutorials zurückgibt.

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root'; $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title, 
      tutorial_author, submission_date
      FROM tutorials_tbl
      ORDER BY  tutorial_author DESC';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn ); if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

In den vorherigen Kapiteln haben wir jeweils Daten aus einer Tabelle abgerufen. Dies ist gut genug für einfache Takes, aber in den meisten MySQL-Anwendungen der realen Welt müssen Sie häufig Daten aus mehreren Tabellen in einer einzigen Abfrage abrufen.

Sie können mehrere Tabellen in Ihrer einzelnen SQL-Abfrage verwenden. Der Beitritt zu MySQL bezieht sich auf das Zerschlagen von zwei oder mehr Tabellen in einer einzigen Tabelle.

Sie können JOINS in den Anweisungen SELECT, UPDATE und DELETE verwenden, um die MySQL-Tabellen zu verbinden. Wir werden auch ein Beispiel für LEFT JOIN sehen, das sich von dem einfachen MySQL JOIN unterscheidet.

Verwenden von Joins an der Eingabeaufforderung

Angenommen, wir haben zwei Tabellen tcount_tbl und tutorials_tbl, in TUTORIALS. Schauen Sie sich nun die folgenden Beispiele an -

Beispiel

Die folgenden Beispiele -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * FROM tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
|      mahran     |       20       |     
|      mahnaz     |      NULL      |        
|       Jen       |      NULL      |          
|      Gill       |       20       |          
|    John Poul    |        1       |      
|     Sanjay      |        1       |        
+-----------------+----------------+
6 rows in set (0.01 sec)
mysql> SELECT * from tutorials_tbl;
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|      1      |  Learn PHP     |     John Poul   |    2007-05-24   |   
|      2      |  Learn MySQL   |      Abdul S    |    2007-05-24   |   
|      3      | JAVA Tutorial  |      Sanjay     |    2007-05-06   |   
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.00 sec)
mysql>

Jetzt können wir eine SQL-Abfrage schreiben, um diese beiden Tabellen zu verbinden. Diese Abfrage wählt alle Autoren aus der Tabelle austutorials_tbl und holt die entsprechende Anzahl von Tutorials aus dem tcount_tbl.

mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
   -> FROM tutorials_tbl a, tcount_tbl b
   -> WHERE a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
|      1      |    John Poul    |        1       |
|      3      |     Sanjay      |        1       |
+-------------+-----------------+----------------+
2 rows in set (0.01 sec)
mysql>

Verwenden von Joins in einem PHP-Skript

Sie können jede der oben genannten SQL-Abfragen im PHP-Skript verwenden. Sie müssen nur die SQL-Abfrage an die PHP-Funktion übergebenmysql_query() und dann werden Sie die Ergebnisse auf die übliche Weise abrufen.

Beispiel

Das folgende Beispiel -

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root'; $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
      FROM tutorials_tbl a, tcount_tbl b
      WHERE a.tutorial_author = b.tutorial_author';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn ); if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Author:{$row['tutorial_author']} <br> ". "Count: {$row['tutorial_count']} <br> ".
         "Tutorial ID: {$row['tutorial_id']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>

MySQL LEFT JOIN

A MySQL left join is different from a simple join. A MySQL LEFT JOIN gives some extra consideration to the table that is on the left.

If I do a LEFT JOIN, I get all the records that match in the same way and IN ADDITION I get an extra record for each unmatched record in the left table of the join: thus ensuring (in my example) that every AUTHOR gets a mention.

Example

Try the following example to understand the LEFT JOIN.

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
   -> FROM tutorials_tbl a LEFT JOIN tcount_tbl b
   -> ON a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
|      1      |    John Poul    |       1        |
|      2      |     Abdul S     |      NULL      |
|      3      |     Sanjay      |       1        |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)

You would need to do more practice to become familiar with JOINS. This is slightly a bit complex concept in MySQL/SQL and will become more clear while doing real examples.

We have seen the SQL SELECT command along with the WHERE clause to fetch data from a MySQL table, but when we try to give a condition, which compares the field or the column value to NULL, it does not work properly.

To handle such a situation, MySQL provides three operators −

  • IS NULL − This operator returns true, if the column value is NULL.

  • IS NOT NULL − This operator returns true, if the column value is not NULL.

  • <=> − This operator compares values, which (unlike the = operator) is true even for two NULL values.

The conditions involving NULL are special. You cannot use = NULL or != NULL to look for NULL values in columns. Such comparisons always fail because it is impossible to tell whether they are true or not. Sometimes, even NULL = NULL fails.

To look for columns that are or are not NULL, use IS NULL or IS NOT NULL.

Using NULL values at the Command Prompt

Assume that there is a table called tcount_tbl in the TUTORIALS database and it contains two columns namely tutorial_author and tutorial_count, where a NULL tutorial_count indicates that the value is unknown.

Example

Try the following examples −

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tcount_tbl
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> );
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO tcount_tbl
   -> (tutorial_author, tutorial_count) values ('mahran', 20);

mysql> INSERT INTO tcount_tbl
   -> (tutorial_author, tutorial_count) values ('mahnaz', NULL);

mysql> INSERT INTO tcount_tbl
   -> (tutorial_author, tutorial_count) values ('Jen', NULL);

mysql> INSERT INTO tcount_tbl
   -> (tutorial_author, tutorial_count) values ('Gill', 20);

mysql> SELECT * from tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
|     mahran      |       20       |
|     mahnaz      |      NULL      |
|      Jen        |      NULL      |
|     Gill        |       20       |
+-----------------+----------------+
4 rows in set (0.00 sec)

mysql>

You can see that = and != do not work with NULL values as follows −

mysql> SELECT * FROM tcount_tbl WHERE tutorial_count = NULL;
Empty set (0.00 sec)

mysql> SELECT * FROM tcount_tbl WHERE tutorial_count != NULL;
Empty set (0.01 sec)

To find the records where the tutorial_count column is or is not NULL, the queries should be written as shown in the following program.

mysql> SELECT * FROM tcount_tbl 
   -> WHERE tutorial_count IS NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
|     mahnaz      |      NULL      |
|      Jen        |      NULL      |
+-----------------+----------------+
2 rows in set (0.00 sec)
mysql> SELECT * from tcount_tbl 
   -> WHERE tutorial_count IS NOT NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
|     mahran      |       20       |
|     Gill        |       20       |
+-----------------+----------------+
2 rows in set (0.00 sec)

Handling NULL Values in a PHP Script

You can use the if...else condition to prepare a query based on the NULL value.

Example

The following example takes the tutorial_count from outside and then compares it with the value available in the table.

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   if( isset($tutorial_count )) { $sql = 'SELECT tutorial_author, tutorial_count
         FROM  tcount_tbl
         WHERE tutorial_count = $tutorial_count'; } else { $sql = 'SELECT tutorial_author, tutorial_count
         FROM  tcount_tbl
         WHERE tutorial_count IS $tutorial_count'; } mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Author:{$row['tutorial_author']}  <br> ".
         "Count: {$row['tutorial_count']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>

You have seen MySQL pattern matching with LIKE ...%. MySQL supports another type of pattern matching operation based on the regular expressions and the REGEXP operator. If you are aware of PHP or PERL, then it is very simple for you to understand because this matching is same like those scripting the regular expressions.

Following is the table of pattern, which can be used along with the REGEXP operator.

Pattern What the pattern matches
^ Beginning of string
$ End of string
. Any single character
[...] Any character listed between the square brackets
[^...] Any character not listed between the square brackets
p1|p2|p3 Alternation; matches any of the patterns p1, p2, or p3
* Zero or more instances of preceding element
+ One or more instances of preceding element
{n} n instances of preceding element
{m,n} m through n instances of preceding element

Examples

Now based on above table, you can device various type of SQL queries to meet your requirements. Here, I am listing a few for your understanding.

Consider we have a table called person_tbl and it is having a field called name

Query to find all the names starting with 'st'

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';

Query to find all the names ending with 'ok'

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

Query to find all the names, which contain 'mar'

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

Query to find all the names starting with a vowel and ending with 'ok'

mysql> SELECT FirstName FROM intque.person_tbl WHERE FirstName REGEXP '^[aeiou].*ok$';

A transaction is a sequential group of database manipulation operations, which is performed as if it were one single work unit. In other words, a transaction will never be complete unless each individual operation within the group is successful. If any operation within the transaction fails, the entire transaction will fail.

Practically, you will club many SQL queries into a group and you will execute all of them together as a part of a transaction.

Properties of Transactions

Transactions have the following four standard properties, usually referred to by the acronym ACID

  • Atomicity − This ensures that all operations within the work unit are completed successfully; otherwise, the transaction is aborted at the point of failure and previous operations are rolled back to their former state.

  • Consistency − This ensures that the database properly changes states upon a successfully committed transaction.

  • Isolation − This enables transactions to operate independently on and transparent to each other.

  • Durability − This ensures that the result or effect of a committed transaction persists in case of a system failure.

In MySQL, the transactions begin with the statement BEGIN WORK and end with either a COMMIT or a ROLLBACK statement. The SQL commands between the beginning and ending statements form the bulk of the transaction.

COMMIT and ROLLBACK

These two keywords Commit and Rollback are mainly used for MySQL Transactions.

  • When a successful transaction is completed, the COMMIT command should be issued so that the changes to all involved tables will take effect.

  • If a failure occurs, a ROLLBACK command should be issued to return every table referenced in the transaction to its previous state.

You can control the behavior of a transaction by setting session variable called AUTOCOMMIT. If AUTOCOMMIT is set to 1 (the default), then each SQL statement (within a transaction or not) is considered a complete transaction and committed by default when it finishes.

When AUTOCOMMIT is set to 0, by issuing the SET AUTOCOMMIT = 0 command, the subsequent series of statements acts like a transaction and no activities are committed until an explicit COMMIT statement is issued.

You can execute these SQL commands in PHP by using the mysql_query() function.

A Generic Example on Transaction

This sequence of events is independent of the programming language used. The logical path can be created in whichever language you use to create your application.

You can execute these SQL commands in PHP by using the mysql_query() function.

  • Begin transaction by issuing the SQL command BEGIN WORK.

  • Issue one or more SQL commands like SELECT, INSERT, UPDATE or DELETE.

  • Check if there is no error and everything is according to your requirement.

  • If there is any error, then issue a ROLLBACK command, otherwise issue a COMMIT command.

Transaction-Safe Table Types in MySQL

You cannot use transactions directly, but for certain exceptions you can. However, they are not safe and guaranteed. If you plan to use transactions in your MySQL programming, then you need to create your tables in a special way. There are many types of tables, which support transactions, but the most popular one is InnoDB.

Support for InnoDB tables requires a specific compilation parameter when compiling MySQL from the source. If your MySQL version does not have InnoDB support, ask your Internet Service Provider to build a version of MySQL with support for InnoDB table types or download and install the MySQL-Max Binary Distribution for Windows or Linux/UNIX and work with the table type in a development environment.

If your MySQL installation supports InnoDB tables, simply add a TYPE = InnoDB definition to the table creation statement.

For example, the following code creates an InnoDB table called tcount_tbl

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tcount_tbl
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.05 sec)

For more details on InnoDB, you can click on the following link −InnoDB

You can use other table types like GEMINI or BDB, but it depends on your installation, whether it supports these two table types or not.

The MySQL ALTER command is very useful when you want to change a name of your table, any table field or if you want to add or delete an existing column in a table.

Let us begin with the creation of a table called testalter_tbl.

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table testalter_tbl
   -> (
   -> i INT,
   -> c CHAR(1)
   -> );
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   i   | int(11) | YES  |     |   NULL  |       |
|   c   | char(1) | YES  |     |   NULL  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Löschen, Hinzufügen oder Neupositionieren einer Spalte

Wenn Sie eine vorhandene Spalte i aus der obigen MySQL-Tabelle löschen möchten, verwenden Sie die DROP Klausel zusammen mit der ALTER Befehl wie unten gezeigt -

mysql> ALTER TABLE testalter_tbl  DROP i;

EIN DROP Klausel funktioniert nicht, wenn die Spalte die einzige in der Tabelle ist.

Verwenden Sie zum Hinzufügen einer Spalte ADD und geben Sie die Spaltendefinition an. Die folgende Anweisung stellt die wieder heri Spalte zum testalter_tbl -

mysql> ALTER TABLE testalter_tbl ADD i INT;

Nach dem Ausgeben dieser Anweisung enthält testalter dieselben zwei Spalten wie beim ersten Erstellen der Tabelle, hat jedoch nicht dieselbe Struktur. Dies liegt daran, dass standardmäßig neue Spalten am Ende der Tabelle hinzugefügt werden. Obwohli war ursprünglich die erste Spalte in mytbl, jetzt ist es die letzte.

mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   c   | char(1) | YES  |     |   NULL  |       |
|   i   | int(11) | YES  |     |   NULL  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Um anzuzeigen, dass eine Spalte an einer bestimmten Position in der Tabelle angezeigt werden soll, verwenden Sie entweder FIRST, um sie zur ersten Spalte zu machen, oder AFTER col_name um anzuzeigen, dass die neue Spalte nach dem Spaltennamen platziert werden soll.

Versuche Folgendes ALTER TABLE Aussagen, mit SHOW COLUMNS nach jedem, um zu sehen, welche Wirkung jeder hat -

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;

Die Bezeichner FIRST und AFTER funktionieren nur mit der ADD-Klausel. Dies bedeutet, dass Sie zuerst eine vorhandene Spalte in einer Tabelle neu positionieren müssenDROP es und dann ADD es an der neuen Position.

Ändern (Ändern) einer Spaltendefinition oder eines Namens

Verwenden Sie, um die Definition einer Spalte zu ändern MODIFY oder CHANGE Klausel zusammen mit dem Befehl ALTER.

Zum Beispiel, um die Spalte zu ändern c Von CHAR (1) bis CHAR (10) können Sie den folgenden Befehl verwenden:

mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);

Mit CHANGEist die Syntax etwas anders. Nach dem Schlüsselwort CHANGE benennen Sie die Spalte, die Sie ändern möchten, und geben dann die neue Definition an, die den neuen Namen enthält.

Probieren Sie das folgende Beispiel aus:

mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;

Wenn Sie jetzt CHANGE zum Konvertieren verwenden j von BIGINT zurück zu INT Ohne den Spaltennamen zu ändern, lautet die Anweisung wie folgt:

mysql> ALTER TABLE testalter_tbl CHANGE j j INT;

The Effect of ALTER TABLE on Null and Default Value Attributes- Wenn Sie eine Spalte ÄNDERN oder ÄNDERN, können Sie auch angeben, ob die Spalte NULL-Werte enthalten darf oder nicht und welchen Standardwert sie hat. Wenn Sie dies nicht tun, weist MySQL diesen Attributen automatisch Werte zu.

Der folgende Codeblock ist ein Beispiel, in dem die NOT NULL Die Spalte hat standardmäßig den Wert 100.

mysql> ALTER TABLE testalter_tbl 
   -> MODIFY j BIGINT NOT NULL DEFAULT 100;

Wenn Sie den obigen Befehl nicht verwenden, füllt MySQL NULL-Werte in alle Spalten.

Ändern (Ändern) des Standardwerts einer Spalte

Sie können einen Standardwert für jede Spalte mithilfe von ändern ALTER Befehl.

Probieren Sie das folgende Beispiel aus.

mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   c   | char(1) | YES  |     |   NULL  |       |
|   i   | int(11) | YES  |     |   1000  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Sie können die Standardeinschränkung aus jeder Spalte entfernen, indem Sie die DROP-Klausel zusammen mit der verwenden ALTER Befehl.

mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   c   | char(1) | YES  |     |   NULL  |       |
|   i   | int(11) | YES  |     |   NULL  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Ändern (Ändern) eines Tabellentyps

Sie können einen Tabellentyp verwenden, indem Sie die TYPEKlausel zusammen mit dem Befehl ALTER. Probieren Sie das folgende Beispiel aus, um das zu änderntestalter_tbl zu MYISAM Tabellentyp.

Verwenden Sie die, um den aktuellen Tabellentyp zu ermitteln SHOW TABLE STATUS Erklärung.

mysql> ALTER TABLE testalter_tbl TYPE = MYISAM;
mysql>  SHOW TABLE STATUS LIKE 'testalter_tbl'\G
*************************** 1. row ****************
           Name: testalter_tbl
           Type: MyISAM
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 25769803775
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2007-06-03 08:04:36
    Update_time: 2007-06-03 08:04:36
     Check_time: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

Umbenennen (Ändern) einer Tabelle

Verwenden Sie zum Umbenennen einer Tabelle die RENAME Option der ALTER TABLE Erklärung.

Probieren Sie das folgende Beispiel aus, um es umzubenennen testalter_tbl zu alter_tbl.

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

Mit dem Befehl ALTER können Sie den Befehl INDEX erstellen und in einer MySQL-Datei ablegen. Wir werden diesen Befehl im nächsten Kapitel ausführlich besprechen.

Ein Datenbankindex ist eine Datenstruktur, die die Geschwindigkeit von Operationen in einer Tabelle verbessert. Indizes können mithilfe einer oder mehrerer Spalten erstellt werden. Dies ist die Grundlage für schnelle zufällige Suchvorgänge und eine effiziente Reihenfolge des Zugriffs auf Datensätze.

Beim Erstellen eines Index sollte berücksichtigt werden, welche Spalten zum Erstellen von SQL-Abfragen und zum Erstellen eines oder mehrerer Indizes für diese Spalten verwendet werden.

In der Praxis sind Indizes auch eine Art von Tabellen, in denen der Primärschlüssel oder das Indexfeld sowie ein Zeiger auf jeden Datensatz in der eigentlichen Tabelle gespeichert sind.

Die Benutzer können die Indizes nicht sehen. Sie dienen lediglich zur Beschleunigung von Abfragen und werden von der Datenbanksuchmaschine verwendet, um Datensätze sehr schnell zu finden.

Die Anweisungen INSERT und UPDATE benötigen mehr Zeit für Tabellen mit Indizes, während die Anweisungen SELECT für diese Tabellen schnell werden. Der Grund dafür ist, dass eine Datenbank beim Einfügen oder Aktualisieren auch die Indexwerte einfügen oder aktualisieren muss.

Einfacher und einzigartiger Index

Sie können einen eindeutigen Index für eine Tabelle erstellen. Ein eindeutiger Index bedeutet, dass zwei Zeilen nicht denselben Indexwert haben können. Hier ist die Syntax zum Erstellen eines Index für eine Tabelle.

CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);

Sie können eine oder mehrere Spalten verwenden, um einen Index zu erstellen.

Zum Beispiel können wir einen Index für erstellen tutorials_tbl mit tutorial_author.

CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author)

Sie können einen einfachen Index für eine Tabelle erstellen. Lass einfach das wegUNIQUESchlüsselwort aus der Abfrage, um einen einfachen Index zu erstellen. Ein einfacher Index ermöglicht doppelte Werte in einer Tabelle.

Wenn Sie die Werte in einer Spalte in absteigender Reihenfolge indizieren möchten, können Sie das reservierte Wort DESC nach dem Spaltennamen hinzufügen.

mysql> CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author DESC)

Befehl ALTER zum Hinzufügen und Löschen von INDEX

Es gibt vier Arten von Anweisungen zum Hinzufügen von Indizes zu einer Tabelle:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) - Diese Aussage fügt a hinzu PRIMARY KEYDies bedeutet, dass die indizierten Werte eindeutig sein müssen und nicht NULL sein dürfen.

  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) - Diese Anweisung erstellt einen Index, für den die Werte eindeutig sein müssen (mit Ausnahme der NULL-Werte, die möglicherweise mehrmals vorkommen).

  • ALTER TABLE tbl_name ADD INDEX index_name (column_list) - Dies fügt einen normalen Index hinzu, in dem jeder Wert mehrmals vorkommen kann.

  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) - Dadurch wird ein spezieller FULLTEXT-Index erstellt, der für die Textsuche verwendet wird.

Der folgende Codeblock ist ein Beispiel zum Hinzufügen eines Index zu einer vorhandenen Tabelle.

mysql> ALTER TABLE testalter_tbl ADD INDEX (c);

Sie können jeden INDEX mit dem löschen DROP Klausel zusammen mit dem Befehl ALTER.

Probieren Sie das folgende Beispiel aus, um den oben erstellten Index zu löschen.

mysql> ALTER TABLE testalter_tbl DROP INDEX (c);

Sie können jeden INDEX löschen, indem Sie die DROP-Klausel zusammen mit dem Befehl ALTER verwenden.

ALTER Befehl zum Hinzufügen und Löschen des PRIMARY KEY

Auf die gleiche Weise können Sie auch einen Primärschlüssel hinzufügen. Stellen Sie jedoch sicher, dass der Primärschlüssel für Spalten funktioniert, die NICHT NULL sind.

Der folgende Codeblock ist ein Beispiel zum Hinzufügen des Primärschlüssels zu einer vorhandenen Tabelle. Dadurch wird eine Spalte zuerst NICHT NULL und dann als Primärschlüssel hinzugefügt.

mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

Mit dem Befehl ALTER können Sie einen Primärschlüssel wie folgt löschen:

mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;

Um einen Index zu löschen, der kein PRIMARY KEY ist, müssen Sie den Indexnamen angeben.

INDEX-Informationen anzeigen

Du kannst den ... benutzen SHOW INDEXBefehl zum Auflisten aller mit einer Tabelle verknüpften Indizes. Die Ausgabe im vertikalen Format (angegeben durch \ G) ist bei dieser Anweisung häufig hilfreich, um einen langen Zeilenumbruch zu vermeiden.

Probieren Sie das folgende Beispiel aus:

mysql> SHOW INDEX FROM table_name\G
........

Die temporären Tabellen können in einigen Fällen sehr nützlich sein, um temporäre Daten zu speichern. Das Wichtigste, was für temporäre Tabellen bekannt sein sollte, ist, dass sie gelöscht werden, wenn die aktuelle Clientsitzung beendet wird.

Was sind temporäre Tabellen?

Temporäre Tabellen wurden in MySQL Version 3.23 hinzugefügt. Wenn Sie eine ältere Version von MySQL als 3.23 verwenden, können Sie die temporären Tabellen nicht verwenden, aber Sie können verwendenHeap Tables.

Wie bereits erwähnt, halten temporäre Tabellen nur so lange, wie die Sitzung aktiv ist. Wenn Sie den Code in einem PHP-Skript ausführen, wird die temporäre Tabelle automatisch zerstört, wenn die Ausführung des Skripts abgeschlossen ist. Wenn Sie über das MySQL-Client-Programm mit dem MySQL-Datenbankserver verbunden sind, bleibt die temporäre Tabelle bestehen, bis Sie den Client schließen oder die Tabelle manuell zerstören.

Beispiel

Das folgende Programm ist ein Beispiel für die Verwendung der temporären Tabelle. Der gleiche Code kann in PHP-Skripten mit dem verwendet werdenmysql_query() Funktion.

mysql> CREATE TEMPORARY TABLE SalesSummary (
   -> product_name VARCHAR(50) NOT NULL
   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SalesSummary
   -> (product_name, total_sales, avg_unit_price, total_units_sold)
   -> VALUES
   -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
|   cucumber   |   100.25    |     90.00      |         2        |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

Wenn Sie eine SHOW TABLESBefehl, dann würde Ihre temporäre Tabelle nicht in der Liste aufgeführt. Wenn Sie sich jetzt von der MySQL-Sitzung abmelden und dann eine ausgebenSELECTBefehl, dann finden Sie keine Daten in der Datenbank verfügbar. Auch Ihre temporäre Tabelle wird nicht existieren.

Temporäre Tabellen löschen

Standardmäßig werden alle temporären Tabellen von MySQL gelöscht, wenn Ihre Datenbankverbindung beendet wird. Wenn Sie sie jedoch zwischendurch löschen möchten, geben Sie das ausDROP TABLE Befehl.

Das folgende Programm ist ein Beispiel zum Löschen einer temporären Tabelle:

mysql> CREATE TEMPORARY TABLE SalesSummary (
   -> product_name VARCHAR(50) NOT NULL
   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SalesSummary
   -> (product_name, total_sales, avg_unit_price, total_units_sold)
   -> VALUES
   -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
|   cucumber   |   100.25    |     90.00      |         2        |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
mysql> DROP TABLE SalesSummary;
mysql>  SELECT * FROM SalesSummary;
ERROR 1146: Table 'TUTORIALS.SalesSummary' doesn't exist

Es kann vorkommen, dass Sie eine genaue Kopie einer Tabelle benötigen und CREATE TABLE ... SELECT passt nicht zu Ihren Zwecken, da die Kopie dieselben Indizes, Standardwerte usw. enthalten muss.

Sie können mit dieser Situation umgehen, indem Sie die folgenden Schritte ausführen:

  • Verwenden Sie SHOW CREATE TABLE, um eine CREATE TABLE-Anweisung abzurufen, die die Struktur, die Indizes und alle Elemente der Quelltabelle angibt.

  • Ändern Sie die Anweisung, um den Tabellennamen in den Namen der Klontabelle zu ändern, und führen Sie die Anweisung aus. Auf diese Weise erhalten Sie die genaue Klontabelle.

  • Wenn Sie auch den Tabelleninhalt kopieren möchten, geben Sie optional auch eine INSERT INTO ... SELECT-Anweisung aus.

Beispiel

Probieren Sie das folgende Beispiel aus, um eine Klontabelle für zu erstellen tutorials_tbl.

Step 1 - Holen Sie sich die vollständige Struktur über die Tabelle.

mysql> SHOW CREATE TABLE tutorials_tbl \G;
*************************** 1. row ***************************
      Table: tutorials_tbl
Create Table: CREATE TABLE `tutorials_tbl` (
   `tutorial_id` int(11) NOT NULL auto_increment,
   `tutorial_title` varchar(100) NOT NULL default '',
   `tutorial_author` varchar(40) NOT NULL default '',
   `submission_date` date default NULL,
   PRIMARY KEY  (`tutorial_id`),
   UNIQUE KEY `AUTHOR_INDEX` (`tutorial_author`)
) TYPE = MyISAM
1 row in set (0.00 sec)

ERROR:
No query specified

Step 2 - Benennen Sie diese Tabelle um und erstellen Sie eine weitere Tabelle.

mysql> CREATE TABLE clone_tbl (
   -> tutorial_id int(11) NOT NULL auto_increment,
   -> tutorial_title varchar(100) NOT NULL default '',
   -> tutorial_author varchar(40) NOT NULL default '',
   -> submission_date date default NULL,
   -> PRIMARY KEY  (tutorial_id),
   -> UNIQUE KEY AUTHOR_INDEX (tutorial_author)
-> ) TYPE = MyISAM;
Query OK, 0 rows affected (1.80 sec)

Step 3- Nach dem Ausführen von Schritt 2 erstellen Sie eine Klontabelle in Ihrer Datenbank. Wenn Sie Daten aus einer alten Tabelle kopieren möchten, können Sie dies mit der Anweisung INSERT INTO ... SELECT tun.

mysql> INSERT INTO clone_tbl (tutorial_id,
   -> tutorial_title,
   -> tutorial_author,
   -> submission_date)
   
   -> SELECT tutorial_id,tutorial_title,
   -> tutorial_author,submission_date
   -> FROM tutorials_tbl;
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0

Schließlich haben Sie eine genaue Klontabelle, wie Sie sie haben wollten.

Abrufen und Verwenden von MySQL-Metadaten

Es gibt drei Arten von Informationen, die Sie von MySQL erhalten möchten.

  • Information about the result of queries - Dies schließt die Anzahl der Datensätze ein, die von einer SELECT-, UPDATE- oder DELETE-Anweisung betroffen sind.

  • Information about the tables and databases - Dazu gehören Informationen zur Struktur der Tabellen und Datenbanken.

  • Information about the MySQL server - Dies beinhaltet den Status des Datenbankservers, die Versionsnummer usw.

Es ist sehr einfach, alle diese Informationen an der MySQL-Eingabeaufforderung abzurufen. Bei Verwendung von PERL- oder PHP-APIs müssen jedoch verschiedene APIs explizit aufgerufen werden, um alle diese Informationen abzurufen.

Abrufen der Anzahl der von einer Abfrage betroffenen Zeilen

Lassen Sie uns nun sehen, wie Sie diese Informationen erhalten.

PERL Beispiel

In DBI-Skripten wird die Anzahl der betroffenen Zeilen von der zurückgegeben do( ) oder von der execute( ) Befehl, abhängig davon, wie Sie die Abfrage ausführen.

# Method 1
# execute $query using do( )
my $count = $dbh->do ($query); # report 0 rows if an error occurred printf "%d rows were affected\n", (defined ($count) ? $count : 0); # Method 2 # execute query using prepare( ) plus execute( ) my $sth = $dbh->prepare ($query);
my $count = $sth->execute ( );
printf "%d rows were affected\n", (defined ($count) ? $count : 0);

PHP Beispiel

Rufen Sie in PHP die auf mysql_affected_rows( ) Funktion, um herauszufinden, wie viele Zeilen eine Abfrage geändert hat.

$result_id = mysql_query ($query, $conn_id); # report 0 rows if the query failed $count = ($result_id ? mysql_affected_rows ($conn_id) : 0);
print ("$count rows were affected\n");

Auflisten von Tabellen und Datenbanken

Es ist sehr einfach, alle mit einem Datenbankserver verfügbaren Datenbanken und Tabellen aufzulisten. Ihr Ergebnis kann seinnull wenn Sie nicht über die erforderlichen Berechtigungen verfügen.

Abgesehen von der Methode, die im folgenden Codeblock gezeigt wird, können Sie verwenden SHOW TABLES oder SHOW DATABASES Abfragen, um die Liste der Tabellen oder Datenbanken entweder in PHP oder in PERL abzurufen.

PERL Beispiel

# Get all the tables available in current database.
my @tables = $dbh->tables ( );

foreach $table (@tables ){ print "Table Name $table\n";
}

PHP Beispiel

<?php
   $con = mysql_connect("localhost", "userid", "password"); if (!$con) {
      die('Could not connect: ' . mysql_error());
   }
   $db_list = mysql_list_dbs($con);

   while ($db = mysql_fetch_object($db_list)) {
      echo $db->Database . "<br />"; } mysql_close($con);
?>

Server-Metadaten abrufen

Es gibt einige wichtige Befehle in MySQL, die entweder an der MySQL-Eingabeaufforderung oder mithilfe eines Skripts wie PHP ausgeführt werden können, um verschiedene wichtige Informationen über den Datenbankserver abzurufen.

Sr.Nr. Befehl & Beschreibung
1

SELECT VERSION( )

Serverversionszeichenfolge

2

SELECT DATABASE( )

Aktueller Datenbankname (leer, wenn keiner)

3

SELECT USER( )

Aktueller Benutzername

4

SHOW STATUS

Serverstatusanzeigen

5

SHOW VARIABLES

Serverkonfigurationsvariablen

Eine Sequenz ist eine Menge von Ganzzahlen 1, 2, 3, ..., die in der Reihenfolge einer bestimmten Anforderung generiert werden. Sequenzen werden häufig in den Datenbanken verwendet, da bei vielen Anwendungen jede Zeile in einer Tabelle einen eindeutigen Wert enthalten muss und Sequenzen eine einfache Möglichkeit bieten, sie zu generieren.

In diesem Kapitel wird die Verwendung von Sequenzen in MySQL beschrieben.

Verwenden der Spalte AUTO_INCREMENT

Die einfachste Möglichkeit in MySQL, Sequenzen zu verwenden, besteht darin, eine Spalte als zu definieren AUTO_INCREMENT und überlassen Sie die restlichen Dinge MySQL, um sich darum zu kümmern.

Beispiel

Probieren Sie das folgende Beispiel aus. Dadurch wird eine Tabelle erstellt und anschließend werden einige Zeilen in diese Tabelle eingefügt, in denen keine Datensatz-ID angegeben werden muss, da sie von MySQL automatisch inkrementiert wird.

mysql> CREATE TABLE insect
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO insect (id,name,date,origin) VALUES
   -> (NULL,'housefly','2001-09-10','kitchen'),
   -> (NULL,'millipede','2001-09-10','driveway'),
   -> (NULL,'grasshopper','2001-09-10','front yard');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> SELECT * FROM insect ORDER BY id;
+----+-------------+------------+------------+
| id |    name     |    date    |   origin   |
+----+-------------+------------+------------+
|  1 |  housefly   | 2001-09-10 |   kitchen  |
|  2 |  millipede  | 2001-09-10 |  driveway  |
|  3 | grasshopper | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)

Erhalten Sie AUTO_INCREMENT-Werte

Das LAST_INSERT_ID( )ist eine SQL-Funktion, sodass Sie sie von jedem Client aus verwenden können, der versteht, wie SQL-Anweisungen ausgegeben werden. Andernfalls bieten PERL- und PHP-Skripte exklusive Funktionen zum Abrufen des automatisch inkrementierten Werts des letzten Datensatzes.

PERL Beispiel

Verwenden Sie die mysql_insertid Attribut, um die zu erhalten AUTO_INCREMENTWert, der durch eine Abfrage generiert wird. Der Zugriff auf dieses Attribut erfolgt entweder über ein Datenbankhandle oder ein Anweisungshandle, je nachdem, wie Sie die Abfrage ausgeben.

Das folgende Beispiel verweist darauf über das Datenbankhandle.

$dbh->do ("INSERT INTO insect (name,date,origin) VALUES('moth','2001-09-14','windowsill')"); my $seq = $dbh->{mysql_insertid};

PHP Beispiel

Rufen Sie nach dem Ausgeben einer Abfrage, die einen AUTO_INCREMENT-Wert generiert, den Wert durch Aufrufen von ab mysql_insert_id( ) Befehl.

mysql_query ("INSERT INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id ($conn_id);

Bestehende Sequenz neu nummerieren

Es kann vorkommen, dass Sie viele Datensätze aus einer Tabelle gelöscht haben und alle Datensätze neu sortieren möchten. Dies kann mit einem einfachen Trick geschehen, aber Sie sollten sehr vorsichtig sein, wenn Ihre Tabelle Verknüpfungen mit der anderen Tabelle aufweist.

Wenn Sie feststellen, dass die erneute Sequenzierung einer AUTO_INCREMENT-Spalte unvermeidbar ist, löschen Sie die Spalte aus der Tabelle und fügen Sie sie erneut hinzu.

Das folgende Beispiel zeigt, wie Sie die Nummer neu nummerieren id values in der Tabelle mit dieser Technik.

mysql> ALTER TABLE insect DROP id;
mysql> ALTER TABLE insect
   -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
   -> ADD PRIMARY KEY (id);

Starten einer Sequenz bei einem bestimmten Wert

Standardmäßig startet MySQL die Sequenz mit 1, Sie können jedoch zum Zeitpunkt der Tabellenerstellung auch eine andere Nummer angeben.

Das folgende Programm ist ein Beispiel, das zeigt, wie MySQL die Sequenz ab 100 startet.

mysql> CREATE TABLE insect
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);

Alternativ können Sie die Tabelle erstellen und dann den anfänglichen Sequenzwert mit dem festlegen ALTER TABLE Befehl.

mysql> ALTER TABLE t AUTO_INCREMENT = 100;

Im Allgemeinen enthalten Tabellen oder Ergebnismengen manchmal doppelte Datensätze. Meistens ist dies zulässig, manchmal ist es jedoch erforderlich, doppelte Datensätze zu stoppen. Es ist erforderlich, doppelte Datensätze zu identifizieren und aus der Tabelle zu entfernen. In diesem Kapitel wird beschrieben, wie Sie das Auftreten doppelter Datensätze in einer Tabelle verhindern und die bereits vorhandenen doppelten Datensätze entfernen.

Verhindern, dass Duplikate in einer Tabelle auftreten

Sie können eine verwenden PRIMARY KEY oder ein UNIQUE Indizieren Sie eine Tabelle mit den entsprechenden Feldern, um doppelte Datensätze zu stoppen.

Nehmen wir ein Beispiel: Die folgende Tabelle enthält keinen solchen Index oder Primärschlüssel, sodass doppelte Datensätze für möglich sind first_name und last_name.

CREATE TABLE person_tbl (
   first_name CHAR(20),
   last_name CHAR(20),
   sex CHAR(10)
);

Fügen Sie a hinzu, um zu verhindern, dass in dieser Tabelle mehrere Datensätze mit demselben Vor- und Nachnamen erstellt werden PRIMARY KEYzu seiner Definition. Wenn Sie dies tun, müssen Sie auch die indizierten Spalten als deklarierenNOT NULL, weil ein PRIMARY KEY erlaubt nicht NULL Werte -

CREATE TABLE person_tbl (
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);

Das Vorhandensein eines eindeutigen Index in einer Tabelle führt normalerweise zu einem Fehler, wenn Sie einen Datensatz in die Tabelle einfügen, der einen vorhandenen Datensatz in der Spalte oder den Spalten, die den Index definieren, dupliziert.

Verwenden Sie die INSERT IGNORE Befehl eher als die INSERTBefehl. Wenn ein Datensatz einen vorhandenen Datensatz nicht dupliziert, fügt MySQL ihn wie gewohnt ein. Wenn der Datensatz ein Duplikat ist, wird derIGNORE Das Schlüsselwort weist MySQL an, es stillschweigend zu verwerfen, ohne einen Fehler zu generieren.

Das folgende Beispiel tritt nicht als Fehler auf und fügt gleichzeitig keine doppelten Datensätze ein.

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

Verwenden Sie die REPLACEBefehl anstelle des INSERT-Befehls. Wenn der Datensatz neu ist, wird er wie bei INSERT eingefügt. Wenn es sich um ein Duplikat handelt, ersetzt der neue Datensatz den alten.

mysql> REPLACE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Ajay', 'Kumar');
Query OK, 1 row affected (0.00 sec)

mysql> REPLACE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Ajay', 'Kumar');
Query OK, 2 rows affected (0.00 sec)

Die Befehle INSERT IGNORE und REPLACE sollten gemäß dem Verhalten der doppelten Behandlung ausgewählt werden, das Sie ausführen möchten. Der Befehl INSERT IGNORE behält den ersten Satz der duplizierten Datensätze bei und verwirft die verbleibenden. Der Befehl REPLACE behält den letzten Satz von Duplikaten bei und löscht alle früheren.

Eine andere Möglichkeit, die Eindeutigkeit zu erzwingen, besteht darin, a hinzuzufügen UNIQUE Index statt eines primären Schlüssels für eine Tabelle.

CREATE TABLE person_tbl (
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

Duplikate zählen und identifizieren

Es folgt die Abfrage zum Zählen doppelter Datensätze mit Vorname und Nachname in einer Tabelle.

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
   -> FROM person_tbl
   -> GROUP BY last_name, first_name
   -> HAVING repetitions > 1;

Diese Abfrage gibt eine Liste aller doppelten Datensätze in der Tabelle person_tbl zurück. Führen Sie im Allgemeinen die folgenden Schritte aus, um doppelte Wertesätze zu identifizieren.

  • Bestimmen Sie, welche Spalten die Werte enthalten, die möglicherweise dupliziert werden.

  • Listen Sie diese Spalten in der Spaltenauswahlliste zusammen mit dem auf COUNT(*).

  • Listen Sie die Spalten in der GROUP BY Klausel auch.

  • Füge hinzu ein HAVING Klausel, die die eindeutigen Werte beseitigt, indem die Gruppenanzahl größer als eins sein muss.

Entfernen von Duplikaten aus einem Abfrageergebnis

Du kannst den ... benutzen DISTINCT Befehl zusammen mit der SELECT-Anweisung, um eindeutige Datensätze zu ermitteln, die in einer Tabelle verfügbar sind.

mysql> SELECT DISTINCT last_name, first_name
   -> FROM person_tbl
   -> ORDER BY last_name;

Eine Alternative zum Befehl DISTINCT besteht darin, eine GROUP BY-Klausel hinzuzufügen, die die von Ihnen ausgewählten Spalten benennt. Dadurch werden Duplikate entfernt und nur die eindeutigen Wertekombinationen in den angegebenen Spalten ausgewählt.

mysql> SELECT last_name, first_name
   -> FROM person_tbl
   -> GROUP BY (last_name, first_name);

Entfernen von Duplikaten mithilfe der Tabellenersetzung

Wenn Sie doppelte Datensätze in einer Tabelle haben und alle doppelten Datensätze aus dieser Tabelle entfernen möchten, gehen Sie wie folgt vor.

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
   -> FROM person_tbl;
   -> GROUP BY (last_name, first_name);

mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

Eine einfache Möglichkeit, doppelte Datensätze aus einer Tabelle zu entfernen, besteht darin, dieser Tabelle einen INDEX oder einen PRIMARY KEY hinzuzufügen. Selbst wenn diese Tabelle bereits verfügbar ist, können Sie diese Technik verwenden, um doppelte Datensätze zu entfernen, und Sie sind auch in Zukunft sicher.

mysql> ALTER IGNORE TABLE person_tbl
   -> ADD PRIMARY KEY (last_name, first_name);

Wenn Sie Benutzereingaben über eine Webseite in eine MySQL-Datenbank einfügen, besteht die Möglichkeit, dass Sie sich für ein Sicherheitsproblem, das als bekannt ist, weit offen gelassen haben SQL Injection. In diesem Kapitel erfahren Sie, wie Sie dies verhindern und Ihre Skripte und MySQL-Anweisungen sichern können.

Die SQL-Injection tritt normalerweise auf, wenn Sie einen Benutzer wie seinen Namen um Eingabe bitten und anstelle eines Namens eine MySQL-Anweisung erhalten, die Sie unwissentlich in Ihrer Datenbank ausführen.

Vertrauen Sie niemals den von einem Benutzer bereitgestellten Daten. Verarbeiten Sie diese Daten erst nach der Validierung. Dies erfolgt in der Regel durch Pattern Matching. Im folgenden Beispiel ist der Benutzername auf alphanumerische Zeichen plus Unterstrich und auf eine Länge zwischen 8 und 20 Zeichen beschränkt. Ändern Sie diese Regeln nach Bedarf.

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysql_query("SELECT * FROM users WHERE username = $matches[0]");
} else  {
   echo "username not accepted";
}

Betrachten Sie den folgenden Auszug, um dieses Problem zu demonstrieren.

// supposed input
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name = '{$name}'");

Der Funktionsaufruf soll einen Datensatz aus der Benutzertabelle abrufen, wobei die Namensspalte mit dem vom Benutzer angegebenen Namen übereinstimmt. Unter normalen Umständen würde $ name nur alphanumerische Zeichen und möglicherweise Leerzeichen enthalten. Aber hier durch Anhängen einer völlig neuen Abfrage an$namewird der Aufruf der Datenbank zu einer Katastrophe. Die injizierte DELETE-Abfrage entfernt alle Datensätze von Benutzern.

Glücklicherweise, wenn Sie MySQL verwenden, ist die mysql_query()Die Funktion erlaubt nicht das Stapeln von Abfragen oder das Ausführen mehrerer Abfragen in einem einzigen Funktionsaufruf. Wenn Sie versuchen, Abfragen zu stapeln, schlägt der Aufruf fehl.

Andere PHP-Datenbankerweiterungen wie z SQLite und PostgreSQLFühren Sie gerne gestapelte Abfragen durch, führen Sie alle in einer Zeichenfolge bereitgestellten Abfragen aus und verursachen Sie ein ernstes Sicherheitsproblem.

Verhindern von SQL Injection

Sie können alle Escape-Zeichen in Skriptsprachen wie PERL und PHP intelligent verarbeiten. Die MySQL-Erweiterung für PHP bietet die Funktionmysql_real_escape_string() um Eingabezeichen zu vermeiden, die für MySQL speziell sind.

if (get_magic_quotes_gpc()) {
   $name = stripslashes($name); } $name = mysql_real_escape_string($name); mysql_query("SELECT * FROM users WHERE name = '{$name}'");

Das ähnliche Dilemma

Um das LIKE-Problem zu lösen, muss ein benutzerdefinierter Escape-Mechanismus vom Benutzer bereitgestellte% - und _ -Zeichen in Literale konvertieren. Verwendenaddcslashes(), eine Funktion, mit der Sie einen Zeichenbereich angeben können, der maskiert werden soll.

$sub = addcslashes(mysql_real_escape_string("%something_"), "%_"); // $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

Der einfachste Weg, Tabellendaten in eine Textdatei zu exportieren, ist die Verwendung von SELECT...INTO OUTFILE Anweisung, die ein Abfrageergebnis direkt in eine Datei auf dem Serverhost exportiert.

Exportieren von Daten mit der Anweisung SELECT ... INTO OUTFILE

Die Syntax für diese Anweisung kombiniert eine reguläre SELECT Befehl mit INTO OUTFILE filenameAm Ende. Das Standardausgabeformat ist das gleiche wie für den Befehl LOAD DATA. Die folgende Anweisung exportiert also dietutorials_tbl Tisch in /tmp/tutorials.txt als tabulatorgetrennte Datei mit Zeilenvorschub beendet.

mysql> SELECT * FROM tutorials_tbl 
   -> INTO OUTFILE '/tmp/tutorials.txt';

Sie können das Ausgabeformat mithilfe verschiedener Optionen ändern, um anzugeben, wie Spalten und Datensätze in Anführungszeichen und Trennzeichen gesetzt werden sollen. Verwenden Sie den folgenden Code, um die Tabelle tutorial_tbl in ein CSV-Format mit CRLF-terminierten Zeilen zu exportieren.

mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'
   -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
   -> LINES TERMINATED BY '\r\n';

Das SELECT ... INTO OUTFILE hat die folgenden Eigenschaften -

  • Die Ausgabedatei wird direkt vom MySQL-Server erstellt, daher sollte der Dateiname angeben, wo die Datei auf den Serverhost geschrieben werden soll. Es gibt keine LOKALE Version der Aussage analog zu derLOCAL Version von LOAD DATA.

  • Sie müssen die haben MySQL FILE Privileg, die auszuführen SELECT ... INTO Erklärung.

  • Die Ausgabedatei darf noch nicht vorhanden sein. Dies verhindert, dass MySQL möglicherweise wichtige Dateien überfrachtet.

  • Sie sollten ein Anmeldekonto auf dem Serverhost haben oder eine Möglichkeit, die Datei von diesem Host abzurufen. Ansonsten derSELECT ... INTO OUTFILE Befehl wird höchstwahrscheinlich für Sie keinen Wert haben.

  • Unter UNIX wird die Datei erstellt world readableund gehört dem MySQL-Server. Dies bedeutet, dass Sie die Datei zwar lesen können, aber möglicherweise nicht löschen können.

Tabellen als Rohdaten exportieren

Das mysqldumpProgramm wird zum Kopieren oder Sichern von Tabellen und Datenbanken verwendet. Es kann die Tabellenausgabe entweder als schreibenRaw Datafile oder als eine Reihe von INSERT Anweisungen, die die Datensätze in der Tabelle neu erstellen.

Um eine Tabelle als Datendatei zu sichern, müssen Sie a angeben --tab Option, die das Verzeichnis angibt, in das der MySQL-Server die Datei schreiben soll.

Zum Beispiel, um die zu entleeren tutorials_tbl Tisch aus dem TUTORIALS Datenbank zu einer Datei in der /tmp Verzeichnis, verwenden Sie einen Befehl wie unten gezeigt.

$ mysqldump -u root -p --no-create-info \
   --tab=/tmp tutorials tutorials_tbl
password ******

Exportieren von Tabelleninhalten oder Definitionen im SQL-Format

Verwenden Sie den folgenden Befehl, um eine Tabelle im SQL-Format in eine Datei zu exportieren.

$ mysqldump -u root -p TUTORIALS tutorials_tbl > dump.txt
password ******

Dadurch wird eine Erstellungsdatei mit dem unten gezeigten Inhalt erstellt.

-- MySQL dump 8.23
--
-- Host: localhost    Database: TUTORIALS
---------------------------------------------------------
-- Server version       3.23.58

--
-- Table structure for table `tutorials_tbl`
--

CREATE TABLE tutorials_tbl (
   tutorial_id int(11) NOT NULL auto_increment,
   tutorial_title varchar(100) NOT NULL default '',
   tutorial_author varchar(40) NOT NULL default '',
   submission_date date default NULL,
   PRIMARY KEY  (tutorial_id),
   UNIQUE KEY AUTHOR_INDEX (tutorial_author)
) TYPE = MyISAM;

--
-- Dumping data for table `tutorials_tbl`
--

INSERT INTO tutorials_tbl 
   VALUES (1,'Learn PHP','John Poul','2007-05-24');
INSERT INTO tutorials_tbl 
   VALUES (2,'Learn MySQL','Abdul S','2007-05-24');
INSERT INTO tutorials_tbl 
   VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');

Um mehrere Tabellen zu sichern, benennen Sie sie alle, gefolgt vom Argument des Datenbanknamens. Um eine gesamte Datenbank zu sichern, benennen Sie keine Tabellen nach der Datenbank, wie im folgenden Codeblock gezeigt.

$ mysqldump -u root -p TUTORIALS > database_dump.txt
password ******

Verwenden Sie den folgenden Code, um alle auf Ihrem Host verfügbaren Datenbanken zu sichern.

$ mysqldump -u root -p --all-databases > database_dump.txt
password ******

Die Option --all-database ist in der MySQL 3.23.12-Version verfügbar. Diese Methode kann verwendet werden, um eine Datenbanksicherungsstrategie zu implementieren.

Kopieren von Tabellen oder Datenbanken auf einen anderen Host

Wenn Sie Tabellen oder Datenbanken von einem MySQL-Server auf einen anderen kopieren möchten, verwenden Sie die mysqldump mit Datenbankname und Tabellenname.

Führen Sie den folgenden Befehl auf dem Quellhost aus. Dadurch wird die gesamte Datenbank gespeichertdump.txt Datei.

$ mysqldump -u root -p database_name table_name > dump.txt
password *****

Sie können die gesamte Datenbank kopieren, ohne einen bestimmten Tabellennamen zu verwenden, wie oben erläutert.

Führen Sie nun die Datei ftp dump.txt auf einem anderen Host aus und verwenden Sie den folgenden Befehl. Stellen Sie vor dem Ausführen dieses Befehls sicher, dass Sie den Datenbanknamen auf dem Zielserver erstellt haben.

$ mysql -u root -p database_name < dump.txt
password *****

Eine andere Möglichkeit, dies ohne Verwendung einer Zwischendatei zu erreichen, besteht darin, die Ausgabe von mysqldump direkt über das Netzwerk an den Remote-MySQL-Server zu senden. Wenn Sie vom Host, auf dem sich die Quellendatenbank befindet, eine Verbindung zu beiden Servern herstellen können, verwenden Sie den folgenden Befehl (Stellen Sie sicher, dass Sie auf beiden Servern Zugriff haben).

$ mysqldump -u root -p database_name \
   | mysql -h other-host.com database_name

In mysqldump stellt die Hälfte des Befehls eine Verbindung zum lokalen Server her und schreibt die Speicherauszugsausgabe in die Pipe. Die verbleibende Hälfte des Befehls stellt eine Verbindung zum Remote-MySQL-Server auf other-host.com her. Es liest die Pipe zur Eingabe und sendet jede Anweisung an den Server other-host.com.

In MySQL gibt es zwei einfache Möglichkeiten, Daten aus einer zuvor gesicherten Datei in die MySQL-Datenbank zu laden.

Daten mit LOAD DATA importieren

MySQL bietet eine LOAD DATA-Anweisung, die als Massendatenlader fungiert. Hier ist eine Beispielanweisung, die eine Datei liestdump.txt aus Ihrem aktuellen Verzeichnis und lädt es in die Tabelle mytbl in der aktuellen Datenbank.

mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
  • Wenn die LOCAL Schlüsselwort ist nicht vorhanden, MySQL sucht die Datendatei auf dem Server-Host mit dem looking into absolute pathname, der den Speicherort der Datei beginnend mit dem Stammverzeichnis des Dateisystems vollständig angibt. MySQL liest die Datei vom angegebenen Speicherort.

  • Standardmäßig, LOAD DATA Es wird davon ausgegangen, dass Datendateien Zeilen enthalten, die durch Zeilenvorschübe (Zeilenumbrüche) abgeschlossen werden, und dass Datenwerte innerhalb einer Zeile durch Tabulatoren getrennt sind.

  • Verwenden Sie a, um ein Dateiformat explizit anzugeben FIELDS Klausel zur Beschreibung der Eigenschaften von Feldern innerhalb einer Zeile und a LINESKlausel zur Angabe der Zeilenendsequenz. FolgendeLOAD DATA Die Anweisung gibt an, dass die Datendatei Werte enthält, die durch Doppelpunkte und Zeilen getrennt sind, die durch Zeilenumbrüche und ein neues Zeilenzeichen abgeschlossen werden.

mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl
   -> FIELDS TERMINATED BY ':'
   -> LINES TERMINATED BY '\r\n';
  • Der Befehl LOAD DATA setzt voraus, dass die Spalten in der Datendatei dieselbe Reihenfolge haben wie die Spalten in der Tabelle. Wenn dies nicht der Fall ist, können Sie eine Liste angeben, in die angegeben wird, in welche Tabellenspalten die Datendateispalten geladen werden sollen. Angenommen, Ihre Tabelle enthält die Spalten a, b und c, aber aufeinanderfolgende Spalten in der Datendatei entsprechen den Spalten b, c und a.

Sie können die Datei wie im folgenden Codeblock gezeigt laden.

mysql> LOAD DATA LOCAL INFILE 'dump.txt' 
   -> INTO TABLE mytbl (b, c, a);

Daten mit mysqlimport importieren

MySQL enthält auch ein Hilfsprogramm namens mysqlimport Dies fungiert als Wrapper um LOAD DATA, sodass Sie die Eingabedateien direkt über die Befehlszeile laden können.

Zum Laden von Daten aus dem dump.txt in mytblVerwenden Sie den folgenden Befehl an der UNIX-Eingabeaufforderung.

$ mysqlimport -u root -p --local database_name dump.txt
password *****

Wenn du benutzt mysqlimportBefehlszeilenoptionen stellen die Formatbezeichner bereit. Dasmysqlimport Befehle, die den beiden vorhergehenden entsprechen LOAD DATA Anweisungen sehen wie im folgenden Codeblock gezeigt aus.

$ mysqlimport -u root -p --local --fields-terminated-by = ":" \
   --lines-terminated-by = "\r\n"  database_name dump.txt
password *****

Die Reihenfolge, in der Sie die Optionen angeben, spielt für mysqlimport keine Rolle, außer dass sie alle vor dem Datenbanknamen stehen sollten.

Das mysqlimport Anweisung verwendet die --columns Option zur Angabe der Spaltenreihenfolge -

$ mysqlimport -u root -p --local --columns=b,c,a \
   database_name dump.txt
password *****

Umgang mit Zitaten und Sonderzeichen

Die FIELDS-Klausel kann außerdem andere Formatoptionen angeben TERMINATED BY. Standardmäßig geht LOAD DATA davon aus, dass Werte nicht in Anführungszeichen gesetzt sind, und interpretiert den Backslash (\) als Escapezeichen für die Sonderzeichen. Verwenden Sie die Taste, um das Wertanführungszeichen explizit anzugebenENCLOSED BYBefehl. MySQL entfernt dieses Zeichen während der Eingabeverarbeitung von den Enden der Datenwerte. Verwenden Sie zum Ändern des Standard-EscapezeichensESCAPED BY.

Wenn Sie ENCLOSED BY angeben, um anzugeben, dass Anführungszeichen von Datenwerten entfernt werden sollen, können Sie das Anführungszeichen buchstäblich in Datenwerte aufnehmen, indem Sie es verdoppeln oder dem Escape-Zeichen voranstellen.

Wenn beispielsweise die Anführungszeichen und Escapezeichen "und \" sind, der Eingabewert "a""b\"c" wird interpretiert als a"b"c.

Zum mysqlimportsind die entsprechenden Befehlszeilenoptionen zum Angeben von Anführungszeichen und Escape-Werten --fields-enclosed-by und --fields-escaped-by.