MySQLi - 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.

Andere Arten von Datenspeichern können 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.

Daher verwenden wir heutzutage 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 als Fremdschlüssel bezeichneten Schlüsseln hergestellt werden.

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 MySQLi-Datenbanksystems fortfahren, wollen wir 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 finden Sie höchstens eine Zeile.

  • 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.

MySQLi-Datenbank

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

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

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

  • MySQLi verwendet eine Standardform der bekannten SQL-Datensprache.

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

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

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

  • MySQLi 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.

  • MySQLi 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 MySQLi 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 .

Herunterladen von MySQL

Die MySQLi-Erweiterung funktioniert mit MySQL Version 4.1.13 oder neuer. Sie müssen also MySQL herunterladen. Alle Downloads für MySQL finden Sie unter MySQL Downloads . Wählen Sie die neueste Versionsnummer für den gewünschten MySQL Community Server und so genau wie möglich die gewünschte Plattform.

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, der Datenbanken und Tabellen verwaltet, den Benutzerzugriff steuert und SQL-Abfragen verarbeitet.

  • 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 einem SuSE Linux-System, funktionieren jedoch normalerweise problemlos mit anderen Linux-Varianten.

Führen Sie nun die folgenden Schritte aus, um mit der Installation fortzufahren:

  • Melden Sie sich mit 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

    Der obige Befehl kümmert sich um die Installation des MySQL-Servers, das Erstellen eines Benutzers von MySQL, das Erstellen der erforderlichen Konfiguration und das automatische Starten des MySQL-Servers.

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

  • Dies ist ein optionaler, aber empfohlener Schritt, um die verbleibenden Drehzahlen auf die gleiche 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 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 Speicherort des mysqld-Servers, der wahrscheinlich C: \ mysql \ bin ist, und geben Sie - ein.

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 zu Startup und InnoDB angezeigt. 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, die Basistabellen initialisiert und der Server gestartet wurde, können Sie 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 MySQL Client aus

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

Verwenden Sie einfach den folgenden Befehl

[root@host]# mysql

Es sollte mit einer mysql> Eingabeaufforderung belohnt werden. Jetzt sind Sie mit dem MySQL-Server verbunden und können den gesamten SQL-Befehl 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 wie folgt festlegen:

[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 mysqld im Verzeichnis /etc/init.d/ befinden.

Ausführen und Herunterfahren von MySQLi Server

MySQLi ist von MySQL erweitert. Überprüfen Sie daher 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 MySQLi-Benutzerkontos

Um MySQLi, einer verbesserten Version von MySQL, einen neuen Benutzer hinzuzufügen, müssen Sie lediglich einen neuen Eintrag hinzufügen user Tabelle in der Datenbank mysql.

Unten finden Sie 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 Passwort 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 zumindest nach dem Neustart des Servers keine Verbindung zu MySQL herstellen.

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. Das folgende Beispiel fügt einen Benutzer hinzuzara mit Passwort zara123 für eine bestimmte Datenbank aufgerufen 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 MySQLi-Befehl

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

  • USE Databasename - Dies wird verwendet, um eine bestimmte Datenbank im MySQLi-Arbeitsbereich auszuwählen.

  • SHOW DATABASES - Listet die Datenbanken auf, auf die das MySQLi-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 MySQLi DBMS.

MySQLi 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 MySQLi in einer PHP-Umgebung. PHP bietet verschiedene Funktionen, um auf die MySQLi-Datenbank zuzugreifen und Datensätze in der MySQLi-Datenbank zu bearbeiten. Sie müssten PHP-Funktionen genauso aufrufen wie jede andere PHP-Funktion.

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

mysqli_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 MySQLi-Funktion.

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

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

MySQLi-Verbindung mit MySQL-Binärdatei

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

Beispiel

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

[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 -

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 jedoch jeden anderen Benutzer verwenden. Jeder Benutzer kann alle SQL-Vorgänge ausführen, die diesem Benutzer gestattet sind.

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

mysql> exit
Bye

MySQLi-Verbindung mit PHP-Skript

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

Syntax

connection mysqli_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 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 standardmäßig ein leeres Kennwort.

4

new_link

Optional - Wenn mysqli_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 -

  • MYSQLI_CLIENT_SSL - Verwenden Sie die SSL-Verschlüsselung
  • MYSQLI_CLIENT_COMPRESS - Komprimierungsprotokoll verwenden
  • MYSQLI_CLIENT_IGNORE_SPACE - Lassen Sie nach den Funktionsnamen Platz
  • MYSQLI_CLIENT_INTERACTIVE - Ermöglichen Sie interaktive Timeout-Sekunden der Inaktivität, bevor Sie die Verbindung schließen

Sie können die Verbindung zur MySQLi-Datenbank jederzeit mit einer anderen PHP-Funktion trennen mysqli_close(). Diese Funktion verwendet einen einzelnen Parameter, bei dem es sich um eine von zurückgegebene Verbindung handeltmysqli_connect() Funktion.

Syntax

bool mysqli_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

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

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

Wenn das obige Beispiel mit MySQLi verbunden ist, sollte die Ausgabe in Ihrem Browser so sein -

Connected successfully

Erstellen Sie eine Datenbank mit mysqladmin

Sie benötigen spezielle Berechtigungen, um eine MySQLi-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 MySQLi-Datenbank TUTORIALS erstellt.

Erstellen Sie eine Datenbank mit PHP Script

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

Beispiel

Probieren Sie das folgende Beispiel aus, um eine Datenbank zu erstellen:

<html>
   <head>
      <title>Connecting MySQLi Server</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root'; $dbpass = '<password here>';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
   
         if(! $conn ){ echo 'Connected failure<br>'; } echo 'Connected successfully<br>'; $sql = "CREATE DATABASE TUTORIALS";
         
         if (mysqli_query($conn, $sql)) {
            echo "Database created successfully";
         } else {
            echo "Error creating database: " . mysqli_error($conn); } mysqli_close($conn);
      ?>
   </body>
</html>

Wenn die Datenbank erfolgreich verbunden und erstellt wurde, sollte die Beispielausgabe wie folgt aussehen:

Connected successfully
Database created successfully

Löschen Sie die Datenbank mit mysqladmin

Sie benötigen spezielle Berechtigungen, um eine MySQLi-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.

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 im vorherigen Kapitel erstellten Datenbank:

[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 queryFunktion zum Erstellen oder Löschen einer MySQLi-Datenbank. Diese Funktion verwendet zwei Parameter und gibt bei Erfolg TRUE oder bei Fehler FALSE zurück.

Beispiel

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

<html>
   <head>
      <title>Connecting MySQLi Server>/title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3306'; $dbuser = 'root';
         $dbpass = '<Password Here>'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ){
            echo 'Connected failure<br>';
         }
         echo 'Connected successfully<br>';
         $sql = "DROP DATABASE TUTORIALS"; if (mysqli_query($conn, $sql)) { echo "Record deleted successfully"; } else { echo "Error deleting record: " . mysqli_error($conn);
         }
         mysqli_close($conn);
      ?>
   </body>
</html>

WARNING- Beim Löschen einer Datenbank mithilfe eines PHP-Skripts werden Sie nicht zur Bestätigung aufgefordert. Seien Sie also vorsichtig, wenn Sie eine MySQLi-Datenbank löschen.

Wenn die Datenbank erfolgreich verbunden und gelöscht wurde, sollte die Beispielausgabe wie folgt aussehen:

Connected successfully
Database deleted successfully

Sobald Sie eine Verbindung mit dem MySQLi-Server hergestellt haben, müssen Sie eine bestimmte Datenbank auswählen, mit der Sie arbeiten möchten. Dies liegt daran, dass mit MySQLi Server möglicherweise mehr als eine Datenbank verfügbar ist.

Syntax

bool mysqli_select_db( db_name, connection );

Sr.Nr. Parameter & Beschreibung
1

db_name

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

2

connection

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

Beispiel

Das folgende Beispiel zeigt Ihnen, wie Sie eine Datenbank auswählen.

<html>
   <head>
      <title>Connecting MySQLi Server</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root'; $dbpass = '<Password Here>';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
   
         if(! $conn ) { echo 'Connected failure<br>'; } echo 'Connected successfully<br>'; mysqli_select_db( 'TUTORIALS' ); //Write some code here mysqli_close($conn);
      ?>
   </body>
</html>

Wenn die Verbindung hergestellt und die Datenbank erfolgreich ausgewählt wurde, sollte die Beispielausgabe wie folgt aussehen:

Connected successfully

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 ein Feld nicht als 10 Zeichen breit, wenn Sie wissen, dass Sie nur 2 Zeichen verwenden werden. Diese Arten von Feldern (oder Spalten) werden nach dem auch als Datentypen bezeichnettype of data Sie werden in diesen Feldern speichern.

MySQLi verwendet viele verschiedene Datentypen, die in drei Kategorien unterteilt sind: numerisch, Datum und Uhrzeit sowie Zeichenfolgentypen.

Numerische Datentypen

MySQLi verwendet alle numerischen numerischen ANSI SQL-Datentypen. Wenn Sie also von einem anderen Datenbanksystem zu MySQLi kommen, werden Ihnen diese Definitionen bekannt vorkommen. 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. Bei 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 MySQL-Datums- und Uhrzeitdatentypen sind -

  • 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, dem 1. Januar 1970 und irgendwann im Jahr 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 im Format HH: MM: SS.

  • 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 1970 bis 2069 (70 bis 69) betragen. Wenn die Länge als 4 angegeben ist, kann YEAR zwischen 1901 und 2155 liegen. Die Standardlänge ist 4.

Zeichenfolgentypen

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

  • 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 beiden besteht darin, dass Sortierungen und Vergleiche für gespeicherte Daten bei BLOBs zwischen Groß- und Kleinschreibung und in TEXT-Feldern nicht zwischen Groß- und Kleinschreibung unterscheiden. 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.

Der Befehl zum Erstellen von Tabellen erfordert:

  • Name der Tabelle
  • Namen von Feldern
  • Definitionen für jedes Feld

Syntax

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

CREATE TABLE table_name (column_name column_type);

Jetzt erstellen wir die folgende Tabelle in TUTORIALS Datenbank.

CREATE TABLE tutorials_inf(
   id INT AUTO_INCREMENT,
   name VARCHAR(20) NOT NULL,
   primary key (id),
);

Hier müssen einige Punkte erklärt werden -

  • Feldattribut NOT NULLwird verwendet, weil dieses Feld nicht NULL sein soll. Wenn der Benutzer versucht, einen Datensatz mit dem Wert NULL zu erstellen, gibt MySQLi einen Fehler aus.

  • Feldattribut AUTO_INCREMENT weist MySQLi 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

Dies ist einfach, um eine MySQLi-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 tutorials_tbl - -

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

mysql> use TUTORIALS;
Database changed

mysql> CREATE TABLE tutorials_inf(
   id INT AUTO_INCREMENT,name VARCHAR(20) NOT NULL,primary key (id));
Query OK, 0 rows affected (0.16 sec)

mysql>

NOTE - MySQLi 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 mysqli_query(). Sie übergeben das zweite Argument mit dem richtigen SQL-Befehl, um eine Tabelle zu erstellen.

Beispiel

Hier ist ein Beispiel zum Erstellen einer Tabelle mit einem PHP-Skript:

<html>
   <head>
      <title>Creating MySQLi Tables</title>
   </head>
   
   <body>
      <?php  
         $host = 'localhost:3306'; $user = 'root';  
         $pass = '<Password Here>'; $dbname = 'TUTORIALS';  
         $conn = mysqli_connect($host, $user, $pass,$dbname); if(!$conn){  
            die('Could not connect: '.mysqli_connect_error());  
         }  
         echo 'Connected successfully<br/>';  
  
         $sql = "create table tutorials_inf( id INT AUTO_INCREMENT,name VARCHAR(20) NOT NULL,primary key (id))"; if(mysqli_query($conn, $sql)){ echo "Table created successfully"; } else { echo "Table is not created successfully "; } mysqli_close($conn);  
      ?>  
   </body>
</html>

Die Beispielausgabe sollte folgendermaßen aussehen:

Connected successfully
Table created successfully

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

Syntax

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

DROP TABLE table_name ;

Löschen von Tabellen aus der Eingabeaufforderung

Dies muss nur ausgeführt werden DROP TABLE SQL-Befehl an der Eingabeaufforderung mysql>.

Beispiel

Hier ist ein Beispiel, das gelöscht wird tutorials_inf - -

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

mysql> use TUTORIALS;
Database changed

mysql> DROP TABLE tutorials_inf
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 mysqli_query(). Sie übergeben das zweite Argument mit dem richtigen SQL-Befehl, um eine Tabelle zu löschen.

Beispiel

<html>
   <head>
      <title>Dropping MySQLi Tables</title>
   </head>
   
   <body>
      <?php  
         $host = 'localhost:3306'; $user = 'root';  
         $pass = ''; $dbname = 'TUTORIALS';  
         $conn = mysqli_connect($host, $user, $pass,$dbname); if(!$conn) {  
            die('Could not connect: '.mysqli_connect_error());  
         }  
         echo 'Connected successfully<br/>';  
         $sql = "DROP TABLE tutorials_inf"; if(mysqli_query($conn, $sql)) { echo "Table is deleted successfully"; } else { echo "Table is not deleted successfully\n"; } mysqli_close($conn);  
      ?>  
   </body>
</html>

Die Beispielausgabe sollte folgendermaßen aussehen:

Connected successfully
Table is deleted successfully

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

Syntax

Hier ist die generische SQL-Syntax des Befehls INSERT INTO zum Einfügen von Daten in die MySQLi-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 aus der Eingabeaufforderung

Dies verwendet den Befehl SQL INSERT INTO, um Daten in die MySQLi-Tabelle tutorials_inf einzufügen.

Beispiel

Das folgende Beispiel erstellt 3 Datensätze in tutorials_tbl Tabelle -

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

mysql> use TUTORIALS;
Database changed

mysql> INSERT INTO tutorials_inf 
   ->(id, name)
   ->VALUES
   ->(10, "John Poul");
Query OK, 1 row affected (0.01 sec)

NOTE- Bitte beachten Sie, dass nicht alle Pfeilzeichen (->) 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.

Einfügen von Daten mit PHP-Skript

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

Beispiel

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

<html>
   <head>
      <title>Add New Record in MySQLi Database</title>
      <link rel = "stylesheet" type = "text/css" href = "style.css">
   </head>
   
   <body>
      <div id = "main">
         <form action = "" method = "post">
            <label>Name :</label>
            <input type = "text" name = "name" id = "name" />
            <br />
            <br />
            <input type = "submit" value ="Submit" name = "submit"/>
            <br />
         </form>
      </div>
      
      <?php
         if(isset($_POST["submit"])){ $servername = "localhost:3306";
            $username = "root"; $password = "<Password here>";
            $dbname = "TUTORIALS"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname);

            // Check connection
            if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);
            } 
            $sql = "INSERT INTO tutorials_inf(name)VALUES ('".$_POST["name"]."')";

            if (mysqli_query($conn, $sql)) {
               echo "New record created successfully";
            } else {
               echo "Error: " . $sql . "" . mysqli_error($conn);
            }
            $conn->close();
         }
      ?>
   </body>
</html>

Die Beispielausgabe sollte folgendermaßen aussehen:

New record created successfully

Die SQL SELECTBefehl wird verwendet, um Daten aus der MySQLi-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 MySQLi-Tabelle:

SELECT field1, field2,...fieldN 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 Bestandteil des SELECT-Befehls.

  • 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 ist der Offset Null.

  • Sie können die Anzahl der Retouren mit begrenzen LIMIT Attribut.

Abrufen von Daten von der Eingabeaufforderung -

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

Beispiel

Das folgende Beispiel gibt alle Datensätze von zurück tutorials_inf Tabelle -

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

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf;
+----+------+
| id | name |
+----+------+
|  1 | sai  |
|  2 | kit  |
|  3 | ram  |
+----+------+
3 rows in set (0.00 sec)

mysql>

Abrufen von Daten mit PHP-Skript

Sie können denselben SQL SELECT-Befehl in der PHP-Funktion verwenden mysqli_query(). Diese Funktion wird verwendet, um den SQL-Befehl und später eine andere PHP-Funktion auszuführenmysqli_fetch_assoc()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.

Unten finden Sie ein einfaches Beispiel zum Abrufen von Datensätzen tutorials_inf Tabelle.

Beispiel

Probieren Sie das folgende Beispiel aus, um alle Datensätze aus der Tabelle tutorials_inf anzuzeigen.

<html>
   <head>
      <title>Selecting Table in MySQLi Server</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root'; $dbpass = '';
         $dbname = 'TUTORIALS'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
         if(! $conn ) { die('Could not connect: ' . mysqli_error()); } echo 'Connected successfully<br>'; $sql = 'SELECT name FROM tutorials_inf';
         $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) {
            while($row = mysqli_fetch_assoc($result)) {
               echo "Name: " . $row["name"]. "<br>"; } } else { echo "0 results"; } mysqli_close($conn);
      ?>
   </body>
</html>

Der Inhalt der Zeilen wird der Variablen $ row zugewiesen und die Werte in der 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.

Die Beispielausgabe sollte folgendermaßen aussehen:

Connected successfully
Name: ram
Name: kit
Name: abc

Wir haben SQL gesehen SELECTBefehl zum Abrufen von Daten aus der MySQLi-Tabelle. Wir können eine Bedingungsklausel namens verwendenWHEREKlausel zum Herausfiltern von Ergebnissen. Mit der WHERE-Klausel können wir Auswahlkriterien angeben, um die erforderlichen Datensätze aus einer Tabelle auszuwählen.

Syntax

Hier ist die generische SQL-Syntax des SELECT-Befehls mit der WHERE-Klausel zum Abrufen von Daten aus der MySQLi-Tabelle:

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • 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 Bestandteil des SELECT-Befehls.

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

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

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

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

Hier ist die Liste der Operatoren, mit denen verwendet werden kann WHERE Klausel.

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

Operator Beschreibung Beispiel
= Überprüft, ob die Werte von zwei Operanden gleich sind oder nicht. Wenn ja, wird die Bedingung wahr. (A = B) ist nicht wahr.
! = Überprüft, ob die Werte von zwei 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 wahr. (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 wahr. (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 wahr. (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 wahr. (A <= B) ist wahr.

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

Es ist üblich, Datensätze mit zu durchsuchen Primary Key um die Suche schnell 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 ausgewählte Daten aus der MySQLi-Tabelle tutorials_inf abzurufen.

Beispiel

Das folgende Beispiel gibt alle Datensätze von zurück tutorials_inf Tabelle für welchen Namen ist sai - -

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

mysql> use TUTORIALS;
Database changed

mysql>SELECT * from tutorials_inf where name = 'sai';
+----+------+
| id | name |
+----+------+
|  1 | SAI  |
+----+------+
1 row in set (0.00 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 mithilfe von Groß- und Kleinschreibung unterscheidenBINARY Schlüsselwort wie folgt -

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

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf \WHERE BINARY name = 'sai';
Empty set (0.02 sec)

mysql>

Abrufen von Daten mit PHP-Skript:

Sie können denselben SQL SELECT-Befehl mit WHERE CLAUSE in der PHP-Funktion verwenden mysqli_query().

Beispiel

Das folgende Beispiel gibt alle Datensätze von zurück tutorials_inf Tabelle für welchen Namen ist sai - -

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root'; $dbpass = '';
   $dbname = 'TUTORIALS'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
   if(! $conn ) { die('Could not connect: ' . mysqli_error()); } echo 'Connected successfully<br>'; $sql = 'SELECT * from tutorials_inf where name="sai"';
   $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) {
      while($row = mysqli_fetch_assoc($result)) {
         echo "Name: " . $row["name"]. "<br>"; } } else { echo "0 results"; } mysqli_close($conn);
?>

Die Beispielausgabe sollte folgendermaßen aussehen:

Connected successfully
Name: SAI

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

Syntax

Hier ist die generische SQL-Syntax des UPDATE-Befehls zum Ändern von Daten in die MySQLi-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 Werte gleichzeitig in einer einzelnen Tabelle aktualisieren.

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

Aktualisieren von Daten über die Eingabeaufforderung

Dies verwendet den SQL UPDATE-Befehl mit der WHERE-Klausel, um ausgewählte Daten in der MySQLi-Tabelle tutorials_inf zu aktualisieren.

Beispiel

Das folgende Beispiel wird aktualisiert name Feld für einen Datensatz mit tutorial_inf.

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

mysql> use TUTORIALS;
Database changed

mysql> UPDATE tutorials_inf 
   -> SET name = 'johar' 
   -> WHERE name = 'sai';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>

Aktualisieren von Daten mit PHP-Skript

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

Beispiel

Probieren Sie das folgende Beispiel aus, um es zu aktualisieren name Feld für einen Datensatz.

<?php
   $dbhost = 'localhost:3306'; $dbuser = 'root';
   $dbpass = ''; $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname); if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully<br>';
   $sql = ' UPDATE tutorials_inf SET name="althamas" WHERE name="ram"'; if (mysqli_query($conn, $sql)) { echo "Record updated successfully"; } else { echo "Error updating record: " . mysqli_error($conn);
   }
   mysqli_close($conn);
?>

Die Beispielausgabe sollte folgendermaßen aussehen:

Connected successfully
Record updated successfully

Wenn Sie einen Datensatz aus einer MySQLi-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

Hier ist die generische SQL-Syntax des Befehls DELETE zum Löschen von Daten aus einer MySQLi-Tabelle:

DELETE FROM table_name [WHERE Clause]
  • Wenn keine WHERE-Klausel angegeben ist, werden alle Datensätze aus der angegebenen MySQLi-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 MySQLi-Tabelle tutorials_inf zu löschen.

Beispiel

Das folgende Beispiel löscht einen Datensatz in tutorial_inf, dessen Name johar ist.

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

mysql> use TUTORIALS;
Database changed

mysql> DELETE FROM tutorials_inf where name = 'johar';
Query OK, 1 row affected (0.23 sec)

mysql>

Daten mit PHP-Skript löschen

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

Beispiel

Probieren Sie das folgende Beispiel aus, um einen Datensatz aus tutorial_inf zu löschen, dessen Name althamas ist.

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root'; $dbpass = '';
   $dbname = 'TUTORIALS'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
   if(! $conn ) { die('Could not connect: ' . mysqli_error()); } echo 'Connected successfully<br>'; $sql = ' DELETE FROM tutorials_inf WHERE name = "althamas"';
   
   if (mysqli_query($conn, $sql)) {
      echo "Record deleted successfully";
   } else {
      echo "Error deleting record: " . mysqli_error($conn); } mysqli_close($conn);
?>

Die Beispielausgabe sollte wie folgt aussehen:

Connected successfully
Record deleted successfully

Wir haben SQL gesehen SELECTBefehl zum Abrufen von Daten aus der MySQLi-Tabelle. Wir können auch eine Bedingungsklausel namens verwendenWHERE Klausel zur Auswahl der erforderlichen Datensätze.

Eine WHERE-Klausel mit Gleichheitszeichen (=) funktioniert gut, wenn wir eine exakte Übereinstimmung durchführen möchten. Wie wenn "name = 'sai'". Es kann jedoch eine Anforderung geben, bei der alle Ergebnisse herausgefiltert werden sollen, bei denen der Name "johar" enthalten soll. Dies kann mit SQL erledigt werdenLIKE Klausel zusammen mit WHERE-Klausel.

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

Ohne ein% -Zeichen ist die LIKE-Klausel dem Gleichheitszeichen zusammen mit der WHERE-Klausel sehr ähnlich.

Syntax

Hier ist die generische SQL-Syntax des SELECT-Befehls zusammen mit der LIKE-Klausel zum Abrufen von Daten aus der MySQLi-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 des Gleichheitszeichens verwenden.

  • 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 ausgewählte Daten aus der MySQLi-Tabelle tutorials_inf abzurufen.

Beispiel

Das folgende Beispiel gibt alle Datensätze von zurück tutorials_inf Tabelle, mit der der Autorenname endet johar - -

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

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf 
   -> WHERE name LIKE '%johar';
+----+-------+
| id | name  |
+----+-------+
|  2 | johar |
+----+-------+
1 row in set (0.00 sec)

mysql>

Verwenden der LIKE-Klausel in PHP Script

Sie können eine ähnliche Syntax der WHERE ... LIKE-Klausel für die PHP-Funktion verwenden mysqli_query(). Diese Funktion wird verwendet, um den SQL-Befehl und später eine andere PHP-Funktion auszuführenmysqli_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_inf Tabelle, für die der Name enthält johar - -

<?php
   $dbhost = 'localhost:3306'; $dbuser = 'root';
   $dbpass = ''; $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname); if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully<br>';
   $sql = 'SELECT * FROM tutorials_inf WHERE name LIKE "%johar%"'; $result = mysqli_query($conn, $sql);
   $row = mysqli_fetch_array($result,MYSQLI_ASSOC);
   
   printf ("%s \n",$row["name"]); mysqli_free_result($result);
   mysqli_close($conn);
?>

Die Beispielausgabe sollte folgendermaßen aussehen:

Connected successfully
johar

Wir haben SQL gesehen SELECTBefehl zum Abrufen von Daten aus der MySQLi-Tabelle. Wenn Sie Zeilen auswählen, kann der MySQLi-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 ORDER BY-Klausel hinzufügen, die die Spalte (n) benennt, nach der Sie sortieren möchten.

Syntax

Hier ist die generische SQL-Syntax des SELECT-Befehls zusammen mit der ORDER BY-Klausel zum Sortieren von Daten aus der 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, vorausgesetzt, die Datei wird aufgelistet.

  • 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 die Reihenfolge aufsteigend.

  • Sie können die WHERE ... LIKE-Klausel wie gewohnt verwenden, um eine Bedingung zu setzen.

Verwenden der ORDER BY-Klausel an der Eingabeaufforderung

Dies verwendet den SQL SELECT-Befehl mit der ORDER BY-Klausel, um Daten aus der MySQLi-Tabelle tutorials_inf abzurufen.

Beispiel

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

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

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf ORDER BY id desc;
+----+-------+
| id | name  |
+----+-------+
|  4 | ram   |
|  3 | raghu |
|  2 | johar |
|  1 | sai   |
+----+-------+
4 rows in set (0.00 sec)

mysql>

Stellen Sie sicher, dass alle IDs in absteigender Reihenfolge aufgeführt sind.

Verwenden der ORDER BY-Klausel in PHP Script

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

Beispiel

Probieren Sie das folgende Beispiel aus, das zu einer absteigenden Reihenfolge des Autors des Tutorials führt.

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root'; $dbpass = '';
   $dbname = 'TUTORIALS'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
   if(! $conn ) { die('Could not connect: ' . mysqli_error()); } echo 'Connected successfully</br>'; $sql = 'SELECT * from tutorials_inf ORDER BY id desc';
   
   if($result = mysqli_query($conn, $sql)){ if(mysqli_num_rows($result) > 0){
         echo "<table>";
         echo "<tr>";
         echo "<th>id</th>";
         echo "<th>name</th>";
         echo "</tr>";
         
         while($row = mysqli_fetch_array($result)){
            echo "<tr>";
            echo "<td>" . $row['id'] . "</td>"; echo "<td>" . $row['name'] . "</td>";
            echo "</tr>";
         }
         echo "</table>";
         mysqli_free_result($result); } else { echo "No records matching your query were found."; } } else { echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn); } mysqli_close($conn);
?>

Die Beispielausgabe sollte folgendermaßen aussehen:

Connected successfully
id	name
4	ram
3	raghu
2	johar
1	sai

Bisher haben wir jeweils nur Daten aus einer Tabelle abgerufen. Dies ist für einfache Takes in Ordnung, aber in den meisten realen MySQL-Anwendungen 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 MySQLi 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 MySQLi-Tabellen zu verbinden. Wir werden auch ein Beispiel für LEFT JOIN sehen, das sich von einfachem MySQLi JOIN unterscheidet.

Verwenden von Joins an der Eingabeaufforderung

Angenommen, wir haben zwei Tabellen tutorials_bks und tutorials_inf, in TUTORIALS. Eine vollständige Auflistung finden Sie unten -

Beispiel

Probieren Sie die folgenden Beispiele aus -

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

mysql> use TUTORIALS;
Database changed

mysql> SELECT * FROM tcount_bks;
+----+---------+
| id | book    |
+----+---------+
|  1 | java    |
|  2 | java    |
|  3 | html    |
|  4 | c++     |
|  5 | Android |
+----+---------+
5 rows in set (0.00 sec)

mysql> SELECT * from tutorials_inf;
+----+-------+
| id | name  |
+----+-------+
|  1 | sai   |
|  2 | johar |
|  3 | raghu |
|  4 | ram   |
+----+-------+
4 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 Namen aus der Tabelle austutorials_inf und nimmt die entsprechende Anzahl von Tutorials von auftutorials_bks.

mysql> SELECT a.id, a.name,b.id FROM tutorials_inf a,tutorials_bks b WHERE a.id = b.id;
+----+-------+----+
| id | name  | id |
+----+-------+----+
|  1 | sai   |  1 |
|  2 | johar |  2 |
|  3 | raghu |  3 |
|  4 | ram   |  4 |
+----+-------+----+
4 rows in set (0.00 sec)
mysql>

In der Tabelle tutorials_bks haben wir 5 Datensätze, aber im obigen Beispiel werden nur 4 ID-Datensätze pro Abfrage gefiltert und angegeben

Verwenden von Joins in PHP Script

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

Beispiel

Probieren Sie das folgende Beispiel aus:

<?php
   $dbhost = 'localhost:3306'; $dbuser = 'root';
   $dbpass = ''; $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname); if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully</br>';
   $sql = 'SELECT a.id, a.name,b.id FROM tutorials_inf a,tutorials_bks b WHERE a.id = b.id'; if($result = mysqli_query($conn, $sql)) {
      if(mysqli_num_rows($result) > 0) { echo "<table>"; echo "<tr>"; echo "<th>id</th>"; echo "<th>name</th>"; echo "<th>id</th>"; echo "</tr>"; while($row = mysqli_fetch_array($result)){ echo "<tr>"; echo "<td>" . $row['id'] . "</td>";
            echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $row['id'] . "</td>";
            echo "</tr>";
         }
         echo "</table>";
         mysqli_free_result($result); } else { echo "No records matching your query were found."; } } else { echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn); } mysqli_close($conn);
?>

Die Beispielausgabe sollte folgendermaßen aussehen:

Connected successfully
id	name	id
1	sai	1
2	johar	2
3	raghu	3
4	ram	4

MySQL LEFT JOIN

Ein MySQLi-Link-Join unterscheidet sich von einem einfachen Join. Ein MySQLi LEFT JOIN berücksichtigt besonders die Tabelle auf der linken Seite.

Wenn ich einen LEFT JOIN mache, erhalte ich alle Datensätze, die auf die gleiche Weise übereinstimmen, und zusätzlich erhalte ich einen zusätzlichen Datensatz für jeden nicht übereinstimmenden Datensatz in der linken Tabelle des Joins - wodurch sichergestellt wird, dass (in meinem Beispiel) jeder Name einen erhält Erwähnung -

Beispiel

Probieren Sie das folgende Beispiel aus, um LEFT JOIN zu verstehen -

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

mysql> use TUTORIALS;
Database changed

mysql>SELECT a.id, a.name,b.id FROM tutorials_inf a LEFT JOIN tutorials_bks b ON a.id = b.id;

Sie müssten mehr üben, um sich mit JOINS vertraut zu machen. Dies ist ein etwas komplexes Konzept in MySQL / SQL und wird anhand realer Beispiele klarer.

Wir haben SQL gesehen SELECT Befehl zusammen mit WHERE Klausel zum Abrufen von Daten aus der MySQLi-Tabelle, aber wenn wir versuchen, eine Bedingung anzugeben, mit der Feld- oder Spaltenwerte verglichen werden NULLfunktioniert es nicht richtig.

Um mit einer solchen Situation umzugehen, bietet MySQLi drei Operatoren

  • IS NULL - Der Operator gibt true zurück, wenn der Spaltenwert NULL ist.

  • IS NOT NULL - Der Operator gibt true zurück, wenn der Spaltenwert nicht NULL ist.

  • <=> - operator vergleicht Werte, was (im Gegensatz zum Operator =) auch für zwei NULL-Werte gilt.

Die Bedingungen für NULL sind besonders. Sie können nicht = NULL oder! = NULL verwenden, um in Spalten nach NULL-Werten zu suchen. Solche Vergleiche schlagen immer fehl, weil es unmöglich ist zu sagen, ob sie wahr sind oder nicht. Sogar NULL = NULL schlägt fehl.

Verwenden Sie IS NULL oder IS NOT NULL, um nach Spalten zu suchen, die NULL sind oder nicht.

Verwenden von NULL-Werten an der Eingabeaufforderung

Angenommen, eine Tabelle tutorials_bks in der TUTORIALS-Datenbank und enthält zwei Spalten id und name, wobei ein NULL-Name angibt, dass der Wert unbekannt ist -

Beispiel

Probieren Sie die folgenden Beispiele aus -

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

mysql> use TUTORIALS;
Database changed

mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)

+----+---------+
| id | book    |
+----+---------+
|  1 | java    |
|  2 | java    |
|  3 | html    |
|  4 | c++     |
|  5 | Android |
|  6 |         |
|  7 |         |
|  8 |         |
|  9 | NULL    |
| 10 | NULL    |
| 11 | NULL    |
+----+---------+
11 rows in set (0.00 sec)

mysql>

Um Datensätze zu finden, bei denen die Namensspalte NULL ist oder nicht, sollten die Abfragen wie folgt geschrieben werden:

mysql> SELECT * FROM tutorials_bks WHERE book = "null";
+----+------+
| id | book |
+----+------+
|  9 | NULL |
| 10 | NULL |
| 11 | NULL |
+----+------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM tutorials_bks WHERE book ! = "null";
+----+---------+
| id | book    |
+----+---------+
|  1 | java    |
|  2 | java    |
|  3 | html    |
|  4 | c++     |
|  5 | Android |
|  6 |         |
|  7 |         |
|  8 |         |
+----+---------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM tutorials_bks WHERE book = "";
+----+------+
| id | book |
+----+------+
|  6 |      |
|  7 |      |
|  8 |      |
+----+------+
3 rows in set (0.01 sec)

Umgang mit NULL-Werten in PHP-Skript

Sie können die Bedingung if ... else verwenden, um eine Abfrage basierend auf dem NULL-Wert vorzubereiten.

Beispiel

Das folgende Beispiel nimmt tutorial_count von außen und vergleicht es dann mit dem in der Tabelle verfügbaren Wert.

<?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);
?>

Sie haben gesehen, dass MySQLi-Muster mit übereinstimmen LIKE ...%. MySQLi unterstützt eine andere Art von Mustervergleichsoperation, die auf regulären Ausdrücken und dem basiertREGEXPOperator. Wenn Sie sich mit PHP oder PERL auskennen, ist es für Sie sehr einfach zu verstehen, da diese Übereinstimmung den Skripten für reguläre Ausdrücke sehr ähnlich ist.

Es folgt die Mustertabelle, die zusammen mit verwendet werden kann REGEXP Operator.

Muster Was das Muster passt
^ Beginn der Saite
$ Ende der Zeichenfolge
. Beliebiges einzelnes Zeichen
[...] Jedes Zeichen in eckigen Klammern
[^ ...] Alle Zeichen, die nicht in eckigen Klammern aufgeführt sind
p1 | p2 | p3 Wechsel; stimmt mit einem der Muster p1, p2 oder p3 überein
* * Null oder mehr Instanzen des vorhergehenden Elements
+ Eine oder mehrere Instanzen des vorhergehenden Elements
{n} n Instanzen des vorhergehenden Elements
{m, n} m bis n Instanzen des vorhergehenden Elements

Beispiele

Basierend auf der obigen Tabelle können Sie nun verschiedene Arten von SQL-Abfragen einrichten, um Ihre Anforderungen zu erfüllen. Hier liste ich einige für Ihr Verständnis auf. Angenommen, wir haben eine Tabelle mit dem Namen tutorials_inf und ein Feld mit dem Namen name -

Abfrage, um alle Namen zu finden, die mit 'sa' beginnen

mysql>  SELECT * FROM tutorials_inf WHERE name REGEXP '^sa';

Die Beispielausgabe sollte folgendermaßen aussehen:

+----+------+
| id | name |
+----+------+
|  1 | sai  |
+----+------+
1 row in set (0.00 sec)

Abfrage, um alle Namen zu finden, die mit 'ai' enden

mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'ai$';

Die Beispielausgabe sollte folgendermaßen aussehen:

+----+------+
| id | name |
+----+------+
|  1 | sai  |
+----+------+
1 row in set (0.00 sec)

Abfrage, um alle Namen zu finden, die 'a' enthalten

mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'a';

Die Beispielausgabe sollte folgendermaßen aussehen:

+----+-------+
| id | name  |
+----+-------+
|  1 | sai   |
|  3 | ram   |
|  4 | johar |
+----+-------+
3 rows in set (0.00 sec)

Abfrage, um alle Namen zu finden, die mit einem Vokal beginnen

mysql>  SELECT * FROM tutorials_inf WHERE name REGEXP '^[aeiou]';

Eine Transaktion ist eine sequentielle Gruppe von Datenbankmanipulationsvorgängen, die so ausgeführt werden, als wäre es eine einzelne Arbeitseinheit. Mit anderen Worten, eine Transaktion wird niemals abgeschlossen sein, es sei denn, jede einzelne Operation innerhalb der Gruppe ist erfolgreich. Wenn eine Operation innerhalb der Transaktion fehlschlägt, schlägt die gesamte Transaktion fehl.

In der Praxis werden Sie viele SQL-Abfragen zu einer Gruppe zusammenfassen und alle zusammen als Teil einer Transaktion ausführen.

Eigenschaften von Transaktionen

Transaktionen haben die folgenden vier Standardeigenschaften, die normalerweise mit dem Akronym ACID bezeichnet werden:

  • Atomicity- stellt sicher, dass alle Vorgänge innerhalb der Arbeitseinheit erfolgreich abgeschlossen werden; Andernfalls wird die Transaktion zum Zeitpunkt des Ausfalls abgebrochen und frühere Vorgänge werden auf ihren vorherigen Status zurückgesetzt.

  • Consistency - stellt sicher, dass die Datenbank bei einer erfolgreich festgeschriebenen Transaktion den Status ordnungsgemäß ändert.

  • Isolation - ermöglicht es Transaktionen, unabhängig voneinander und transparent für einander zu arbeiten.

  • Durability - stellt sicher, dass das Ergebnis oder die Wirkung einer festgeschriebenen Transaktion bei einem Systemausfall bestehen bleibt.

In MySQL beginnen Transaktionen mit der Anweisung BEGIN WORK und enden entweder mit einer COMMIT- oder einer ROLLBACK-Anweisung. Die SQLi-Befehle zwischen den Anfangs- und Endanweisungen bilden den Hauptteil der Transaktion.

COMMIT und ROLLBACK

Diese beiden Schlüsselwörter Commit und Rollback werden hauptsächlich für MySQL-Transaktionen verwendet.

  • Wenn eine erfolgreiche Transaktion abgeschlossen ist, sollte der Befehl COMMIT ausgegeben werden, damit die Änderungen an allen beteiligten Tabellen wirksam werden.

  • Wenn ein Fehler auftritt, sollte ein ROLLBACK-Befehl ausgegeben werden, um jede Tabelle, auf die in der Transaktion verwiesen wird, auf ihren vorherigen Status zurückzusetzen.

Sie können das Verhalten einer Transaktion steuern, indem Sie die aufgerufene Sitzungsvariable festlegen AUTOCOMMIT. Wenn AUTOCOMMIT auf 1 (Standardeinstellung) festgelegt ist, wird jede SQL-Anweisung (innerhalb einer Transaktion oder nicht) als vollständige Transaktion betrachtet und nach Abschluss standardmäßig festgeschrieben. Wenn AUTOCOMMIT durch Ausgeben des Befehls SET AUTOCOMMIT = 0 auf 0 gesetzt wird, verhält sich die nachfolgende Reihe von Anweisungen wie eine Transaktion, und es werden keine Aktivitäten festgeschrieben, bis eine explizite COMMIT-Anweisung ausgegeben wird.

Sie können diese SQL-Befehle in PHP mit ausführen mysqli_query() Funktion.

Allgemeines Beispiel für eine Transaktion

Diese Abfolge von Ereignissen ist unabhängig von der verwendeten Programmiersprache. Der logische Pfad kann in der Sprache erstellt werden, in der Sie Ihre Anwendung erstellen.

Sie können diese SQL-Befehle in PHP mit ausführen mysqli_query() Funktion.

  • Beginnen Sie die Transaktion mit der Ausgabe des SQL-Befehls BEGIN WORK.

  • Geben Sie einen oder mehrere SQL-Befehle wie SELECT, INSERT, UPDATE oder DELETE aus.

  • Überprüfen Sie, ob kein Fehler vorliegt und alles Ihren Anforderungen entspricht.

  • Wenn ein Fehler auftritt, geben Sie den Befehl ROLLBACK aus, andernfalls einen Befehl COMMIT.

Transaktionssichere Tabellentypen in MySQLi

Sie können Transaktionen nicht direkt verwenden, Sie können, aber sie wären nicht sicher und garantiert. Wenn Sie Transaktionen in Ihrer MySQLi-Programmierung verwenden möchten, müssen Sie Ihre Tabellen auf besondere Weise erstellen. Es gibt viele Arten von Tabellen, die Transaktionen unterstützen, aber die beliebteste istInnoDB.

Die Unterstützung von InnoDB-Tabellen erfordert einen bestimmten Kompilierungsparameter, wenn MySQLi aus dem Quellcode kompiliert wird. Wenn Ihre MySQLi-Version keine InnoDB-Unterstützung bietet, bitten Sie Ihren Internetdienstanbieter, eine Version von MySQLi mit Unterstützung für InnoDB-Tabellentypen zu erstellen, oder laden Sie die MySQL-Max-Binärdistribution für Windows oder Linux / UNIX herunter, installieren Sie sie und arbeiten Sie mit dem Tabellentyp in eine Entwicklungsumgebung.

Wenn Ihre MySQLi-Installation InnoDB-Tabellen unterstützt, fügen Sie einfach eine hinzu TYPE = InnoDBDefinition der Tabellenerstellungsanweisung. Mit dem folgenden Code wird beispielsweise eine InnoDB-Tabelle mit dem Namen tutorials_innodb erstellt.

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

mysql> use TUTORIALS;
Database changed

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

Überprüfen Sie den folgenden Link, um mehr über - InnoDB zu erfahren

Sie können andere Tabellentypen wie verwenden GEMINI oder BDBEs hängt jedoch von Ihrer Installation ab, ob diese beiden Typen unterstützt werden.

MySQLi ALTER Der Befehl ist sehr nützlich, wenn Sie einen Namen Ihrer Tabelle oder eines Tabellenfelds ändern oder eine vorhandene Spalte in einer Tabelle hinzufügen oder löschen möchten.

Beginnen wir mit der Erstellung einer Tabelle mit dem Namen tutorials_alter.

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

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_alter
   -> (
   -> i INT,
   -> c CHAR(1)
   -> );
Query OK, 0 rows affected (0.27 sec)

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

Löschen, Hinzufügen oder Neupositionieren einer Spalte

Angenommen, Sie möchten eine vorhandene Spalte löschen i von oben MySQLi Tabelle werden Sie dann verwenden DROP Klausel zusammen mit ALTER Befehl wie folgt -

mysql> ALTER TABLE tutorials_alter  DROP i;

EIN DROP 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 zu tutorials_alter -

mysql> ALTER TABLE tutorials_alter ADD i INT;

Nach dem Ausgeben dieser Anweisung enthält testalter dieselben zwei Spalten wie beim ersten Erstellen der Tabelle, hat jedoch nicht die gleiche 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 tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 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 anzugeben, dass die neue Spalte nach col_name platziert werden soll. Versuchen Sie die folgenden ALTER TABLE-Anweisungen, indem Sie nach jeder SHOW COLUMNS verwenden, um zu sehen, welchen Effekt jede 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. Das heißt, wenn Sie eine vorhandene Spalte in einer Tabelle neu positionieren möchten, müssen Sie sie zuerst fallen lassen und dann an der neuen Position hinzufügen.

Ändern einer Spaltendefinition oder eines Spaltennamens

Verwenden Sie, um die Definition einer Spalte zu ändern MODIFY oder CHANGEKlausel zusammen mit dem Befehl ALTER. Zum Beispiel, um die Spalte zu ändernc von CHAR (1) bis CHAR (10), mach das -

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

Bei CHANGE ist 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 tutorials_alter CHANGE i j BIGINT;

Wenn Sie jetzt CHANGE verwenden, um j von BIGINT zurück in INT zu konvertieren, ohne den Spaltennamen zu ändern, lautet die Anweisung wie erwartet:

mysql> ALTER TABLE tutorials_alter CHANGE j j INT;

Die Auswirkung von ALTER TABLE auf Null- und Standardwertattribute -

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 MySQLi diesen Attributen automatisch Werte zu.

Hier ist das Beispiel, in dem die Spalte NOT NULL standardmäßig den Wert 100 hat.

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

Wenn Sie den obigen Befehl nicht verwenden, füllt MySQLi in allen Spalten NULL-Werte aus.

Ändern des Standardwerts einer Spalte

Sie können einen Standardwert für jede Spalte mit dem Befehl ALTER ändern. Probieren Sie das folgende Beispiel aus.

mysql> ALTER TABLE tutorials_alter ALTER j SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | 1000    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

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

mysql> ALTER TABLE tutorials_alter ALTER j DROP DEFAULT;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

Ändern eines Tabellentyps

Sie können einen Tabellentyp verwenden, indem Sie verwenden TYPE Klausel zusammen mit dem Befehl ALTER.

Verwenden Sie die Anweisung SHOW TABLE STATUS, um den aktuellen Tabellentyp zu ermitteln.

mysql>  SHOW TABLE STATUS LIKE 'tutorials_alter'\G
*************************** 1. row ***************************
           Name: tutorials_alter
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2017-02-17 11:30:29
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

Tabelle umbenennen

Verwenden Sie zum Umbenennen einer Tabelle die RENAMEOption der Anweisung ALTER TABLE. Probieren Sie das folgende Beispiel aus, um tutorials_alter in tutorials_bks umzubenennen.

mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;

Mit dem Befehl ALTER können Sie INDEX in einer MySQL-Datei erstellen und löschen. Wir werden diese Funktion im nächsten Kapitel sehen.

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 handelt es sich bei Indizes auch um Tabellentypen, bei denen der Primärschlüssel oder das Indexfeld sowie ein Zeiger auf jeden Datensatz in der tatsächlichen Tabelle enthalten sind.

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

INSERT- und UPDATE-Anweisungen benötigen mehr Zeit für Tabellen mit Indizes, während SELECT-Anweisungen für diese Tabellen schnell werden. Der Grund dafür ist, dass die Datenbank beim Einfügen oder Aktualisieren auch 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 mit NAME_INDEX einen Index für tutorials_inf erstellen.

CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf(name);

Sie können einen einfachen Index für eine Tabelle erstellen. Lassen Sie einfach das Schlüsselwort UNIQUE in der Abfrage weg, um einen einfachen Index zu erstellen. Der einfache 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 NAME_INDEX ON tutorials_inf (name 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 Anweisung fügt einen PRIMARY KEY hinzu. Dies bedeutet, dass indizierte 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 Werte eindeutig sein müssen (mit Ausnahme von NULL-Werten, 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.

Hier ist das Beispiel zum Hinzufügen eines Index zu einer vorhandenen Tabelle.

mysql> ALTER TABLE tutorials_inf ADD INDEX (id);

Sie können jeden INDEX löschen, indem Sie die DROP-Klausel zusammen mit dem Befehl ALTER verwenden. Probieren Sie das folgende Beispiel aus, um den oben erstellten Index zu löschen.

mysql> ALTER TABLE tutorials_inf DROP INDEX (c);

Sie können jeden INDEX löschen, indem Sie die DROP-Klausel zusammen mit dem Befehl ALTER verwenden. Probieren Sie das folgende Beispiel aus, um den oben erstellten Index zu löschen.

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

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

Hier ist das Beispiel zum Hinzufügen eines 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 tutorials_inf MODIFY id INT NOT NULL;
mysql> ALTER TABLE tutorials_inf ADD PRIMARY KEY (id);

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

mysql> ALTER TABLE tutorials_inf DROP PRIMARY KEY;

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

INDEX-Informationen anzeigen

Mit dem Befehl SHOW INDEX können Sie alle einer Tabelle zugeordneten Indizes auflisten. Die Ausgabe im vertikalen Format (angegeben durch \ G) ist bei dieser Anweisung häufig hilfreich, um lange Zeilenumbrüche 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.

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 MySQLi-Clientprogramm 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

Hier ist ein Beispiel, das Ihnen die Verwendung einer temporären Tabelle zeigt. Der gleiche Code kann in PHP-Skripten mit verwendet werdenmysqli_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 einen Befehl SHOW TABLES ausgeben, wird Ihre temporäre Tabelle nicht in der Liste aufgeführt. Wenn Sie sich jetzt von der MySQLi-Sitzung abmelden und dann einen SELECT-Befehl ausgeben, sind in der Datenbank keine Daten verfügbar. Auch Ihre temporäre Tabelle würde nicht existieren.

Temporäre Tabellen löschen

Standardmäßig werden alle temporären Tabellen von MySQLi gelöscht, wenn Ihre Datenbankverbindung beendet wird. Wenn Sie sie dennoch dazwischen löschen möchten, geben Sie dazu den Befehl DROP TABLE ein.

Das folgende Beispiel zeigt das Löschen einer temporären Tabelle:

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 und CREATE TABLE benötigen ... 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 eine 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_inf.

Schritt 1

Erhalten Sie eine vollständige Struktur über die Tabelle.

mysql> SHOW CREATE TABLE tutorials_inf \G;
*************************** 1. row ***************************
       Table: tutorials_inf
Create Table: CREATE TABLE `tutorials_inf` (
   `id` int(11) NOT NULL,
   `name` varchar(20) NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `AUTHOR_INDEX` (`name`),
   UNIQUE KEY `NAME_INDEX` (`name`),
   KEY `id` (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1
1 row in set (0.05 sec)

ERROR: No query specified

Schritt 2

Benennen Sie diese Tabelle um und erstellen Sie eine weitere Tabelle.

mysql> CREATE TABLE tutorials_clone(
   -> id int(11) NOT NULL,
   -> name varchar(20) NOT NULL,
   -> PRIMARY KEY (id),
   > UNIQUE KEY AUTHOR_INDEX (name),
   -> UNIQUE KEY NAME_INDEX (name),
   ->  KEY id (id));
Query OK, 0 rows affected (1.80 sec)

Schritt 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 tutorials_clone(id,name) SELECT id,name from tutorials_inf;
Query OK, 4 rows affected (0.19 sec)
Records: 4  Duplicates: 0  Warnings: 0

Schließlich haben Sie genau die Klontabelle, die Sie haben wollten.

Es gibt drei Informationen, die Sie von MySQLi 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 tables and databases - Dies beinhaltet Informationen zur Struktur von Tabellen und Datenbanken.

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

Es ist sehr einfach, alle diese Informationen an der mysqli-Eingabeaufforderung abzurufen. Bei Verwendung von PERL- oder PHP-APIs müssen jedoch verschiedene APIs explizit aufgerufen werden, um alle diese Informationen abzurufen. Der folgende Abschnitt zeigt Ihnen, wie Sie diese Informationen erhalten.

Abrufen der Anzahl der von einer Abfrage betroffenen Zeilen

PERL Beispiel

In DBI-Skripten wird die Anzahl der betroffenen Zeilen von do () oder execute () zurückgegeben, je nachdem, 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 Funktion mysqli_affected_rows () auf, um herauszufinden, wie viele Zeilen eine Abfrage geändert hat.

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

Auflisten von Tabellen und Datenbanken

Dies ist sehr einfach, um alle mit dem Datenbankserver verfügbaren Datenbanken und Tabellen aufzulisten. Ihr Ergebnis kann null sein, wenn Sie nicht über ausreichende Berechtigungen verfügen.

Abgesehen von der unten erwähnten Methode können Sie SHOW TABLES- oder SHOW DATABASES-Abfragen verwenden, um eine Liste von 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
   $servername = "localhost:3306";
   $username = "root"; $password = "";
   $dbname = "TUTORIALS"; $conn = new mysqli($servername, $username, $password, $dbname);
   
   if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);
   } 
   echo"Database connected";
   $sql="SHOW DATABASES"; if (!($result = mysqli_query($conn,$sql))) {
      printf("Error: %s\n", mysqli_error($conn)); } while( $row = mysqli_fetch_row( $result ) ){ if (($row[0]!="information_schema") && ($row[0]!="mysql")) { echo $row[0]."\r\n";
      }
   }
   $conn->close();
?>

Server-Metadaten abrufen

In MySQL gibt es folgende Befehle, die entweder an der MySQL-Eingabeaufforderung oder mit einem beliebigen Skript wie PHP ausgeführt werden können, um verschiedene wichtige Informationen zum 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 bei Bedarf in der richtigen Reihenfolge generiert werden. Sequenzen werden häufig in 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 MySQLi beschrieben.

Verwenden der Spalte AUTO_INCREMENT

Die einfachste Möglichkeit in MySQLi, Sequenzen zu verwenden, besteht darin, eine Spalte als AUTO_INCREMENT zu definieren und den Rest der Dinge MySQLi zu überlassen.

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 diese von MySQLi automatisch erhöht wird.

mysql>CREATE TABLE tutorials_auto(
   id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL,PRIMARY KEY(id));
Query OK, 0 rows affected (0.28 sec)

mysql>INSERT INTO tutorials_auto(id,name) VALUES(NULL,'sai'),(NULL,'ram');
Query OK, 2 rows affected (0.12 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM insect ORDER BY id;
+----+------+
| id | name |
+----+------+
|  1 | sai  |
|  2 | ram  |
+----+------+
2 rows in set (0.05 sec)

Erhalten Sie AUTO_INCREMENT-Werte

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 das Attribut mysql_insertid, um den von einer Abfrage generierten Wert AUTO_INCREMENT abzurufen. Der Zugriff auf dieses Attribut erfolgt entweder über ein Datenbankhandle oder ein Anweisungshandle, je nachdem, wie Sie die Abfrage ausgeben. Das folgende Beispiel verweist über das Datenbankhandle darauf:

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

PHP Beispiel

Rufen Sie nach dem Ausgeben einer Abfrage, die einen AUTO_INCREMENT-Wert generiert, den Wert ab, indem Sie mysql_insert_id () - aufrufen.

mysql_query ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id); $seq = mysqli_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 anderen Tabellen aufweist.

Wenn Sie feststellen, dass eine 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 die ID-Werte in der Insektentabelle mit dieser Technik neu nummeriert werden:

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

Starten einer Sequenz bei einem bestimmten Wert

Standardmäßig startet MySQLi die Sequenz mit 1, Sie können jedoch zum Zeitpunkt der Tabellenerstellung auch eine andere Nummer angeben. Das folgende Beispiel zeigt, wie MySQLi die Sequenz ab 100 startet.

mysql> CREATE TABLE tutorials_auto
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, 
   -> );

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

mysql> ALTER TABLE tutorials_auto AUTO_INCREMENT = 100;

Tabellen oder Ergebnismengen enthalten manchmal doppelte Datensätze. Manchmal ist es erlaubt, aber manchmal ist es erforderlich, doppelte Datensätze zu stoppen. Manchmal ist es erforderlich, doppelte Datensätze zu identifizieren und aus der Tabelle zu entfernen. In diesem Kapitel wird beschrieben, wie Sie verhindern, dass doppelte Datensätze in einer Tabelle auftreten, und wie bereits vorhandene doppelte Datensätze entfernt werden.

Verhindern, dass Duplikate in einer Tabelle auftreten

Sie können eine verwenden PRIMARY KEY oder UNIQUEIndizieren Sie eine Tabelle mit 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 Vorname und Nachname zulässig sind.

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

Fügen Sie der Definition einen PRIMARY KEY hinzu, um zu verhindern, dass in dieser Tabelle mehrere Datensätze mit demselben Vor- und Nachnamen erstellt werden. Wenn Sie dies tun, müssen Sie auch die indizierten Spalten als NICHT NULL deklarieren, da ein PRIMARY KEY keine NULL-Werte zulässt.

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 INSERT IGNORE eher, als INSERT. Wenn ein Datensatz einen vorhandenen Datensatz nicht dupliziert, fügt MySQLi ihn wie gewohnt ein. Wenn der Datensatz ein Duplikat ist, weist das Schlüsselwort IGNORE MySQLi an, ihn stillschweigend zu verwerfen, ohne einen Fehler zu generieren.

Das folgende Beispiel führt keinen Fehler aus 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 REPLACEeher als EINFÜGEN. 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)

INSERT IGNORE und REPLACE sollten entsprechend dem Verhalten bei der Verarbeitung von Duplikaten ausgewählt werden, das Sie ausführen möchten. INSERT IGNORE speichert den ersten einer Reihe von doppelten Datensätzen und verwirft den Rest. REPLACE behält das letzte einer Reihe von Duplikaten bei und löscht alle früheren.

Eine andere Möglichkeit, die Eindeutigkeit zu erzwingen, besteht darin, einer Tabelle einen EINZIGARTIGEN Index anstelle eines PRIMARY KEY hinzuzufügen.

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. Um doppelte Wertesätze zu identifizieren, gehen Sie im Allgemeinen wie folgt vor:

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

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

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

  • Fügen Sie eine HAVING-Klausel hinzu, die eindeutige Werte eliminiert, indem die Anzahl der Gruppen größer als eins sein muss.

Entfernen von Duplikaten aus einem Abfrageergebnis:

Sie können verwenden DISTINCT zusammen mit der SELECT-Anweisung, um eindeutige Datensätze herauszufinden, die in einer Tabelle verfügbar sind.

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

Eine Alternative zu DISTINCT besteht darin, eine GROUP BY-Klausel hinzuzufügen, die die ausgewählten Spalten benennt. Dies hat zur Folge, dass Duplikate entfernt und nur die eindeutigen Wertekombinationen in den angegebenen Spalten ausgewählt werden.

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 PRIMAY-SCHLÜSSEL 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);