MySQLi - Guide rapide
Qu'est-ce que la base de données?
Une base de données est une application distincte qui stocke une collection de données. Chaque base de données possède une ou plusieurs API distinctes pour créer, accéder, gérer, rechercher et répliquer les données qu'elle contient.
D'autres types de magasins de données peuvent être utilisés, tels que des fichiers sur le système de fichiers ou de grandes tables de hachage en mémoire, mais la récupération et l'écriture de données ne seraient pas aussi rapides et faciles avec ces types de systèmes.
Ainsi, de nos jours, nous utilisons des systèmes de gestion de bases de données relationnelles (SGBDR) pour stocker et gérer un volume énorme de données. C'est ce qu'on appelle une base de données relationnelle car toutes les données sont stockées dans différentes tables et les relations sont établies à l'aide de clés primaires ou d'autres clés appelées clés étrangères.
UNE Relational DataBase Management System (RDBMS) est un logiciel qui -
Vous permet d'implémenter une base de données avec des tables, des colonnes et des index.
Garantit l'intégrité référentielle entre les lignes de différentes tables.
Met à jour les index automatiquement.
Interprète une requête SQL et combine les informations de diverses tables.
Terminologie du SGBDR
Avant de commencer à expliquer le système de base de données MySQLi, révisons quelques définitions liées à la base de données.
Database - Une base de données est une collection de tables, avec des données associées.
Table- Un tableau est une matrice avec des données. Une table dans une base de données ressemble à une simple feuille de calcul.
Column - Une colonne (élément de données) contient des données d'un seul et même type, par exemple le code postal de la colonne.
Row - Une ligne (= tuple, entrée ou enregistrement) est un groupe de données associées, par exemple les données d'un abonnement.
Redundancy - Stockage des données deux fois, de manière redondante pour rendre le système plus rapide.
Primary Key- Une clé primaire est unique. Une valeur de clé ne peut pas apparaître deux fois dans une table. Avec une clé, vous pouvez trouver au plus une ligne.
Foreign Key - Une clé étrangère est la broche de liaison entre deux tables.
Compound Key - Une clé composée (clé composite) est une clé qui se compose de plusieurs colonnes, car une colonne n'est pas suffisamment unique.
Index - Un index dans une base de données ressemble à un index au dos d'un livre.
Referential Integrity - L'intégrité référentielle garantit qu'une valeur de clé étrangère pointe toujours vers une ligne existante.
Base de données MySQLi
MySQLi est un SGBDR rapide et facile à utiliser utilisé par de nombreuses petites et grandes entreprises. MySQLi Extension est développé, commercialisé et pris en charge par MySQL. MySQL devient si populaire pour de nombreuses bonnes raisons -
MySQLi est publié sous une licence open source. Vous n'avez donc rien à payer pour l'utiliser.
MySQLi est un programme très puissant à part entière. Il gère un grand sous-ensemble des fonctionnalités des packages de bases de données les plus coûteux et les plus puissants.
MySQLi utilise une forme standard du langage de données SQL bien connu.
MySQLi fonctionne sur de nombreux systèmes d'exploitation et avec de nombreux langages dont PHP, PERL, C, C ++, JAVA, etc.
MySQLi fonctionne très rapidement et fonctionne bien même avec de grands ensembles de données.
MySQLi est très convivial avec PHP, le langage le plus apprécié pour le développement Web.
MySQLi prend en charge de grandes bases de données, jusqu'à 50 millions de lignes ou plus dans une table. La limite de taille de fichier par défaut pour une table est de 4 Go, mais vous pouvez l'augmenter (si votre système d'exploitation peut la gérer) jusqu'à une limite théorique de 8 millions de téraoctets (To).
MySQLi est personnalisable. La licence GPL open source permet aux programmeurs de modifier le logiciel MySQL pour l'adapter à leurs propres environnements spécifiques.
Avant que tu commences
Avant de commencer ce tutoriel, vous devez avoir une connaissance de base des informations couvertes dans nos tutoriels PHP et HTML.
Ce tutoriel se concentre fortement sur l'utilisation de MySQLi dans un environnement PHP. De nombreux exemples donnés dans ce tutoriel seront utiles aux programmeurs PHP.
Nous vous recommandons de consulter notre tutoriel PHP pour votre référence.
Téléchargement de MySQL
L'extension MySQLi est conçue pour fonctionner avec MySQL version 4.1.13 ou plus récente, il faut donc télécharger MySQL. Tous les téléchargements pour MySQL se trouvent sur MySQL Downloads . Choisissez le dernier numéro de version de MySQL Community Server que vous souhaitez et, aussi exactement que possible, la plate-forme souhaitée.
Installation de MySQL sous Linux / UNIX
La méthode recommandée pour installer MySQL sur un système Linux est via RPM. MySQL AB met les RPM suivants à disposition pour téléchargement sur son site Web -
MySQL - Le serveur de base de données MySQL, qui gère les bases de données et les tables, contrôle l'accès des utilisateurs et traite les requêtes SQL.
MySQL-client - Des programmes clients MySQL, qui permettent de se connecter et d'interagir avec le serveur.
MySQL-devel - Des bibliothèques et des fichiers d'en-tête utiles lors de la compilation d'autres programmes utilisant MySQL.
MySQL-shared - Bibliothèques partagées pour le client MySQL.
MySQL-bench - Benchmark et outils de test de performance pour le serveur de base de données MySQL.
Les RPM MySQL listés ici sont tous construits sur un système SuSE Linux, mais ils fonctionneront généralement sur d'autres variantes Linux sans difficulté.
Maintenant, suivez les étapes suivantes pour procéder à l'installation -
Connectez-vous au système en utilisant root utilisateur.
Basculez vers le répertoire contenant les RPM -
Installez le serveur de base de données MySQL en exécutant la commande suivante. N'oubliez pas de remplacer le nom de fichier en italique par le nom de fichier de votre RPM.
[root@host]# rpm -i MySQL-5.0.9-0.i386.rpm
Cette étape est facultative mais recommandée pour installer les RPM restants de la même manière -
La commande ci-dessus s'occupe de l'installation du serveur MySQL, de la création d'un utilisateur de MySQL, de la création de la configuration nécessaire et du démarrage automatique du serveur MySQL.
Vous pouvez trouver tous les binaires liés à MySQL dans / usr / bin et / usr / sbin. Toutes les tables et bases de données seront créées dans le répertoire / var / lib / mysql.
[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
Installer MySQL sur Windows
L'installation par défaut sur n'importe quelle version de Windows est maintenant beaucoup plus facile qu'elle ne l'était auparavant, car MySQL est désormais parfaitement fourni avec un programme d'installation. Téléchargez simplement le package d'installation, décompressez-le n'importe où et exécutez setup.exe.
Le programme d'installation par défaut setup.exe vous guidera à travers le processus trivial et par défaut installera tout sous C: \ mysql.
Testez le serveur en le déclenchant à partir de l'invite de commande la première fois. Allez à l'emplacement du serveur mysqld qui est probablement C: \ mysql \ bin, et tapez -
mysqld.exe --console
NOTE - Si vous êtes sous NT, vous devrez utiliser mysqld-nt.exe au lieu de mysqld.exe
Si tout s'est bien passé, vous verrez des messages sur le démarrage et InnoDB. Sinon, vous pouvez avoir un problème d'autorisations. Assurez-vous que le répertoire qui contient vos données est accessible à n'importe quel utilisateur (probablement mysql) sous lequel les processus de base de données s'exécutent.
MySQL ne s'ajoutera pas au menu de démarrage, et il n'y a pas non plus de moyen d'interface graphique particulièrement agréable pour arrêter le serveur. Par conséquent, si vous avez tendance à démarrer le serveur en double-cliquant sur l'exécutable mysqld, vous devez vous rappeler d'arrêter le processus manuellement en utilisant mysqladmin, la liste des tâches, le gestionnaire des tâches ou d'autres moyens spécifiques à Windows.
Vérification de l'installation de MySQL
Une fois MySQL installé, les tables de base initialisées et le serveur démarré, vous pouvez vérifier que tout fonctionne comme il se doit via quelques tests simples.
Utilisez l'utilitaire mysqladmin pour obtenir l'état du serveur
Utilisation mysqladminbinaire pour vérifier la version du serveur. Ce binaire serait disponible dans / usr / bin sous Linux et dans C: \ mysql \ bin sous Windows.
[root@host]# mysqladmin --version
Il produira le résultat suivant sous Linux. Cela peut varier en fonction de votre installation -
mysqladmin Ver 8.23 Distrib 5.0.9-0, for redhat-linux-gnu on i386
Si vous ne recevez pas ce message, il se peut qu'il y ait un problème dans votre installation et vous aurez besoin d'aide pour le résoudre.
Exécuter des commandes SQL simples à l'aide du client MySQL
Vous pouvez vous connecter à votre serveur MySQL en utilisant le client MySQL en utilisant mysqlcommander. Pour le moment, vous n'avez pas besoin de donner de mot de passe car par défaut, il sera vide.
Alors utilisez simplement la commande suivante
[root@host]# mysql
Il devrait être récompensé par une invite mysql>. Maintenant, vous êtes connecté au serveur MySQL et vous pouvez exécuter toutes les commandes SQL à l'invite mysql> comme suit -
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.13 sec)
Étapes post-installation
MySQL est livré avec un mot de passe vide pour l'utilisateur racine MySQL. Dès que vous avez installé avec succès la base de données et le client, vous devez définir un mot de passe root comme suit -
[root@host]# mysqladmin -u root password "new_password";
Maintenant, pour vous connecter à votre serveur MySQL, vous devez utiliser la commande suivante -
[root@host]# mysql -u root -p
Enter password:*******
Les utilisateurs UNIX voudront également mettre votre répertoire MySQL dans votre PATH, vous n'aurez donc pas à taper le chemin complet chaque fois que vous voudrez utiliser le client de ligne de commande. Pour bash, ce serait quelque chose comme -
export PATH = $PATH:/usr/bin:/usr/sbin
Exécuter MySQL au moment du démarrage
Si vous souhaitez exécuter le serveur MySQL au moment du démarrage, assurez-vous d'avoir l'entrée suivante dans le fichier /etc/rc.local.
/etc/init.d/mysqld start
De plus, vous devriez avoir le binaire mysqld dans le répertoire /etc/init.d/.
Exécution et arrêt du serveur MySQLi
MySQLi est une extension de MySQL, alors vérifiez d'abord si votre serveur MySQL fonctionne ou non. Vous pouvez utiliser la commande suivante pour vérifier ceci -
ps -ef | grep mysqld
Si votre MySql est en cours d'exécution, vous verrez mysqldprocessus répertorié dans votre résultat. Si le serveur n'est pas en cours d'exécution, vous pouvez le démarrer en utilisant la commande suivante:
root@host# cd /usr/bin
./safe_mysqld &
Maintenant, si vous souhaitez arrêter un serveur MySQL déjà en cours d'exécution, vous pouvez le faire en utilisant la commande suivante -
root@host# cd /usr/bin
./mysqladmin -u root -p shutdown
Enter password: ******
Configurer un compte utilisateur MySQLi
Pour ajouter un nouvel utilisateur à MySQLi qui est une version améliorée de MySQL, il vous suffit d'ajouter une nouvelle entrée à user table dans la base de données mysql.
Voici un exemple d'ajout d'un nouvel utilisateur guest avec les privilèges SELECT, INSERT et UPDATE avec le mot de passe guest123; la requête SQL est -
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)
Lors de l'ajout d'un nouvel utilisateur, n'oubliez pas de crypter le nouveau mot de passe en utilisant la fonction PASSWORD () fournie par MySQL. Comme vous pouvez le voir dans l'exemple ci-dessus, le mot de passe mypass est chiffré à 6f8c114b58f2ce9e.
Notez l'instruction FLUSH PRIVILEGES. Cela indique au serveur de recharger les tables d'octroi. Si vous ne l'utilisez pas, vous ne pourrez pas vous connecter à mysql en utilisant le nouveau compte utilisateur au moins jusqu'à ce que le serveur soit redémarré.
Vous pouvez également spécifier d'autres privilèges à un nouvel utilisateur en définissant les valeurs des colonnes suivantes dans la table utilisateur sur «Y» lors de l'exécution de la requête INSERT ou vous pouvez les mettre à jour ultérieurement à l'aide de la requête UPDATE.
- 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
Une autre façon d'ajouter un compte utilisateur consiste à utiliser la commande GRANT SQL; l'exemple suivant ajoutera un utilisateurzara avec mot de passe zara123 pour une base de données particulière appelée 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';
Cela créera également une entrée dans la table de base de données mysql appelée user.
NOTE - MySQL ne termine une commande que lorsque vous donnez un point-virgule (;) à la fin de la commande SQL.
La configuration du fichier /etc/my.cnf
Dans la plupart des cas, vous ne devez pas toucher ce fichier. Par défaut, il aura les entrées suivantes -
[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
Ici, vous pouvez spécifier un répertoire différent pour le journal des erreurs, sinon vous ne devez modifier aucune entrée de ce tableau.
Commande administrative MySQLi
Voici la liste des commandes MySQLi importantes, que vous utiliserez de temps en temps pour travailler avec la base de données MySQL -
USE Databasename - Cela sera utilisé pour sélectionner une base de données particulière dans la zone de travail MySQLi.
SHOW DATABASES - Répertorie les bases de données accessibles par le SGBD MySQLi.
SHOW TABLES - Affiche les tables de la base de données une fois qu'une base de données a été sélectionnée avec la commande use.
SHOW COLUMNS FROM tablename - Affiche les attributs, les types d'attributs, les informations clés, si NULL est autorisé, les valeurs par défaut et d'autres informations pour une table.
SHOW INDEX FROM tablename - Présente les détails de tous les index sur la table, y compris la CLÉ PRIMAIRE.
SHOW TABLE STATUS LIKE tablename\G - Rapporte les détails des performances et des statistiques du SGBD MySQLi.
MySQLi fonctionne très bien en combinaison de divers langages de programmation comme PERL, C, C ++, JAVA et PHP. Parmi ces langages, PHP est le plus populaire en raison de ses capacités de développement d'applications Web.
Ce tutoriel se concentre fortement sur l'utilisation de MySQLi dans un environnement PHP. PHP fournit diverses fonctions pour accéder à la base de données MySQLi et pour manipuler les enregistrements de données dans la base de données MySQLi. Vous auriez besoin d'appeler les fonctions PHP de la même manière que vous appelez toute autre fonction PHP.
Les fonctions PHP à utiliser avec MySQLi ont le format général suivant -
mysqli_function(value,value,...);
La deuxième partie du nom de la fonction est spécifique à la fonction, généralement un mot qui décrit ce que fait la fonction. Voici deux des fonctions que nous utiliserons dans notre tutoriel -
mysqli_connect($connect);
mysqli_query($connect,"SQL statement");
L'exemple suivant montre une syntaxe générique de PHP pour appeler n'importe quelle fonction MySQLi.
<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>
À partir du chapitre suivant, nous verrons toutes les fonctionnalités importantes de MySQLi avec PHP.
Connexion MySQLi utilisant le binaire mysql
Vous pouvez établir une base de données MySQLi en utilisant mysql binaire à l'invite de commande.
Exemple
Voici un exemple simple de connexion au serveur MySQL pour établir la base de données mysqli à partir de l'invite de commande -
[root@host]# mysql -u root -p
Enter password:******
Cela vous donnera l'invite de commande mysql> où vous pourrez exécuter n'importe quelle commande SQL. Voici le résultat de la commande ci-dessus -
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.
Dans l'exemple ci-dessus, nous avons utilisé rooten tant qu'utilisateur mais vous pouvez utiliser n'importe quel autre utilisateur. Tout utilisateur pourra effectuer toutes les opérations SQL, qui sont autorisées pour cet utilisateur.
Vous pouvez vous déconnecter de la base de données MySQL à tout moment en utilisant exit commande à l'invite mysql>.
mysql> exit
Bye
Connexion MySQLi à l'aide d'un script PHP
PHP fournit mysqli_connect()fonction pour ouvrir une connexion à la base de données. Cette fonction prend cinq paramètres et renvoie un identifiant de lien MySQLi en cas de succès ou FALSE en cas d'échec.
Syntaxe
connection mysqli_connect(server,user,passwd,new_link,client_flag);
Sr.No. | Paramètre et description |
---|---|
1 | server Facultatif - Le nom d'hôte exécutant le serveur de base de données. Si non spécifié, la valeur par défaut estlocalhost:3306. |
2 | user Facultatif - Le nom d'utilisateur accédant à la base de données. S'il n'est pas spécifié, le nom par défaut est le nom de l'utilisateur propriétaire du processus serveur. |
3 | passwd Facultatif - Le mot de passe de l'utilisateur accédant à la base de données. S'il n'est pas spécifié, la valeur par défaut est un mot de passe vide. |
4 | new_link Facultatif - Si un deuxième appel est fait à mysqli_connect () avec les mêmes arguments, aucune nouvelle connexion ne sera établie; à la place, l'identifiant de la connexion déjà ouverte sera retourné. |
5 | client_flags Facultatif - Une combinaison des constantes suivantes -
|
Vous pouvez vous déconnecter de la base de données MySQLi à tout moment en utilisant une autre fonction PHP mysqli_close(). Cette fonction prend un seul paramètre, qui est une connexion retournée parmysqli_connect() fonction.
Syntaxe
bool mysqli_close ( resource $link_identifier );
Si aucune ressource n'est spécifiée, la dernière base de données ouverte est fermée. Cette fonction renvoie true si elle ferme la connexion avec succès, sinon elle renvoie false.
Exemple
Essayez l'exemple suivant pour vous connecter à un serveur MySQL -
<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>
Si l'exemple ci-dessus est connecté à MySQLi, la sortie devrait être comme ceci sur votre navigateur -
Connected successfully
Créer une base de données avec mysqladmin
Vous auriez besoin de privilèges spéciaux pour créer ou supprimer une base de données MySQLi. Donc, en supposant que vous ayez accès à l'utilisateur root, vous pouvez créer n'importe quelle base de données en utilisant mysqlmysqladmin binaire.
Exemple
Voici un exemple simple pour créer une base de données appelée TUTORIALS -
[root@host]# mysqladmin -u root -p create TUTORIALS
Enter password:******
Cela créera une base de données MySQLi TUTORIELS.
Créer une base de données à l'aide d'un script PHP
Utilise PHP mysqli_querypour créer ou supprimer une base de données MySQLi. Cette fonction prend deux paramètres et retourne TRUE en cas de succès ou FALSE en cas d'échec.
Exemple
Essayez l'exemple suivant pour créer une base de données -
<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>
Si la base de données est connectée et créée avec succès, l'exemple de sortie doit être comme ceci -
Connected successfully
Database created successfully
Supprimer la base de données à l'aide de mysqladmin
Vous auriez besoin de privilèges spéciaux pour créer ou supprimer une base de données MySQLi. Donc, en supposant que vous ayez accès à l'utilisateur root, vous pouvez créer n'importe quelle base de données en utilisant mysqlmysqladmin binaire.
Soyez prudent lors de la suppression d'une base de données car vous perdrez toutes les données disponibles dans votre base de données.
Voici un exemple pour supprimer une base de données créée au chapitre précédent -
[root@host]# mysqladmin -u root -p drop TUTORIALS
Enter password:******
Cela vous donnera un avertissement et confirmera si vous voulez vraiment supprimer cette base de données ou non.
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
Supprimer la base de données à l'aide d'un script PHP
Utilise PHP querypour créer ou supprimer une base de données MySQLi. Cette fonction prend deux paramètres et retourne TRUE en cas de succès ou FALSE en cas d'échec.
Exemple
Essayez l'exemple suivant pour supprimer une base de données -
<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- Lors de la suppression d'une base de données à l'aide d'un script PHP, il ne vous demande aucune confirmation. Soyez donc prudent lors de la suppression d'une base de données MySQLi.
Si la base de données est connectée et supprimée avec succès, alors l'exemple de sortie devrait être comme ceci -
Connected successfully
Database deleted successfully
Une fois que vous êtes connecté au serveur MySQLi, il est nécessaire de sélectionner une base de données particulière avec laquelle travailler. En effet, plusieurs bases de données peuvent être disponibles avec MySQLi Server.
Syntaxe
bool mysqli_select_db( db_name, connection );
Sr.No. | Paramètre et description |
---|---|
1 | db_name Obligatoire - Le nom de la base de données MySQLi doit être sélectionné |
2 | connection Facultatif - si non spécifié, la dernière connexion ouverte par mysqli_connect sera utilisée. |
Exemple
Voici l'exemple vous montrant comment sélectionner une base de données.
<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>
Si la base de données est connectée et sélectionnée avec succès, l'exemple de sortie doit être comme ceci -
Connected successfully
La définition correcte des champs d'une table est importante pour l'optimisation globale de votre base de données. Vous ne devez utiliser que le type et la taille de champ dont vous avez vraiment besoin; ne définissez pas un champ à 10 caractères de large si vous savez que vous n'utiliserez que 2 caractères. Ces types de champs (ou colonnes) sont également appelés types de données, après letype of data vous stockerez dans ces champs.
MySQLi utilise de nombreux types de données différents répartis en trois catégories: numérique, date et heure et types de chaîne.
Types de données numériques
MySQLi utilise tous les types de données numériques ANSI SQL standard, donc si vous arrivez à MySQLi à partir d'un autre système de base de données, ces définitions vous sembleront familières. La liste suivante montre les types de données numériques courants et leurs descriptions -
INT- Un entier de taille normale qui peut être signé ou non signé. S'il est signé, la plage autorisée est comprise entre -2147483648 et 2147483647. Si elle n'est pas signée, la plage autorisée est comprise entre 0 et 4294967295. Vous pouvez spécifier une largeur de 11 chiffres maximum.
TINYINT- Un très petit entier qui peut être signé ou non signé. S'il est signé, la plage autorisée est comprise entre -128 et 127. Si elle n'est pas signée, la plage autorisée va de 0 à 255. Vous pouvez spécifier une largeur de 4 chiffres maximum.
SMALLINT- Un petit entier qui peut être signé ou non signé. S'il est signé, la plage autorisée est comprise entre -32768 et 32767. Si elle n'est pas signée, la plage autorisée est comprise entre 0 et 65535. Vous pouvez spécifier une largeur de 5 chiffres maximum.
MEDIUMINT- Un entier de taille moyenne qui peut être signé ou non signé. S'il est signé, la plage autorisée est comprise entre -8388608 et 8388607. Si elle n'est pas signée, la plage autorisée est comprise entre 0 et 16777215. Vous pouvez spécifier une largeur de 9 chiffres maximum.
BIGINT- Un grand entier qui peut être signé ou non signé. S'il est signé, la plage autorisée est comprise entre -9223372036854775808 et 9223372036854775807. Si elle n'est pas signée, la plage autorisée est comprise entre 0 et 18446744073709551615. Vous pouvez spécifier une largeur de 20 chiffres maximum.
FLOAT(M,D)- Un nombre à virgule flottante qui ne peut pas être non signé. Vous pouvez définir la longueur d'affichage (M) et le nombre de décimales (D). Ce n'est pas obligatoire et sera par défaut de 10,2, où 2 est le nombre de décimales et 10 est le nombre total de chiffres (y compris les décimales). La précision décimale peut aller jusqu'à 24 positions pour un FLOAT.
DOUBLE(M,D)- Un nombre à virgule flottante double précision qui ne peut pas être non signé. Vous pouvez définir la longueur d'affichage (M) et le nombre de décimales (D). Ce n'est pas obligatoire et sera par défaut de 16,4, où 4 est le nombre de décimales. La précision décimale peut aller jusqu'à 53 places pour un DOUBLE. REAL est un synonyme de DOUBLE.
DECIMAL(M,D) - Un nombre à virgule flottante décompressé qui ne peut pas être non signé. Dans les décimales non compressées, chaque décimale correspond à un octet. La définition de la longueur d'affichage (M) et du nombre de décimales (D) est nécessaire. NUMERIC est un synonyme de DECIMAL.
Types de date et d'heure
Les types de données de date et d'heure MySQL sont -
DATE- Une date au format AAAA-MM-JJ, comprise entre le 01/01/01 et le 31/12/9999 Par exemple, le 30 décembre 1973 serait stocké sous le numéro 1973-12-30.
DATETIME- Une combinaison de date et d'heure au format AAAA-MM-JJ HH: MM: SS, entre 1000-01-01 00:00:00 et 9999-12-31 23:59:59. Par exemple, 3 h 30 de l'après-midi du 30 décembre 1973 serait stocké sous la forme 1973-12-30 15:30:00.
TIMESTAMP - Un horodatage entre minuit, le 1er janvier 1970 et quelque part en 2037. Cela ressemble au format DATETIME précédent, seulement sans les tirets entre les nombres; Le 30 décembre 1973, à 3 h 30 de l'après-midi, sera stocké sous le numéro 19731230153000 (AAAAMMJJHHMMSS).
TIME - Stocke l'heure au format HH: MM: SS.
YEAR(M)- Stocke une année au format 2 ou 4 chiffres. Si la longueur est spécifiée comme 2 (par exemple, YEAR (2)), YEAR peut être de 1970 à 2069 (de 70 à 69). Si la longueur est spécifiée comme 4, YEAR peut être de 1901 à 2155. La longueur par défaut est 4.
Types de chaînes
Bien que les types numériques et de date soient amusants, la plupart des données que vous stockerez seront au format chaîne. Cette liste décrit les types de données de chaîne courants dans MySQLi.
CHAR(M)- Une chaîne de longueur fixe comprise entre 1 et 255 caractères (par exemple CHAR (5)), complétée à droite avec des espaces à la longueur spécifiée lorsqu'elle est stockée. La définition d'une longueur n'est pas obligatoire, mais la valeur par défaut est 1.
VARCHAR(M)- Une chaîne de longueur variable comprise entre 1 et 255 caractères; par exemple VARCHAR (25). Vous devez définir une longueur lors de la création d'un champ VARCHAR.
BLOB or TEXT- Un champ d'une longueur maximale de 65535 caractères. Les BLOB sont des «grands objets binaires» et sont utilisés pour stocker de grandes quantités de données binaires, telles que des images ou d'autres types de fichiers. Les champs définis comme TEXT contiennent également de grandes quantités de données; la différence entre les deux est que les tris et les comparaisons sur les données stockées sont sensibles à la casse sur les BLOB et ne le sont pas dans les champs TEXT. Vous ne spécifiez pas de longueur avec BLOB ou TEXT.
TINYBLOB or TINYTEXT- Une colonne BLOB ou TEXT d'une longueur maximale de 255 caractères. Vous ne spécifiez pas de longueur avec TINYBLOB ou TINYTEXT.
MEDIUMBLOB or MEDIUMTEXT- Une colonne BLOB ou TEXT d'une longueur maximale de 16777215 caractères. Vous ne spécifiez pas de longueur avec MEDIUMBLOB ou MEDIUMTEXT.
LONGBLOB or LONGTEXT- Une colonne BLOB ou TEXT d'une longueur maximale de 4294967295 caractères. Vous ne spécifiez pas de longueur avec LONGBLOB ou LONGTEXT.
ENUM - Une énumération, qui est un terme sophistiqué pour la liste. Lors de la définition d'un ENUM, vous créez une liste d'éléments à partir de laquelle la valeur doit être sélectionnée (ou elle peut être NULL). Par exemple, si vous vouliez que votre champ contienne "A" ou "B" ou "C", vous définiriez votre ENUM comme ENUM ('A', 'B', 'C') et uniquement ces valeurs (ou NULL) pourrait jamais peupler ce champ.
La commande de création de table nécessite -
- Nom de la table
- Noms des champs
- Définitions pour chaque champ
Syntaxe
Voici la syntaxe SQL générique pour créer une table MySQLi -
CREATE TABLE table_name (column_name column_type);
Maintenant, nous allons créer le tableau suivant dans TUTORIALS base de données.
CREATE TABLE tutorials_inf(
id INT AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
primary key (id),
);
Ici, quelques éléments nécessitent une explication -
Attribut de champ NOT NULLest utilisé car nous ne voulons pas que ce champ soit NULL. Donc, si l'utilisateur essaie de créer un enregistrement avec une valeur NULL, MySQLi lèvera une erreur.
Attribut de champ AUTO_INCREMENT dit à MySQLi de continuer et d'ajouter le prochain numéro disponible au champ id.
Mot-clé PRIMARY KEYest utilisé pour définir une colonne comme clé primaire. Vous pouvez utiliser plusieurs colonnes séparées par une virgule pour définir une clé primaire.
Création de tables à partir de l'invite de commande
Il est facile de créer une table MySQLi à partir de l'invite mysql>. Vous utiliserez la commande SQLCREATE TABLE pour créer une table.
Exemple
Voici un exemple, qui crée 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 ne termine pas une commande tant que vous n'avez pas donné un point-virgule (;) à la fin de la commande SQL.
Création de tables à l'aide d'un script PHP
Pour créer une nouvelle table dans n'importe quelle base de données existante, vous devez utiliser la fonction PHP mysqli_query(). Vous passerez son deuxième argument avec la commande SQL appropriée pour créer une table.
Exemple
Voici un exemple pour créer une table en utilisant un script PHP -
<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>
L'exemple de sortie devrait être comme ceci -
Connected successfully
Table created successfully
Il est très facile de supprimer une table MySQLi existante, mais vous devez être très prudent lors de la suppression d'une table existante car les données perdues ne seront pas récupérées après la suppression d'une table.
Syntaxe
Voici la syntaxe SQL générique pour supprimer une table MySQLi -
DROP TABLE table_name ;
Suppression de tables à partir de l'invite de commandes
Cela a juste besoin d'exécuter DROP TABLE Commande SQL à l'invite mysql>.
Exemple
Voici un exemple qui supprime 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>
Suppression de tables à l'aide d'un script PHP
Pour supprimer une table existante dans n'importe quelle base de données, vous devez utiliser la fonction PHP mysqli_query(). Vous passerez son deuxième argument avec la commande SQL appropriée pour supprimer une table.
Exemple
<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>
L'exemple de sortie devrait être comme ceci -
Connected successfully
Table is deleted successfully
Pour insérer des données dans la table MySQLi, vous devez utiliser SQL INSERT INTOcommander. Vous pouvez insérer des données dans la table MySQLi en utilisant l'invite mysql> ou en utilisant n'importe quel script comme PHP.
Syntaxe
Voici la syntaxe SQL générique de la commande INSERT INTO pour insérer des données dans la table MySQLi:
INSERT INTO table_name
( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
Pour insérer des types de données chaîne, il est nécessaire de conserver toutes les valeurs entre guillemets doubles ou simples, par exemple: - "value".
Insertion de données à partir de l'invite de commande
Cela utilisera la commande SQL INSERT INTO pour insérer des données dans la table MySQLi tutorials_inf.
Exemple
L'exemple suivant créera 3 enregistrements dans tutorials_tbl table -
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- Veuillez noter que tous les flèches (->) ne font pas partie de la commande SQL; ils indiquent une nouvelle ligne et ils sont créés automatiquement par l'invite MySQL en appuyant sur la touche Entrée sans donner un point-virgule à la fin de chaque ligne de la commande.
Insertion de données à l'aide d'un script PHP
Vous pouvez utiliser la même commande SQL INSERT INTO dans la fonction PHP mysqli_query() pour insérer des données dans une table MySQLi.
Exemple
Cet exemple prendra trois paramètres de l'utilisateur et les insérera dans la table MySQLi -
<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>
L'exemple de sortie devrait être comme ceci -
New record created successfully
Le SQL SELECTLa commande est utilisée pour récupérer les données de la base de données MySQLi. Vous pouvez utiliser cette commande à l'invite mysql> ainsi que dans n'importe quel script comme PHP.
Syntaxe
Voici la syntaxe SQL générique de la commande SELECT pour récupérer les données de la table MySQLi -
SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
Vous pouvez utiliser une ou plusieurs tables séparées par des virgules pour inclure diverses conditions à l'aide d'une clause WHERE, mais la clause WHERE est une partie facultative de la commande SELECT.
Vous pouvez récupérer un ou plusieurs champs en une seule commande SELECT.
Vous pouvez spécifier une étoile (*) à la place des champs. Dans ce cas, SELECT retournera tous les champs.
Vous pouvez spécifier n'importe quelle condition à l'aide de la clause WHERE.
Vous pouvez spécifier un décalage à l'aide de OFFSETd'où SELECT commencera à renvoyer les enregistrements. Par défaut, le décalage est égal à zéro.
Vous pouvez limiter le nombre de retours en utilisant LIMIT attribut.
Récupération des données à partir de l'invite de commande -
Cela utilisera la commande SQL SELECT pour récupérer les données de la table MySQLi tutorials_tbl
Exemple
L'exemple suivant renverra tous les enregistrements de tutorials_inf table -
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>
Récupération de données à l'aide d'un script PHP
Vous pouvez utiliser la même commande SQL SELECT dans la fonction PHP mysqli_query(). Cette fonction est utilisée pour exécuter une commande SQL et plus tard une autre fonction PHPmysqli_fetch_assoc()peut être utilisé pour récupérer toutes les données sélectionnées. Cette fonction renvoie la ligne sous forme de tableau associatif, de tableau numérique ou les deux. Cette fonction renvoie FALSE s'il n'y a plus de lignes.
Vous trouverez ci-dessous un exemple simple pour récupérer des enregistrements à partir de tutorials_inf table.
Exemple
Essayez l'exemple suivant pour afficher tous les enregistrements de la table tutorials_inf.
<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>
Le contenu des lignes est affecté à la variable $ row et les valeurs de la ligne sont ensuite imprimées.
NOTE - N'oubliez jamais de mettre des accolades lorsque vous souhaitez insérer une valeur de tableau directement dans une chaîne.
L'exemple de sortie devrait être comme ceci -
Connected successfully
Name: ram
Name: kit
Name: abc
Nous avons vu SQL SELECTcommande pour récupérer les données de la table MySQLi. Nous pouvons utiliser une clause conditionnelle appeléeWHEREclause pour filtrer les résultats. En utilisant la clause WHERE, nous pouvons spécifier un critère de sélection pour sélectionner les enregistrements requis dans une table.
Syntaxe
Voici la syntaxe SQL générique de la commande SELECT avec la clause WHERE pour récupérer les données de la table MySQLi -
SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
Vous pouvez utiliser une ou plusieurs tables séparées par des virgules pour inclure diverses conditions à l'aide d'une clause WHERE, mais la clause WHERE est une partie facultative de la commande SELECT.
Vous pouvez spécifier n'importe quelle condition à l'aide de la clause WHERE.
Vous pouvez spécifier plusieurs conditions en utilisant AND ou OR les opérateurs.
Une clause WHERE peut être utilisée avec la commande DELETE ou UPDATE SQL également pour spécifier une condition.
le WHERELa clause fonctionne comme une condition if dans n'importe quel langage de programmation. Cette clause est utilisée pour comparer une valeur donnée avec la valeur de champ disponible dans la table MySQLi. Si la valeur donnée de l'extérieur est égale à la valeur de champ disponible dans la table MySQLi, alors il renvoie cette ligne.
Voici la liste des opérateurs, qui peuvent être utilisés avec WHERE clause.
Supposons que le champ A contient 10 et le champ B 20, alors -
Opérateur | La description | Exemple |
---|---|---|
= | Vérifie si les valeurs de deux opérandes sont égales ou non, si oui, la condition devient vraie. | (A = B) n'est pas vrai. |
! = | Vérifie si les valeurs de deux opérandes sont égales ou non, si les valeurs ne sont pas égales, la condition devient vraie. | (A! = B) est vrai. |
> | Vérifie si la valeur de l'opérande gauche est supérieure à la valeur de l'opérande droit, si oui, la condition devient vraie. | (A> B) n'est pas vrai. |
< | Vérifie si la valeur de l'opérande gauche est inférieure à la valeur de l'opérande droit, si oui, la condition devient vraie. | (A <B) est vrai. |
> = | Vérifie si la valeur de l'opérande gauche est supérieure ou égale à la valeur de l'opérande droit, si oui, la condition devient vraie. | (A> = B) n'est pas vrai. |
<= | Vérifie si la valeur de l'opérande gauche est inférieure ou égale à la valeur de l'opérande droit, si oui, la condition devient vraie. | (A <= B) est vrai. |
La clause WHERE est très utile lorsque vous souhaitez récupérer des lignes sélectionnées dans une table, en particulier lorsque vous utilisez MySQLi Join. Les jointures sont abordées dans un autre chapitre.
Il est courant de rechercher des enregistrements en utilisant Primary Key pour accélérer la recherche.
Si la condition donnée ne correspond à aucun enregistrement de la table, la requête ne renverra aucune ligne.
Récupération des données à partir de l'invite de commande
Cela utilisera la commande SQL SELECT avec la clause WHERE pour récupérer les données sélectionnées de la table MySQLi tutorials_inf.
Exemple
L'exemple suivant renverra tous les enregistrements de tutorials_inf table dont le nom est 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>
À moins d'effectuer un LIKEcomparaison sur une chaîne, la comparaison n'est pas sensible à la casse. Vous pouvez rendre votre recherche sensible à la casse en utilisantBINARY mot-clé comme suit -
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>
Récupération de données à l'aide d'un script PHP:
Vous pouvez utiliser la même commande SQL SELECT avec WHERE CLAUSE dans la fonction PHP mysqli_query().
Exemple
L'exemple suivant renverra tous les enregistrements de tutorials_inf table dont le nom est 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);
?>
L'exemple de sortie devrait être comme ceci -
Connected successfully
Name: SAI
Il peut y avoir une exigence où les données existantes dans une table MySQLi doivent être modifiées. Vous pouvez le faire en utilisant SQLUPDATEcommander. Cela modifiera toute valeur de champ de n'importe quelle table MySQLi.
Syntaxe
Voici la syntaxe SQL générique de la commande UPDATE pour modifier les données dans la table MySQLi -
UPDATE table_name SET field1 = new-value1, field2 = new-value2 [WHERE Clause]
Vous pouvez mettre à jour un ou plusieurs champs ensemble.
Vous pouvez spécifier n'importe quelle condition à l'aide de la clause WHERE.
Vous pouvez mettre à jour les valeurs dans une seule table à la fois.
La clause WHERE est très utile lorsque vous souhaitez mettre à jour des lignes sélectionnées dans une table.
Mise à jour des données à partir de l'invite de commande
Cela utilisera la commande SQL UPDATE avec la clause WHERE pour mettre à jour les données sélectionnées dans la table MySQLi tutorials_inf.
Exemple
L'exemple suivant mettra à jour name champ pour un enregistrement ayant 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>
Mise à jour des données à l'aide d'un script PHP
Vous pouvez utiliser la commande SQL UPDATE avec ou sans WHERE CLAUSE dans la fonction PHP mysqli_query(). Cette fonction exécutera la commande SQL de la même manière qu'elle est exécutée à l'invite mysql>.
Exemple
Essayez l'exemple suivant pour mettre à jour name champ pour un enregistrement.
<?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);
?>
L'exemple de sortie devrait être comme ceci -
Connected successfully
Record updated successfully
Si vous souhaitez supprimer un enregistrement de n'importe quelle table MySQLi, vous pouvez utiliser la commande SQL DELETE FROM. Vous pouvez utiliser cette commande à l'invite mysql> ainsi que dans n'importe quel script comme PHP.
Syntaxe
Voici la syntaxe SQL générique de la commande DELETE pour supprimer des données d'une table MySQLi -
DELETE FROM table_name [WHERE Clause]
Si la clause WHERE n'est pas spécifiée, tous les enregistrements seront supprimés de la table MySQLi donnée.
Vous pouvez spécifier n'importe quelle condition à l'aide de la clause WHERE.
Vous pouvez supprimer des enregistrements dans une seule table à la fois.
La clause WHERE est très utile lorsque vous souhaitez supprimer les lignes sélectionnées dans une table.
Suppression de données de l'invite de commande
Cela utilisera la commande SQL DELETE avec la clause WHERE pour supprimer les données sélectionnées dans la table MySQLi tutorials_inf.
Exemple
L'exemple suivant supprimera un enregistrement dans tutorial_inf dont le nom est johar.
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>
Suppression de données à l'aide d'un script PHP
Vous pouvez utiliser la commande SQL DELETE avec ou sans WHERE CLAUSE dans la fonction PHP mysqli_query(). Cette fonction exécutera la commande SQL de la même manière qu'elle est exécutée à l'invite mysql>.
Exemple
Essayez l'exemple suivant pour supprimer un enregistrement de tutorial_inf dont le nom est althamas.
<?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);
?>
La sortie de l'échantillon devrait être comme ceci-
Connected successfully
Record deleted successfully
Nous avons vu SQL SELECTcommande pour récupérer les données de la table MySQLi. Nous pouvons également utiliser une clause conditionnelle appeléeWHERE clause pour sélectionner les enregistrements requis.
Une clause WHERE avec le signe égal (=) fonctionne bien là où nous voulons faire une correspondance exacte. Comme si "name = 'sai'". Mais il peut y avoir une exigence où nous voulons filtrer tous les résultats où le nom doit contenir "johar". Cela peut être géré en utilisant SQLLIKE clause avec la clause WHERE.
Si la clause SQL LIKE est utilisée avec les caractères%, elle fonctionnera comme un méta caractère (*) sous UNIX tout en listant tous les fichiers ou répertoires à l'invite de commande.
Sans le caractère%, la clause LIKE est très similaire au signe égal avec la clause WHERE.
Syntaxe
Voici la syntaxe SQL générique de la commande SELECT avec la clause LIKE pour récupérer les données de la table MySQLi -
SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
Vous pouvez spécifier n'importe quelle condition à l'aide de la clause WHERE.
Vous pouvez utiliser la clause LIKE avec la clause WHERE.
Vous pouvez utiliser la clause LIKE à la place du signe égal.
Lorsque LIKE est utilisé avec le signe%, cela fonctionnera comme une recherche de méta-caractères.
Vous pouvez spécifier plusieurs conditions en utilisant AND ou OR les opérateurs.
Une clause WHERE ... LIKE peut être utilisée avec la commande SQL DELETE ou UPDATE également pour spécifier une condition.
Utilisation de la clause LIKE à l'invite de commandes
Cela utilisera la commande SQL SELECT avec la clause WHERE ... LIKE pour récupérer les données sélectionnées de la table MySQLi tutorials_inf.
Exemple
L'exemple suivant renverra tous les enregistrements de tutorials_inf table dont le nom de l'auteur se termine par 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>
Utilisation de la clause LIKE dans un script PHP
Vous pouvez utiliser la syntaxe similaire de la clause WHERE ... LIKE dans la fonction PHP mysqli_query(). Cette fonction est utilisée pour exécuter une commande SQL et plus tard une autre fonction PHPmysqli_fetch_array() peut être utilisé pour récupérer toutes les données sélectionnées si la clause WHERE ... LIKE est utilisée avec la commande SELECT.
Mais si la clause WHERE ... LIKE est utilisée avec la commande DELETE ou UPDATE, aucun autre appel de fonction PHP n'est requis.
Exemple
Essayez l'exemple suivant pour renvoyer tous les enregistrements de tutorials_inf table dont le nom contient 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);
?>
L'exemple de sortie devrait être comme ceci -
Connected successfully
johar
Nous avons vu SQL SELECTcommande pour récupérer les données de la table MySQLi. Lorsque vous sélectionnez des lignes, le serveur MySQLi est libre de les renvoyer dans n'importe quel ordre, sauf indication contraire de votre part en indiquant comment trier le résultat. Mais vous triez un jeu de résultats en ajoutant une clause ORDER BY qui nomme la ou les colonnes sur lesquelles vous souhaitez trier.
Syntaxe
Voici la syntaxe SQL générique de la commande SELECT avec la clause ORDER BY pour trier les données de la table MySQL -
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
Vous pouvez trier le résultat renvoyé sur n'importe quel champ à condition que le fichier soit répertorié.
Vous pouvez trier les résultats sur plusieurs champs.
Vous pouvez utiliser le mot-clé ASC ou DESC pour obtenir le résultat par ordre croissant ou décroissant. Par défaut, c'est un ordre croissant.
Vous pouvez utiliser la clause WHERE ... LIKE de la manière habituelle pour mettre une condition.
Utilisation de la clause ORDER BY à l'invite de commandes
Cela utilisera la commande SQL SELECT avec la clause ORDER BY pour récupérer les données de la table MySQLi tutorials_inf.
Exemple
Essayez l'exemple suivant, qui renvoie le résultat par ordre décroissant.
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>
Vérifiez que tous les identifiants sont répertoriés par ordre décroissant.
Utilisation de la clause ORDER BY dans un script PHP
Vous pouvez utiliser une syntaxe similaire de la clause ORDER BY dans la fonction PHP mysqli_query(). Cette fonction est utilisée pour exécuter une commande SQL et plus tard une autre fonction PHPmysqli_fetch_array() peut être utilisé pour récupérer toutes les données sélectionnées.
Exemple
Essayez l'exemple suivant, qui renvoie le résultat dans l'ordre décroissant de l'auteur du didacticiel.
<?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);
?>
L'exemple de sortie devrait être comme ceci -
Connected successfully
id name
4 ram
3 raghu
2 johar
1 sai
Jusqu'à présent, nous n'avons obtenu les données que d'une seule table à la fois. C'est bien pour les prises simples, mais dans la plupart des utilisations de MySQL dans le monde réel, vous aurez souvent besoin d'obtenir des données de plusieurs tables dans une seule requête.
Vous pouvez utiliser plusieurs tables dans votre seule requête SQL. Le fait de se joindre à MySQLi fait référence à l'écrasement de deux ou plusieurs tables en une seule table.
Vous pouvez utiliser JOINS dans les instructions SELECT, UPDATE et DELETE pour joindre des tables MySQLi. Nous verrons également un exemple de LEFT JOIN qui est différent du simple MySQLi JOIN.
Utilisation des jointures à l'invite de commandes
Supposons que nous ayons deux tables tutorials_bks et tutorials_inf, dans TUTORIELS. Une liste complète est donnée ci-dessous -
Exemple
Essayez les exemples suivants -
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>
Nous pouvons maintenant écrire une requête SQL pour joindre ces deux tables. Cette requête sélectionnera tous les noms de la tabletutorials_inf et récupérera le nombre correspondant de tutoriels detutorials_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>
Dans la table tutorials_bks, nous avons 5 enregistrements mais dans l'exemple ci-dessus, il filtre et ne donne que 4 enregistrements d'identifiant par requête
Utilisation des jointures dans le script PHP
Vous pouvez utiliser l'une des requêtes SQL mentionnées ci-dessus dans un script PHP. Il vous suffit de passer une requête SQL dans la fonction PHPmysqli_query() puis vous récupérerez les résultats de la manière habituelle.
Exemple
Essayez l'exemple suivant -
<?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);
?>
L'exemple de sortie devrait être comme ceci -
Connected successfully
id name id
1 sai 1
2 johar 2
3 raghu 3
4 ram 4
JOINT GAUCHE MySQL
Une jointure gauche MySQLi est différente d'une simple jointure. Une jointure à gauche MySQLi donne une considération supplémentaire à la table qui se trouve à gauche.
Si je fais une jointure à gauche, j'obtiens tous les enregistrements qui correspondent de la même manière et en plus j'obtiens un enregistrement supplémentaire pour chaque enregistrement sans correspondance dans la table de gauche de la jointure - assurant ainsi (dans mon exemple) que chaque nom obtient un mention -
Exemple
Essayez l'exemple suivant pour comprendre LEFT JOIN -
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;
Vous auriez besoin de faire plus de pratique pour vous familiariser avec JOINS. C'est un concept un peu complexe dans MySQL / SQL et deviendra plus clair en faisant de vrais exemples.
Nous avons vu SQL SELECT commande avec WHERE clause pour récupérer les données de la table MySQLi, mais lorsque nous essayons de donner une condition, qui compare la valeur du champ ou de la colonne à NULL, cela ne fonctionne pas correctement.
Pour gérer une telle situation, MySQLi fournit trois opérateurs
IS NULL - l'opérateur renvoie vrai si la valeur de la colonne est NULL.
IS NOT NULL - l'opérateur renvoie true si la valeur de la colonne n'est pas NULL.
<=> - l'opérateur compare les valeurs, ce qui (contrairement à l'opérateur =) est vrai même pour deux valeurs NULL.
Les conditions impliquant NULL sont spéciales. Vous ne pouvez pas utiliser = NULL ou! = NULL pour rechercher des valeurs NULL dans les colonnes. De telles comparaisons échouent toujours car il est impossible de dire si elles sont vraies ou non. Même NULL = NULL échoue.
Pour rechercher des colonnes qui sont ou non NULL, utilisez IS NULL ou IS NOT NULL.
Utilisation de valeurs NULL à l'invite de commandes
Supposons une table tutorials_bks dans la base de données TUTORIELS et contient deux colonnes id et name, où un nom NULL indique que la valeur est inconnue -
Exemple
Essayez les exemples suivants -
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>
Pour trouver des enregistrements où la colonne de nom est ou non NULL, les requêtes doivent être écrites comme ceci -
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)
Gestion des valeurs NULL dans un script PHP
Vous pouvez utiliser la condition if ... else pour préparer une requête basée sur une valeur NULL.
Exemple
L'exemple suivant prend tutorial_count de l'extérieur, puis le compare à la valeur disponible dans la table.
<?php
$dbhost = 'localhost:3036'; $dbuser = 'root';
$dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
if( isset($tutorial_count )) { $sql = 'SELECT tutorial_author, tutorial_count FROM tcount_tbl
WHERE tutorial_count = $tutorial_count'; } else { $sql = 'SELECT tutorial_author, tutorial_count
FROM tcount_tbl WHERE tutorial_count IS $tutorial_count'; } mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Author:{$row['tutorial_author']} <br> ".
"Count: {$row['tutorial_count']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>
Vous avez vu le modèle MySQLi correspondant avec LIKE ...%. MySQLi prend en charge un autre type d'opération de correspondance de modèle basée sur des expressions régulières etREGEXPopérateur. Si vous connaissez PHP ou PERL, c'est très simple à comprendre car cette correspondance est très similaire à ces expressions régulières de script.
Voici le tableau des motifs, qui peut être utilisé avec REGEXP opérateur.
Modèle | À quoi correspond le motif |
---|---|
^ | Début de chaîne |
$ | Fin de chaîne |
. | Tout caractère unique |
[...] | Tout caractère répertorié entre les crochets |
[^ ...] | Tout caractère non répertorié entre les crochets |
p1 | p2 | p3 | Alternance; correspond à l'un des motifs p1, p2 ou p3 |
* | Zéro ou plusieurs instances de l'élément précédent |
+ | Une ou plusieurs instances de l'élément précédent |
{n} | n instances de l'élément précédent |
{m, n} | m à n instances de l'élément précédent |
Exemples
Maintenant, sur la base du tableau ci-dessus, vous pouvez effectuer différents types de requêtes SQL pour répondre à vos besoins. Ici, j'en énumère quelques-uns pour votre compréhension. Considérez que nous avons une table appelée tutorials_inf et qu'elle a un champ appelé name -
Requête pour trouver tous les noms commençant par «sa»
mysql> SELECT * FROM tutorials_inf WHERE name REGEXP '^sa';
L'exemple de sortie devrait être comme ceci -
+----+------+
| id | name |
+----+------+
| 1 | sai |
+----+------+
1 row in set (0.00 sec)
Requête pour trouver tous les noms se terminant par «ai»
mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'ai$';
L'exemple de sortie devrait être comme ceci -
+----+------+
| id | name |
+----+------+
| 1 | sai |
+----+------+
1 row in set (0.00 sec)
Requête pour trouver tous les noms contenant 'a'
mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'a';
L'exemple de sortie devrait être comme ceci -
+----+-------+
| id | name |
+----+-------+
| 1 | sai |
| 3 | ram |
| 4 | johar |
+----+-------+
3 rows in set (0.00 sec)
Requête pour trouver tous les noms commençant par une voyelle
mysql> SELECT * FROM tutorials_inf WHERE name REGEXP '^[aeiou]';
Une transaction est un groupe séquentiel d'opérations de manipulation de base de données, qui est effectuée comme s'il s'agissait d'une seule unité de travail. En d'autres termes, une transaction ne sera jamais complète à moins que chaque opération individuelle au sein du groupe ne réussisse. Si une opération au sein de la transaction échoue, la transaction entière échouera.
En pratique, vous regrouperez de nombreuses requêtes SQL dans un groupe et vous les exécuterez toutes ensemble dans le cadre d'une transaction.
Propriétés des transactions
Les transactions ont les quatre propriétés standard suivantes, généralement désignées par l'acronyme ACID -
Atomicity- s'assure que toutes les opérations au sein de l'unité de travail sont menées à bien; sinon, la transaction est abandonnée au point d'échec et les opérations précédentes sont restaurées à leur état antérieur.
Consistency - garantit que la base de données change correctement d'état après une transaction validée avec succès.
Isolation - permet aux transactions de fonctionner de manière indépendante et transparente les unes par rapport aux autres.
Durability - garantit que le résultat ou l'effet d'une transaction validée persiste en cas de défaillance du système.
Dans MySQL, les transactions commencent par l'instruction BEGIN WORK et se terminent par une instruction COMMIT ou ROLLBACK. Les commandes SQLi entre les instructions de début et de fin constituent l'essentiel de la transaction.
COMMIT et ROLLBACK
Ces deux mots-clés Commit et Rollback sont principalement utilisés pour les transactions MySQL.
Lorsqu'une transaction réussie est terminée, la commande COMMIT doit être émise afin que les modifications apportées à toutes les tables impliquées prennent effet.
En cas d'échec, une commande ROLLBACK doit être émise pour ramener chaque table référencée dans la transaction à son état précédent.
Vous pouvez contrôler le comportement d'une transaction en définissant la variable de session appelée AUTOCOMMIT. Si AUTOCOMMIT est défini sur 1 (valeur par défaut), alors chaque instruction SQL (dans une transaction ou non) est considérée comme une transaction complète et validée par défaut lorsqu'elle se termine. Lorsque AUTOCOMMIT est défini sur 0, en émettant la commande SET AUTOCOMMIT = 0, la série d'instructions suivante agit comme une transaction et aucune activité n'est validée jusqu'à ce qu'une instruction COMMIT explicite soit émise.
Vous pouvez exécuter ces commandes SQL en PHP en utilisant mysqli_query() fonction.
Exemple générique de transaction
Cette séquence d'événements est indépendante du langage de programmation utilisé; le chemin logique peut être créé dans la langue que vous utilisez pour créer votre application.
Vous pouvez exécuter ces commandes SQL en PHP en utilisant mysqli_query() fonction.
Commencez la transaction en exécutant la commande SQL BEGIN WORK.
Émettez une ou plusieurs commandes SQL telles que SELECT, INSERT, UPDATE ou DELETE.
Vérifiez s'il n'y a pas d'erreur et que tout est conforme à vos besoins.
S'il y a une erreur, exécutez la commande ROLLBACK, sinon exécutez une commande COMMIT.
Types de table sécurisés pour les transactions dans MySQLi
Vous ne pouvez pas utiliser les transactions directement, vous pouvez mais elles ne seraient pas sûres et garanties. Si vous prévoyez d'utiliser des transactions dans votre programmation MySQLi, vous devez créer vos tables d'une manière spéciale. Il existe de nombreux types de tables, qui prennent en charge les transactions, mais la plus populaire estInnoDB.
La prise en charge des tables InnoDB nécessite un paramètre de compilation spécifique lors de la compilation de MySQLi à partir des sources. Si votre version MySQLi ne prend pas en charge InnoDB, demandez à votre fournisseur d'accès Internet de créer une version de MySQLi avec prise en charge des types de table InnoDB ou téléchargez et installez la distribution binaire MySQL-Max pour Windows ou Linux / UNIX et travaillez avec le type de table dans un environnement de développement.
Si votre installation MySQLi prend en charge les tables InnoDB, ajoutez simplement un TYPE = InnoDBdéfinition à l'instruction de création de table. Par exemple, le code suivant crée une table InnoDB appelée tutorials_innodb -
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)
Consultez le lien suivant pour en savoir plus sur - InnoDB
Vous pouvez utiliser d'autres types de tableaux comme GEMINI ou BDB, mais cela dépend de votre installation s'il prend en charge ces deux types.
MySQLi ALTER La commande est très utile lorsque vous souhaitez modifier un nom de votre table, n'importe quel champ de table ou si vous souhaitez ajouter ou supprimer une colonne existante dans une table.
Commençons par la création d'une table appelée 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)
Déposer, ajouter ou repositionner une colonne
Supposons que vous souhaitiez supprimer une colonne existante i à partir de la table MySQLi ci-dessus, vous utiliserez DROP clause avec ALTER commande comme suit -
mysql> ALTER TABLE tutorials_alter DROP i;
UNE DROP ne fonctionnera pas si la colonne est la seule qui reste dans le tableau.
Pour ajouter une colonne, utilisez ADD et spécifiez la définition de colonne. L'instruction suivante restaure lei colonne à tutorials_alter -
mysql> ALTER TABLE tutorials_alter ADD i INT;
Après avoir émis cette instruction, testalter contiendra les deux mêmes colonnes que lors de la création de la table, mais n'aura pas tout à fait la même structure. C'est parce que de nouvelles colonnes sont ajoutées à la fin du tableau par défaut. Donc même sii était à l'origine la première colonne de mytbl, maintenant c'est la dernière.
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)
Pour indiquer que vous voulez une colonne à une position spécifique dans la table, utilisez FIRST pour en faire la première colonne ou APRÈS col_name pour indiquer que la nouvelle colonne doit être placée après col_name. Essayez les instructions ALTER TABLE suivantes, en utilisant SHOW COLUMNS après chacune d'elles pour voir l'effet de chacune d'elles -
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;
Les spécificateurs FIRST et AFTER fonctionnent uniquement avec la clause ADD. Cela signifie que si vous souhaitez repositionner une colonne existante dans une table, vous devez d'abord la SUPPRIMER, puis l'ajouter à la nouvelle position.
Modification d'une définition ou d'un nom de colonne
Pour modifier la définition d'une colonne, utilisez MODIFY ou CHANGEclause avec la commande ALTER. Par exemple, pour changer de colonnec de CHAR (1) à CHAR (10), faites ceci -
mysql> ALTER TABLE tutorials_alter MODIFY c CHAR(10);
Avec CHANGE, la syntaxe est un peu différente. Après le mot-clé CHANGE, nommez la colonne que vous souhaitez modifier, puis spécifiez la nouvelle définition, qui inclut le nouveau nom. Essayez l'exemple suivant:
mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;
Si vous utilisez maintenant CHANGE pour convertir j de BIGINT en INT sans changer le nom de la colonne, l'instruction sera comme prévu -
mysql> ALTER TABLE tutorials_alter CHANGE j j INT;
L'effet d'ALTER TABLE sur les attributs de valeur nulle et par défaut -
Lorsque vous MODIFIEZ ou CHANGEZ une colonne, vous pouvez également spécifier si la colonne peut contenir ou non des valeurs NULL et quelle est sa valeur par défaut. En fait, si vous ne le faites pas, MySQLi attribue automatiquement des valeurs à ces attributs.
Voici l'exemple, où la colonne NOT NULL aura la valeur 100 par défaut.
mysql> ALTER TABLE tutorials_alter
-> MODIFY j BIGINT NOT NULL DEFAULT 100;
Si vous n'utilisez pas la commande ci-dessus, MySQLi remplira les valeurs NULL dans toutes les colonnes.
Modification de la valeur par défaut d'une colonne
Vous pouvez modifier une valeur par défaut pour n'importe quelle colonne à l'aide de la commande ALTER. Essayez l'exemple suivant.
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)
Vous pouvez supprimer la contrainte par défaut de n'importe quelle colonne en utilisant la clause DROP avec la commande ALTER.
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)
Modification d'un type de table
Vous pouvez utiliser un type de table en utilisant TYPE clause avec la commande ALTER.
Pour connaître le type actuel d'une table, utilisez l'instruction SHOW TABLE STATUS.
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)
Renommer une table
Pour renommer une table, utilisez le RENAMEoption de l'instruction ALTER TABLE. Essayez l'exemple suivant pour renommer tutorials_alter en tutorials_bks.
mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;
Vous pouvez utiliser la commande ALTER pour créer et déposer INDEX sur un fichier MySQL. Nous verrons cette fonctionnalité dans le prochain chapitre.
Un index de base de données est une structure de données qui améliore la vitesse des opérations dans une table. Les index peuvent être créés à l'aide d'une ou plusieurs colonnes, fournissant la base à la fois de recherches aléatoires rapides et d'un ordre efficace d'accès aux enregistrements.
Lors de la création de l'index, il convient de considérer quelles sont les colonnes qui seront utilisées pour effectuer des requêtes SQL et créer un ou plusieurs index sur ces colonnes.
En pratique, les index sont également des types de tables, qui conservent la clé primaire ou le champ d'index et un pointeur vers chaque enregistrement dans la table réelle.
Les utilisateurs ne peuvent pas voir les index, ils sont juste utilisés pour accélérer les requêtes et seront utilisés par Database Search Engine pour localiser très rapidement les enregistrements.
Les instructions INSERT et UPDATE prennent plus de temps sur les tables ayant des index alors que les instructions SELECT deviennent rapides sur ces tables. La raison en est que lors de l'insertion ou de la mise à jour, la base de données doit également insérer ou mettre à jour les valeurs d'index.
Index simple et unique
Vous pouvez créer un index unique sur une table. Un index unique signifie que deux lignes ne peuvent pas avoir la même valeur d'index. Voici la syntaxe pour créer un index sur une table.
CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);
Vous pouvez utiliser une ou plusieurs colonnes pour créer un index. Par exemple, nous pouvons créer un index sur tutorials_inf en utilisant NAME_INDEX.
CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf(name);
Vous pouvez créer un index simple sur une table. Omettez simplement le mot clé UNIQUE de la requête pour créer un index simple. L'index simple permet de dupliquer les valeurs dans une table.
Si vous souhaitez indexer les valeurs d'une colonne dans l'ordre décroissant, vous pouvez ajouter le mot réservé DESC après le nom de la colonne.
mysql> CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf (name DESC);
Commande ALTER pour ajouter et supprimer INDEX
Il existe quatre types d'instructions pour ajouter des index à une table -
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) - Cette instruction ajoute une PRIMARY KEY, ce qui signifie que les valeurs indexées doivent être uniques et ne peuvent pas être NULL.
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) - Cette instruction crée un index pour lequel les valeurs doivent être uniques (à l'exception des valeurs NULL, qui peuvent apparaître plusieurs fois).
ALTER TABLE tbl_name ADD INDEX index_name (column_list) - Cela ajoute un index ordinaire dans lequel toute valeur peut apparaître plusieurs fois.
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) - Cela crée un index FULLTEXT spécial qui est utilisé à des fins de recherche de texte.
Voici l'exemple pour ajouter un index dans une table existante.
mysql> ALTER TABLE tutorials_inf ADD INDEX (id);
Vous pouvez supprimer n'importe quel INDEX en utilisant la clause DROP avec la commande ALTER. Essayez l'exemple suivant pour supprimer l'index créé ci-dessus.
mysql> ALTER TABLE tutorials_inf DROP INDEX (c);
Vous pouvez supprimer n'importe quel INDEX en utilisant la clause DROP avec la commande ALTER. Essayez l'exemple suivant pour supprimer l'index créé ci-dessus.
Commande ALTER pour ajouter et supprimer la CLÉ PRIMAIRE
Vous pouvez également ajouter une clé primaire de la même manière. Mais assurez-vous que la clé primaire fonctionne sur les colonnes, qui ne sont PAS NULL.
Voici l'exemple pour ajouter une clé primaire dans une table existante. Cela créera d'abord une colonne NOT NULL, puis l'ajoutera en tant que clé primaire.
mysql> ALTER TABLE tutorials_inf MODIFY id INT NOT NULL;
mysql> ALTER TABLE tutorials_inf ADD PRIMARY KEY (id);
Vous pouvez utiliser la commande ALTER pour supprimer une clé primaire comme suit:
mysql> ALTER TABLE tutorials_inf DROP PRIMARY KEY;
Pour supprimer un index qui n'est pas une CLÉ PRIMAIRE, vous devez spécifier le nom de l'index.
Affichage des informations INDEX
Vous pouvez utiliser la commande SHOW INDEX pour lister tous les index associés à une table. La sortie au format vertical (spécifié par \ G) est souvent utile avec cette instruction, pour éviter un long retour en ligne -
Essayez l'exemple suivant
mysql> SHOW INDEX FROM table_name\G
........
Les tables temporaires peuvent être très utiles dans certains cas pour conserver des données temporaires. La chose la plus importante à savoir pour les tables temporaires est qu'elles seront supprimées à la fin de la session cliente en cours.
Comme indiqué précédemment, les tables temporaires ne dureront que tant que la session est active. Si vous exécutez le code dans un script PHP, la table temporaire sera détruite automatiquement lorsque le script aura fini de s'exécuter. Si vous êtes connecté au serveur de base de données MySQL via le programme client MySQLi, la table temporaire existera jusqu'à ce que vous fermiez le client ou détruisiez manuellement la table.
Exemple
Voici un exemple montrant l'utilisation d'une table temporaire. Le même code peut être utilisé dans les scripts PHP en utilisantmysqli_query() fonction.
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)
Lorsque vous émettez une commande SHOW TABLES, votre table temporaire n'est pas répertoriée dans la liste. Maintenant, si vous vous déconnectez de la session MySQLi et que vous émettez une commande SELECT, vous ne trouverez aucune donnée disponible dans la base de données. Même votre table temporaire n'existerait pas non plus.
Suppression de tables temporaires
Par défaut, toutes les tables temporaires sont supprimées par MySQLi lorsque votre connexion à la base de données est interrompue. Si vous souhaitez les supprimer entre les deux, vous pouvez le faire en exécutant la commande DROP TABLE.
Voici l'exemple de suppression d'une table temporaire -
mysql> DROP TABLE SalesSummary;
mysql> SELECT * FROM SalesSummary;
ERROR 1146: Table 'TUTORIALS.SalesSummary' doesn't exist
Il peut y avoir une situation où vous avez besoin d'une copie exacte d'une table et CREATE TABLE ... SELECT ne convient pas à vos besoins car la copie doit inclure les mêmes index, valeurs par défaut, etc.
Vous pouvez gérer cette situation en suivant les étapes -
Utilisez SHOW CREATE TABLE pour obtenir une instruction CREATE TABLE qui spécifie la structure de la table source, les index et tout.
Modifiez l'instruction pour remplacer le nom de la table par celui de la table clone et exécutez l'instruction. De cette façon, vous aurez une table de clonage exacte.
Si vous avez également besoin de copier le contenu de la table, émettez également une instruction INSERT INTO ... SELECT.
Exemple
Essayez l'exemple suivant pour créer une table de clonage pour tutorials_inf.
Étape 1
Obtenez une structure complète sur la table.
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
Étape 2
Renommez cette table et créez une autre table.
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)
Étape 3
Après avoir exécuté l'étape 2, vous allez créer une table clone dans votre base de données. Si vous souhaitez copier des données de l'ancienne table, vous pouvez le faire à l'aide de l'instruction INSERT INTO ... SELECT.
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
Enfin, vous aurez une table de clonage exacte comme vous le souhaitiez.
Il y a trois informations que vous aimeriez avoir de MySQLi.
Information about the result of queries - Cela inclut le nombre d'enregistrements affectés par toute instruction SELECT, UPDATE ou DELETE.
Information about tables and databases - Cela comprend les informations relatives à la structure des tables et des bases de données.
Information about the MySQLi server - Cela comprend l'état actuel du serveur de base de données, le numéro de version, etc.
Il est très facile d'obtenir toutes ces informations à l'invite mysqli, mais tout en utilisant PERL ou des API PHP, nous devons appeler explicitement diverses API pour obtenir toutes ces informations. La section suivante vous montrera comment obtenir ces informations.
Obtention du nombre de lignes affectées par une requête
Exemple PERL
Dans les scripts DBI, le nombre de lignes affectées est renvoyé par do () ou par execute (), selon la manière dont vous exécutez la requête -
# 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);
Exemple PHP
En PHP, invoquez la fonction mysqli_affected_rows () pour savoir combien de lignes une requête a changé -
$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");
Liste des tables et des bases de données
Il est très facile de lister toutes les bases de données et tables disponibles avec le serveur de base de données. Votre résultat peut être nul si vous ne disposez pas de privilèges suffisants.
Outre la méthode que j'ai mentionnée ci-dessous, vous pouvez utiliser les requêtes SHOW TABLES ou SHOW DATABASES pour obtenir la liste des tables ou des bases de données en PHP ou en PERL.
Exemple PERL
# Get all the tables available in current database.
my @tables = $dbh->tables ( ); foreach $table (@tables ){
print "Table Name $table\n";
}
Exemple PHP
<?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();
?>
Obtention des métadonnées du serveur
Il y a les commandes suivantes dans MySQL qui peuvent être exécutées soit à l'invite mysql, soit en utilisant n'importe quel script comme PHP pour obtenir diverses informations importantes sur le serveur de base de données.
Sr.No. | Commande et description |
---|---|
1 | SELECT VERSION( ) Chaîne de version du serveur |
2 | SELECT DATABASE( ) Nom de la base de données actuelle (vide si aucun) |
3 | SELECT USER( ) Nom d'utilisateur actuel |
4 | SHOW STATUS Indicateurs d'état du serveur |
5 | SHOW VARIABLES Variables de configuration du serveur |
Une séquence est un ensemble d'entiers 1, 2, 3, ... qui sont générés dans l'ordre à la demande. Les séquences sont fréquemment utilisées dans les bases de données, car de nombreuses applications exigent que chaque ligne d'une table contienne une valeur unique et les séquences permettent de les générer facilement. Ce chapitre décrit comment utiliser les séquences dans MySQLi.
Utilisation de la colonne AUTO_INCREMENT
Le moyen le plus simple dans MySQLi d'utiliser les séquences est de définir une colonne comme AUTO_INCREMENT et de laisser le reste à MySQLi se charger.
Exemple
Essayez l'exemple suivant. Cela créera une table et après cela, il insérera quelques lignes dans cette table où il n'est pas nécessaire de donner un ID d'enregistrement car il est automatiquement incrémenté par MySQLi.
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)
Obtenir les valeurs AUTO_INCREMENT
LAST_INSERT_ID () est une fonction SQL, vous pouvez donc l'utiliser depuis n'importe quel client qui comprend comment émettre des instructions SQL. Sinon, les scripts PERL et PHP fournissent des fonctions exclusives pour récupérer la valeur auto incrémentée du dernier enregistrement.
Exemple PERL
Utilisez l'attribut mysql_insertid pour obtenir la valeur AUTO_INCREMENT générée par une requête. Cet attribut est accessible via un descripteur de base de données ou un descripteur d'instruction, selon la façon dont vous émettez la requête. L'exemple suivant le référence via le handle de base de données:
$dbh->do ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysqli_insertid};
Exemple PHP
Après avoir émis une requête qui génère une valeur AUTO_INCREMENT, récupérez la valeur en appelant mysql_insert_id () -
mysql_query ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id); $seq = mysqli_insert_id ($conn_id);
Renuméroter une séquence existante
Il peut y avoir un cas où vous avez supprimé de nombreux enregistrements d'une table et que vous souhaitez remettre en séquence tous les enregistrements. Cela peut être fait en utilisant une astuce simple, mais vous devez faire très attention à le faire si votre table a des jointures avec une autre table.
Si vous déterminez que le reséquencement d'une colonne AUTO_INCREMENT est inévitable, la façon de le faire est de supprimer la colonne de la table, puis de l'ajouter à nouveau. L'exemple suivant montre comment renuméroter les valeurs d'id dans la table d'insectes à l'aide de cette technique -
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);
Démarrage d'une séquence à une valeur particulière
Par défaut, MySQLi démarrera la séquence à partir de 1 mais vous pouvez également spécifier n'importe quel autre nombre au moment de la création de la table. Voici l'exemple où MySQLi démarrera la séquence à partir de 100.
mysql> CREATE TABLE tutorials_auto
-> (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
-> PRIMARY KEY (id),
-> name VARCHAR(30) NOT NULL,
-> );
Vous pouvez également créer la table, puis définir la valeur de séquence initiale avec ALTER TABLE.
mysql> ALTER TABLE tutorials_auto AUTO_INCREMENT = 100;
Les tableaux ou les ensembles de résultats contiennent parfois des enregistrements en double. Parfois, cela est autorisé, mais parfois il est nécessaire d'arrêter les enregistrements en double. Parfois, il est nécessaire d'identifier les enregistrements en double et de les supprimer de la table. Ce chapitre décrit comment éviter que des enregistrements en double ne se produisent dans une table et comment supprimer des enregistrements en double déjà existants.
Empêcher les doublons de se produire dans une table
Vous pouvez utiliser un PRIMARY KEY ou UNIQUEIndexer sur une table avec les champs appropriés pour arrêter les enregistrements en double. Prenons un exemple: la table suivante ne contient pas d'index ou de clé primaire de ce type, elle autoriserait donc les enregistrements en double pour le prénom et le nom.
CREATE TABLE person_tbl (
first_name CHAR(20),
last_name CHAR(20),
sex CHAR(10)
);
Pour empêcher la création de plusieurs enregistrements avec les mêmes valeurs de prénom et de nom dans cette table, ajoutez une CLÉ PRIMAIRE à sa définition. Lorsque vous faites cela, il est également nécessaire de déclarer que les colonnes indexées sont NOT NULL, car une PRIMARY KEY n'autorise pas les valeurs NULL -
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)
);
La présence d'un index unique dans une table provoque normalement une erreur si vous insérez un enregistrement dans la table qui duplique un enregistrement existant dans la ou les colonnes qui définissent l'index.
Utilisation INSERT IGNORE plutôt que INSERT. Si un enregistrement ne duplique pas un enregistrement existant, MySQLi l'insère comme d'habitude. Si l'enregistrement est un doublon, le mot clé IGNORE indique à MySQLi de le supprimer silencieusement sans générer d'erreur.
L'exemple suivant n'entraîne pas d'erreur et en même temps, il n'insère pas d'enregistrements en double.
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)
Utilisation REPLACEplutôt que INSÉRER. Si l'enregistrement est nouveau, il est inséré comme avec INSERT. S'il s'agit d'un doublon, le nouvel enregistrement remplace l'ancien -
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 et REPLACE doivent être choisis en fonction du comportement de gestion des doublons que vous souhaitez appliquer. INSERT IGNORE conserve le premier d'un ensemble d'enregistrements dupliqués et supprime le reste. REPLACE conserve le dernier d'une série de doublons et efface tous les précédents.
Une autre façon de renforcer l'unicité consiste à ajouter un index UNIQUE plutôt qu'une PRIMARY KEY à une table.
CREATE TABLE person_tbl (
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sex CHAR(10)
UNIQUE (last_name, first_name)
);
Compter et identifier les doublons
Voici la requête pour compter les enregistrements en double avec prénom et nom dans une table.
mysql> SELECT COUNT(*) as repetitions, last_name, first_name
-> FROM person_tbl
-> GROUP BY last_name, first_name
-> HAVING repetitions > 1;
Cette requête renverra une liste de tous les enregistrements en double dans la table person_tbl. En général, pour identifier les ensembles de valeurs qui sont dupliqués, procédez comme suit:
Déterminez quelles colonnes contiennent les valeurs qui peuvent être dupliquées.
Répertoriez ces colonnes dans la liste de sélection de colonnes, avec COUNT (*).
Répertoriez également les colonnes de la clause GROUP BY.
Ajoutez une clause HAVING qui élimine les valeurs uniques en exigeant que le nombre de groupes soit supérieur à un.
Élimination des doublons d'un résultat de requête:
Vous pouvez utiliser DISTINCT avec l'instruction SELECT pour découvrir les enregistrements uniques disponibles dans une table.
mysql> SELECT DISTINCT last_name, first_name
-> FROM person_tbl
-> ORDER BY last_name;
Une alternative à DISTINCT consiste à ajouter une clause GROUP BY qui nomme les colonnes que vous sélectionnez. Cela a pour effet de supprimer les doublons et de sélectionner uniquement les combinaisons uniques de valeurs dans les colonnes spécifiées -
mysql> SELECT last_name, first_name
-> FROM person_tbl
-> GROUP BY (last_name, first_name);
Suppression des doublons à l'aide du remplacement de table
Si vous avez des enregistrements en double dans une table et que vous souhaitez supprimer tous les enregistrements en double de cette table, voici la procédure -
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;
Un moyen simple de supprimer les enregistrements en double d'une table consiste à ajouter un INDEX ou PRIMAY KEY à cette table. Même si cette table est déjà disponible, vous pouvez utiliser cette technique pour supprimer les enregistrements en double et vous serez également en sécurité à l'avenir.
mysql> ALTER IGNORE TABLE person_tbl
-> ADD PRIMARY KEY (last_name, first_name);