MySQL - Guía rápida

¿Que es una base de datos?

Una base de datos es una aplicación separada que almacena una colección de datos. Cada base de datos tiene una o más API distintas para crear, acceder, administrar, buscar y replicar los datos que contiene.

También se pueden usar otros tipos de almacenes de datos, como archivos en el sistema de archivos o tablas hash grandes en la memoria, pero la obtención y escritura de datos no sería tan rápida y fácil con ese tipo de sistemas.

Hoy en día, utilizamos sistemas de administración de bases de datos relacionales (RDBMS) para almacenar y administrar un gran volumen de datos. Esto se denomina base de datos relacional porque todos los datos se almacenan en diferentes tablas y las relaciones se establecen utilizando claves primarias u otras claves conocidas comoForeign Keys.

UN Relational DataBase Management System (RDBMS) es un software que -

  • Le permite implementar una base de datos con tablas, columnas e índices.

  • Garantiza la Integridad Referencial entre filas de varias tablas.

  • Actualiza los índices automáticamente.

  • Interpreta una consulta SQL y combina información de varias tablas.

Terminología RDBMS

Antes de proceder a explicar el sistema de base de datos MySQL, revisemos algunas definiciones relacionadas con la base de datos.

  • Database - Una base de datos es una colección de tablas con datos relacionados.

  • Table- Una tabla es una matriz con datos. Una tabla en una base de datos parece una simple hoja de cálculo.

  • Column - Una columna (elemento de datos) contiene datos del mismo tipo, por ejemplo, el código postal de la columna.

  • Row - Una fila (= tupla, entrada o registro) es un grupo de datos relacionados, por ejemplo, los datos de una suscripción.

  • Redundancy - Almacenar datos dos veces, de forma redundante para hacer que el sistema sea más rápido.

  • Primary Key- Una clave primaria es única. Un valor clave no puede aparecer dos veces en una tabla. Con una clave, solo puede encontrar una fila.

  • Foreign Key - Una clave externa es el pin de enlace entre dos tablas.

  • Compound Key - Una clave compuesta (clave compuesta) es una clave que consta de varias columnas, porque una columna no es lo suficientemente única.

  • Index - Un índice en una base de datos se parece a un índice al final de un libro.

  • Referential Integrity - Integridad referencial asegura que un valor de clave externa siempre apunte a una fila existente.

Base de datos MySQL

MySQL es un RDBMS rápido y fácil de usar que se utiliza para muchas pequeñas y grandes empresas. MySQL está desarrollado, comercializado y respaldado por MySQL AB, que es una empresa sueca. MySQL se está volviendo tan popular debido a muchas buenas razones:

  • MySQL se publica bajo una licencia de código abierto. Entonces no tienes que pagar nada para usarlo.

  • MySQL es un programa muy poderoso por derecho propio. Maneja un gran subconjunto de la funcionalidad de los paquetes de bases de datos más costosos y poderosos.

  • MySQL utiliza una forma estándar del conocido lenguaje de datos SQL.

  • MySQL funciona en muchos sistemas operativos y con muchos lenguajes, incluidos PHP, PERL, C, C ++, JAVA, etc.

  • MySQL funciona muy rápido y funciona bien incluso con grandes conjuntos de datos.

  • MySQL es muy amigable con PHP, el lenguaje más apreciado para el desarrollo web.

  • MySQL admite grandes bases de datos, hasta 50 millones de filas o más en una tabla. El límite de tamaño de archivo predeterminado para una tabla es de 4 GB, pero puede aumentarlo (si su sistema operativo puede manejarlo) hasta un límite teórico de 8 millones de terabytes (TB).

  • MySQL es personalizable. La licencia GPL de código abierto permite a los programadores modificar el software MySQL para adaptarlo a sus propios entornos específicos.

Antes de que empieces

Antes de comenzar este tutorial, debe tener un conocimiento básico de la información cubierta en nuestros tutoriales de PHP y HTML.

Este tutorial se centra principalmente en el uso de MySQL en un entorno PHP. Muchos ejemplos dados en este tutorial serán útiles para los programadores de PHP.

Le recomendamos que consulte nuestro Tutorial de PHP como referencia.

Todas las descargas de MySQL se encuentran en Descargas de MySQL . Elija el número de versión deMySQL Community Server que se requiere junto con la plataforma en la que lo ejecutará.

Instalación de MySQL en Linux / UNIX

La forma recomendada de instalar MySQL en un sistema Linux es mediante RPM. MySQL AB ofrece los siguientes RPM para descargar en su sitio web:

  • MySQL - El servidor de base de datos MySQL administra las bases de datos y tablas, controla el acceso de los usuarios y procesa las consultas SQL.

  • MySQL-client - Programas cliente MySQL, que permiten conectarse e interactuar con el servidor.

  • MySQL-devel - Bibliotecas y archivos de encabezado que resultan útiles al compilar otros programas que usan MySQL.

  • MySQL-shared - Bibliotecas compartidas para el cliente MySQL.

  • MySQL-bench - Herramientas de pruebas de rendimiento y benchmark para el servidor de base de datos MySQL.

Los RPM de MySQL enumerados aquí están todos construidos en un SuSE Linux system, pero normalmente funcionarán en otras variantes de Linux sin dificultad.

Ahora, deberá seguir los pasos que se indican a continuación para continuar con la instalación:

  • Inicie sesión en el sistema utilizando el root usuario.

  • Cambie al directorio que contiene los RPM.

  • Instale el servidor de base de datos MySQL ejecutando el siguiente comando. Recuerde reemplazar el nombre del archivo en cursiva con el nombre del archivo de su RPM.

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

El comando anterior se encarga de instalar el servidor MySQL, crear un usuario de MySQL, crear la configuración necesaria e iniciar el servidor MySQL automáticamente.

Puede encontrar todos los binarios relacionados con MySQL en / usr / bin y / usr / sbin. Todas las tablas y bases de datos se crearán en el directorio / var / lib / mysql.

El siguiente cuadro de código tiene un paso opcional pero recomendado para instalar los RPM restantes de la misma manera:

[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

Instalación de MySQL en Windows

La instalación predeterminada en cualquier versión de Windows es ahora mucho más fácil de lo que solía ser, ya que MySQL ahora viene cuidadosamente empaquetado con un instalador. Simplemente descargue el paquete de instalación, descomprímalo en cualquier lugar y ejecute el archivo setup.exe.

El instalador setup.exe predeterminado lo guiará a través del proceso trivial y, de manera predeterminada, instalará todo en C: \ mysql.

Pruebe el servidor encendiéndolo desde el símbolo del sistema la primera vez. Vaya a la ubicación delmysqld server que probablemente sea C: \ mysql \ bin, y escriba -

mysqld.exe --console

NOTE - Si está en NT, tendrá que usar mysqld-nt.exe en lugar de mysqld.exe

Si todo salió bien, verá algunos mensajes sobre el inicio y InnoDB. De lo contrario, es posible que tenga un problema de permisos. Asegúrese de que el directorio que contiene sus datos sea accesible para cualquier usuario (probablemente MySQL) bajo el que se ejecutan los procesos de la base de datos.

MySQL no se agregará al menú de inicio, y tampoco existe una forma de GUI particularmente agradable para detener el servidor. Por lo tanto, si tiende a iniciar el servidor haciendo doble clic en el ejecutable mysqld, debe recordar detener el proceso manualmente utilizando mysqladmin, Lista de tareas, Administrador de tareas u otros medios específicos de Windows.

Verificación de la instalación de MySQL

Después de que MySQL se haya instalado con éxito, las tablas base se han inicializado y el servidor se ha iniciado: puede verificar que todo funciona como debería a través de algunas pruebas simples.

Utilice la utilidad mysqladmin para obtener el estado del servidor

Utilizar mysqladminbinary para comprobar la versión del servidor. Este binario estaría disponible en / usr / bin en linux y en C: \ mysql \ bin en windows.

[root@host]# mysqladmin --version

Producirá el siguiente resultado en Linux. Puede variar según su instalación:

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

Si no recibe dicho mensaje, entonces puede haber algún problema en su instalación y necesitará ayuda para solucionarlo.

Ejecute comandos SQL simples usando el cliente MySQL

Puede conectarse a su servidor MySQL a través del cliente MySQL y utilizando el mysqlmando. En este momento, no es necesario que proporcione ninguna contraseña, ya que de forma predeterminada estará en blanco.

Puedes usar el siguiente comando:

[root@host]# mysql

Debería ser recompensado con un mensaje mysql>. Ahora, está conectado al servidor MySQL y puede ejecutar todos los comandos SQL en el indicador mysql> de la siguiente manera:

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

Pasos posteriores a la instalación

MySQL se envía con una contraseña en blanco para el usuario raíz de MySQL. Tan pronto como haya instalado correctamente la base de datos y el cliente, debe establecer una contraseña de root como se indica en el siguiente bloque de código:

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

Ahora, para hacer una conexión a su servidor MySQL, tendría que usar el siguiente comando:

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

Los usuarios de UNIX también querrán poner su directorio MySQL en su PATH, por lo que no tendrá que seguir escribiendo la ruta completa cada vez que quiera usar el cliente de línea de comandos.

Para bash, sería algo como:

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

Ejecutar MySQL en el momento del arranque

Si desea ejecutar el servidor MySQL en el momento del arranque, asegúrese de tener la siguiente entrada en el archivo /etc/rc.local.

/etc/init.d/mysqld start

Además, debe tener el binario mysqld en el directorio /etc/init.d/.

Ejecutar y apagar el servidor MySQL

Primero verifique si su servidor MySQL se está ejecutando o no. Puede usar el siguiente comando para verificarlo:

ps -ef | grep mysqld

Si su MySql se está ejecutando, verá mysqldproceso enumerado en su resultado. Si el servidor no se está ejecutando, puede iniciarlo con el siguiente comando:

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

Ahora, si desea cerrar un servidor MySQL que ya se está ejecutando, puede hacerlo usando el siguiente comando:

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

Configurar una cuenta de usuario de MySQL

Para agregar un nuevo usuario a MySQL, solo necesita agregar una nueva entrada al user tabla en la base de datos mysql.

El siguiente programa es un ejemplo de cómo agregar un nuevo usuario guest con privilegios SELECT, INSERT y UPDATE con la contraseña guest123; la consulta SQL es -

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)

Al agregar un nuevo usuario, recuerde cifrar la nueva contraseña usando la función PASSWORD () proporcionada por MySQL. Como puede ver en el ejemplo anterior, la contraseña mypass está cifrada en 6f8c114b58f2ce9e.

Observe la declaración FLUSH PRIVILEGES. Esto le dice al servidor que vuelva a cargar las tablas de concesión. Si no lo usa, no podrá conectarse a MySQL con la nueva cuenta de usuario al menos hasta que se reinicie el servidor.

También puede especificar otros privilegios para un nuevo usuario estableciendo los valores de las siguientes columnas en la tabla de usuarios en 'Y' al ejecutar la consulta INSERT o puede actualizarlos más tarde usando la consulta 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

Otra forma de agregar una cuenta de usuario es mediante el comando GRANT SQL. El siguiente ejemplo agregará usuariozara con contraseña zara123 para una base de datos en particular, que se denomina como 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';

Esto también creará una entrada en la tabla de la base de datos MySQL llamada como user.

NOTE - MySQL no finaliza un comando hasta que le da un punto y coma (;) al final del comando SQL.

La configuración del archivo /etc/my.cnf

En la mayoría de los casos, no debe tocar este archivo. De forma predeterminada, tendrá las siguientes entradas:

[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

Aquí, puede especificar un directorio diferente para el registro de errores; de lo contrario, no debe cambiar ninguna entrada en esta tabla.

Comando administrativo MySQL

Aquí está la lista de los comandos importantes de MySQL, que usará de vez en cuando para trabajar con la base de datos MySQL:

  • USE Databasename - Esto se utilizará para seleccionar una base de datos en el área de trabajo de MySQL.

  • SHOW DATABASES - Muestra las bases de datos a las que puede acceder MySQL DBMS.

  • SHOW TABLES - Muestra las tablas en la base de datos una vez que se ha seleccionado una base de datos con el comando de uso.

  • SHOW COLUMNS FROM tablename: Muestra los atributos, tipos de atributos, información clave, si se permite NULL, valores predeterminados y otra información para una tabla.

  • SHOW INDEX FROM tablename - Presenta los detalles de todos los índices de la tabla, incluida la CLAVE PRIMARIA.

  • SHOW TABLE STATUS LIKE tablename\G - Informa detalles del rendimiento y estadísticas de MySQL DBMS.

En el próximo capítulo, analizaremos cómo se usa la sintaxis de PHP en MySQL.

MySQL funciona muy bien en combinación con varios lenguajes de programación como PERL, C, C ++, JAVA y PHP. De estos lenguajes, PHP es el más popular debido a sus capacidades de desarrollo de aplicaciones web.

Este tutorial se centra principalmente en el uso de MySQL en un entorno PHP. Si está interesado en MySQL con PERL, puede considerar leer el Tutorial de PERL .

PHP proporciona varias funciones para acceder a la base de datos MySQL y manipular los registros de datos dentro de la base de datos MySQL. Necesitaría llamar a las funciones PHP de la misma manera que llama a cualquier otra función PHP.

Las funciones de PHP para usar con MySQL tienen el siguiente formato general:

mysql_function(value,value,...);

La segunda parte del nombre de la función es específica de la función, generalmente una palabra que describe lo que hace la función. Las siguientes son dos de las funciones que usaremos en nuestro tutorial:

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

El siguiente ejemplo muestra una sintaxis genérica de PHP para llamar a cualquier función de MySQL.

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

A partir del siguiente capítulo, veremos todas las funciones importantes de MySQL junto con PHP.

Conexión MySQL usando MySQL Binary

Puede establecer la base de datos MySQL utilizando el mysql binario en el símbolo del sistema.

Ejemplo

Aquí hay un ejemplo simple para conectarse al servidor MySQL desde el símbolo del sistema:

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

Esto le dará el símbolo del sistema mysql> donde podrá ejecutar cualquier comando SQL. A continuación se muestra el resultado del comando anterior:

El siguiente bloque de código muestra el resultado del código anterior:

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.

En el ejemplo anterior, hemos utilizado rootcomo usuario, pero también puede utilizar cualquier otro usuario. Cualquier usuario podrá realizar todas las operaciones de SQL, que le están permitidas.

Puede desconectarse de la base de datos MySQL en cualquier momento utilizando el exit comando en mysql> indicador.

mysql> exit
Bye

Conexión MySQL usando PHP Script

PHP proporciona mysql_connect()función para abrir una conexión a la base de datos. Esta función toma cinco parámetros y devuelve un identificador de enlace MySQL en caso de éxito o FALSO en caso de error.

Sintaxis

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

No Señor. Descripción de parámetros
1

server

Opcional: el nombre de host que ejecuta el servidor de base de datos. Si no se especifica, el valor predeterminado serálocalhost:3306.

2

user

Opcional: el nombre de usuario que accede a la base de datos. Si no se especifica, el valor predeterminado será el nombre del usuario propietario del proceso del servidor.

3

passwd

Opcional: la contraseña del usuario que accede a la base de datos. Si no se especifica, el valor predeterminado será una contraseña vacía.

4

new_link

Opcional: si se realiza una segunda llamada a mysql_connect () con los mismos argumentos, no se establecerá una nueva conexión; en su lugar, se devolverá el identificador de la conexión ya abierta.

5

client_flags

Opcional: una combinación de las siguientes constantes:

  • MYSQL_CLIENT_SSL: utilice cifrado SSL.

  • MYSQL_CLIENT_COMPRESS: usa el protocolo de compresión.

  • MYSQL_CLIENT_IGNORE_SPACE: permite espacio después de los nombres de las funciones.

  • MYSQL_CLIENT_INTERACTIVE: permita un tiempo de espera interactivo segundos de inactividad antes de cerrar la conexión.

Puede desconectarse de la base de datos MySQL en cualquier momento utilizando otra función PHP mysql_close(). Esta función toma un solo parámetro, que es una conexión devuelta por elmysql_connect() función.

Sintaxis

bool mysql_close ( resource $link_identifier );

Si no se especifica un recurso, se cierra la última base de datos abierta. Esta función devuelve verdadero si cierra la conexión correctamente; de ​​lo contrario, devuelve falso.

Ejemplo

Pruebe el siguiente ejemplo para conectarse a un servidor MySQL:

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

Crear base de datos usando mysqladmin

Necesitaría privilegios especiales para crear o eliminar una base de datos MySQL. Entonces, asumiendo que tiene acceso al usuario root, puede crear cualquier base de datos usando mysqlmysqladmin binario.

Ejemplo

Aquí hay un ejemplo simple para crear una base de datos llamada TUTORIALS -

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

Esto creará una base de datos MySQL llamada TUTORIALES.

Crear una base de datos usando PHP Script

Usos de PHP mysql_queryfunción para crear o eliminar una base de datos MySQL. Esta función toma dos parámetros y devuelve VERDADERO en caso de éxito o FALSO en caso de error.

Sintaxis

bool mysql_query( sql, connection );

No Señor. Descripción de parámetros
1

sql

Obligatorio: consulta SQL para crear o eliminar una base de datos MySQL

2

connection

Opcional: si no se especifica, se utilizará la última conexión abierta por mysql_connect.

Ejemplo

El siguiente ejemplo para crear una base de datos:

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

Suelta una base de datos usando mysqladmin

Necesitaría privilegios especiales para crear o eliminar una base de datos MySQL. Entonces, asumiendo que tiene acceso al usuario root, puede crear cualquier base de datos usando mysqlmysqladmin binario.

Tenga cuidado al eliminar cualquier base de datos porque perderá todos los datos disponibles en su base de datos.

Aquí hay un ejemplo para eliminar una base de datos (TUTORIALES) creada en el capítulo anterior:

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

Esto le dará una advertencia y confirmará si realmente desea eliminar esta base de datos o no.

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

Suelta la base de datos usando PHP Script

Usos de PHP mysql_queryfunción para crear o eliminar una base de datos MySQL. Esta función toma dos parámetros y devuelve VERDADERO en caso de éxito o FALSO en caso de error.

Sintaxis

bool mysql_query( sql, connection );

No Señor Descripción de parámetros
1

sql

Obligatorio: consulta SQL para crear o eliminar una base de datos MySQL

2

connection

Opcional: si no se especifica, se utilizará la última conexión abierta por mysql_connect.

Ejemplo

Pruebe el siguiente ejemplo para eliminar una base de datos:

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

WARNING- Al eliminar una base de datos utilizando el script PHP, no le solicita ninguna confirmación. Así que tenga cuidado al eliminar una base de datos MySQL.

Una vez que se conecte con el servidor MySQL, es necesario seleccionar una base de datos para trabajar. Esto se debe a que puede haber más de una base de datos disponible con MySQL Server.

Seleccionar la base de datos MySQL desde el símbolo del sistema

Es muy sencillo seleccionar una base de datos desde el indicador mysql>. Puedes usar el comando SQLuse para seleccionar una base de datos.

Ejemplo

Aquí hay un ejemplo para seleccionar una base de datos llamada TUTORIALS -

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

Ahora, ha seleccionado la base de datos TUTORIALS y todas las operaciones posteriores se realizarán en la base de datos TUTORIALS.

NOTE- Todos los nombres de bases de datos, nombres de tablas, nombres de campos de tablas distinguen entre mayúsculas y minúsculas. Por lo tanto, tendría que usar los nombres correctos al dar cualquier comando SQL.

Seleccionar una base de datos MySQL usando un script PHP

PHP proporciona función mysql_select_dbpara seleccionar una base de datos. Devuelve VERDADERO en caso de éxito o FALSO en caso de error.

Sintaxis

bool mysql_select_db( db_name, connection );

No Señor. Descripción de parámetros
1

db_name

Obligatorio: se debe seleccionar el nombre de la base de datos MySQL

2

connection

Opcional: si no se especifica, se utilizará la última conexión abierta por mysql_connect.

Ejemplo

A continuación, se muestra un ejemplo que muestra cómo seleccionar una base de datos.

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

Definir correctamente los campos en una tabla es importante para la optimización general de su base de datos. Debe usar solo el tipo y tamaño de campo que realmente necesita usar. Por ejemplo, no defina un campo de 10 caracteres de ancho, si sabe que solo va a utilizar 2 caracteres. Este tipo de campos (o columnas) también se denominan tipos de datos, después de latype of data almacenará en esos campos.

MySQL usa muchos tipos de datos diferentes divididos en tres categorías:

  • Numeric
  • Fecha y hora
  • Tipos de cadenas.

Analicemos ahora en detalle.

Tipos de datos numéricos

MySQL utiliza todos los tipos de datos numéricos ANSI SQL estándar, por lo que si llega a MySQL desde un sistema de base de datos diferente, estas definiciones le resultarán familiares.

La siguiente lista muestra los tipos de datos numéricos comunes y sus descripciones:

  • INT- Un número entero de tamaño normal que puede estar con o sin signo. Si está firmado, el rango permitido es de -2147483648 a 2147483647. Si no está firmado, el rango permitido es de 0 a 4294967295. Puede especificar un ancho de hasta 11 dígitos.

  • TINYINT- Un número entero muy pequeño que puede estar con o sin signo. Si está firmado, el rango permitido es de -128 a 127. Si no está firmado, el rango permitido es de 0 a 255. Puede especificar un ancho de hasta 4 dígitos.

  • SMALLINT- Un pequeño entero que puede estar firmado o no firmado. Si está firmado, el rango permitido es de -32768 a 32767. Si no está firmado, el rango permitido es de 0 a 65535. Puede especificar un ancho de hasta 5 dígitos.

  • MEDIUMINT- Un entero de tamaño mediano que puede estar firmado o no firmado. Si está firmado, el rango permitido es de -8388608 a 8388607. Si no está firmado, el rango permitido es de 0 a 16777215. Puede especificar un ancho de hasta 9 dígitos.

  • BIGINT- Un entero grande que puede estar firmado o no firmado. Si está firmado, el rango permitido es de -9223372036854775808 a 9223372036854775807. Si no está firmado, el rango permitido es de 0 a 18446744073709551615. Puede especificar un ancho de hasta 20 dígitos.

  • FLOAT(M,D)- Un número de punto flotante que no se puede anular. Puede definir la longitud de visualización (M) y el número de decimales (D). Esto no es obligatorio y estará predeterminado en 10,2, donde 2 es el número de decimales y 10 es el número total de dígitos (incluidos los decimales). La precisión decimal puede llegar a 24 lugares para un FLOAT.

  • DOUBLE(M,D)- Un número de punto flotante de doble precisión que no puede estar sin signo. Puede definir la longitud de visualización (M) y el número de decimales (D). Esto no es obligatorio y estará predeterminado en 16,4, donde 4 es el número de decimales. La precisión decimal puede llegar a 53 lugares para un DOBLE. REAL es sinónimo de DOBLE.

  • DECIMAL(M,D)- Un número de punto flotante descomprimido que no se puede anular. En los decimales descomprimidos, cada decimal corresponde a un byte. Es necesario definir la longitud de la pantalla (M) y el número de decimales (D). NUMERIC es sinónimo de DECIMAL.

Tipos de fecha y hora

Los tipos de datos de fecha y hora de MySQL son los siguientes:

  • DATE- Una fecha en formato AAAA-MM-DD, entre 1000-01-01 y 9999-12-31. Por ejemplo 30 de diciembre º , 1973 se almacena como 12/30/1973.

  • DATETIME- Una combinación de fecha y hora en formato AAAA-MM-DD HH: MM: SS, entre 1000-01-01 00:00:00 y 9999-12-31 23:59:59. Por ejemplo, las 3:30 de la tarde de diciembre 30 de XX de 1973 se almacenaría como 30/12/1973 15:30:00.

  • TIMESTAMP- Una marca de tiempo entre la medianoche 1 DE ENERO st , 1970 y en algún momento de 2037. Esto parece el formato DATETIME anterior, sólo que sin los guiones entre los números; 3:30 de la tarde de diciembre 30 de XX de 1973 se almacenaría como 19731230153000 (AAAAMMDDHHMMSS).

  • TIME - Almacena la hora en formato HH: MM: SS.

  • YEAR(M)- Almacena un año en formato de 2 o 4 dígitos. Si la longitud se especifica como 2 (por ejemplo, YEAR (2)), YEAR puede estar entre 1970 y 2069 (70 a 69). Si la longitud se especifica como 4, entonces YEAR puede ser de 1901 a 2155. La longitud predeterminada es 4.

Tipos de cadenas

Aunque los tipos numéricos y de fecha son divertidos, la mayoría de los datos que almacenará estarán en formato de cadena. Esta lista describe los tipos de datos de cadenas comunes en MySQL.

  • CHAR(M)- Una cadena de longitud fija entre 1 y 255 caracteres de longitud (por ejemplo CHAR (5)), rellenada a la derecha con espacios hasta la longitud especificada cuando se almacena. No es necesario definir una longitud, pero el valor predeterminado es 1.

  • VARCHAR(M)- Una cadena de longitud variable entre 1 y 255 caracteres. Por ejemplo, VARCHAR (25). Debe definir una longitud al crear un campo VARCHAR.

  • BLOB or TEXT- Un campo con una longitud máxima de 65535 caracteres. Los BLOB son "objetos grandes binarios" y se utilizan para almacenar grandes cantidades de datos binarios, como imágenes u otros tipos de archivos. Los campos definidos como TEXTO también contienen grandes cantidades de datos. La diferencia entre los dos es que los ordenamientos y las comparaciones de los datos almacenados soncase sensitive en BLOB y son not case sensitiveen los campos de TEXTO. No especificas una longitud con BLOB o TEXT.

  • TINYBLOB or TINYTEXT- Una columna BLOB o TEXTO con una longitud máxima de 255 caracteres. No especifica una longitud con TINYBLOB o TINYTEXT.

  • MEDIUMBLOB or MEDIUMTEXT- Una columna BLOB o TEXTO con una longitud máxima de 16777215 caracteres. No especifica una longitud con MEDIUMBLOB o MEDIUMTEXT.

  • LONGBLOB or LONGTEXT- Una columna BLOB o TEXT con una longitud máxima de 4294967295 caracteres. No especifica una longitud con LONGBLOB o LONGTEXT.

  • ENUM- Una enumeración, que es un término elegante para la lista. Al definir un ENUM, está creando una lista de elementos de los que se debe seleccionar el valor (o puede ser NULL). Por ejemplo, si desea que su campo contenga "A" o "B" o "C", debería definir su ENUM como ENUM ('A', 'B', 'C') y solo esos valores (o NULL) podría poblar ese campo.

En el próximo capítulo, discutiremos cómo crear tablas en MySQL.

Para empezar, el comando de creación de tablas requiere los siguientes detalles:

  • Nombre de la mesa
  • Nombre de los campos
  • Definiciones para cada campo

Sintaxis

Aquí hay una sintaxis SQL genérica para crear una tabla MySQL:

CREATE TABLE table_name (column_name column_type);

Ahora, crearemos la siguiente tabla en el TUTORIALS base de datos.

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

Aquí, algunos elementos necesitan explicación:

  • Atributo de campo NOT NULLse está utilizando porque no queremos que este campo sea NULL. Entonces, si un usuario intenta crear un registro con un valor NULL, entonces MySQL generará un error.

  • Atributo de campo AUTO_INCREMENT le dice a MySQL que siga adelante y agregue el siguiente número disponible al campo de identificación.

  • Palabra clave PRIMARY KEYse utiliza para definir una columna como clave principal. Puede utilizar varias columnas separadas por una coma para definir una clave principal.

Crear tablas desde el símbolo del sistema

Es fácil crear una tabla MySQL desde el indicador mysql>. Usarás el comando SQLCREATE TABLE para crear una mesa.

Ejemplo

Aquí hay un ejemplo, que creará tutorials_tbl -

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

NOTE - MySQL no finaliza un comando hasta que le da un punto y coma (;) al final del comando SQL.

Creando tablas usando PHP Script

Para crear una nueva tabla en cualquier base de datos existente, necesitaría usar la función PHP mysql_query(). Pasará su segundo argumento con un comando SQL adecuado para crear una tabla.

Ejemplo

El siguiente programa es un ejemplo para crear una tabla usando un script PHP:

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

Es muy fácil eliminar una tabla MySQL existente, pero debe tener mucho cuidado al eliminar cualquier tabla existente porque los datos perdidos no se recuperarán después de eliminar una tabla.

Sintaxis

Aquí hay una sintaxis SQL genérica para eliminar una tabla MySQL:

DROP TABLE table_name ;

Soltar tablas desde el símbolo del sistema

Para eliminar tablas desde el símbolo del sistema, debemos ejecutar el comando DROP TABLE SQL en el símbolo del sistema mysql>.

Ejemplo

El siguiente programa es un ejemplo que elimina el tutorials_tbl -

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

Eliminación de tablas usando PHP Script

Para eliminar una tabla existente en cualquier base de datos, necesitaría usar la función PHP mysql_query(). Pasará su segundo argumento con un comando SQL adecuado para eliminar una tabla.

Ejemplo

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

Para insertar datos en una tabla MySQL, necesitaría usar SQL INSERT INTOmando. Puede insertar datos en la tabla MySQL usando el indicador mysql> o usando cualquier script como PHP.

Sintaxis

Aquí hay una sintaxis SQL genérica del comando INSERT INTO para insertar datos en la tabla MySQL:

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

Para insertar tipos de datos de cadena, es necesario mantener todos los valores entre comillas simples o dobles. Por ejemplo"value".

Insertar datos desde el símbolo del sistema

Para insertar datos desde el símbolo del sistema, usaremos el comando SQL INSERT INTO para insertar datos en la tabla MySQL tutorials_tbl.

Ejemplo

El siguiente ejemplo creará 3 registros en tutorials_tbl mesa -

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

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

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

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

NOTE- Tenga en cuenta que todos los signos de flecha (->) no forman parte del comando SQL. Están indicando una nueva línea y son creados automáticamente por el indicador de MySQL mientras se presiona la tecla Intro sin poner un punto y coma al final de cada línea del comando.

En el ejemplo anterior, no hemos proporcionado un tutorial_id porque en el momento de la creación de la tabla, habíamos dado la opción AUTO_INCREMENT para este campo. Entonces MySQL se encarga de insertar estos ID automáticamente. Aquí,NOW() es una función de MySQL, que devuelve la fecha y hora actuales.

Insertar datos usando un script PHP

Puede usar el mismo comando SQL INSERT INTO en la función PHP mysql_query() para insertar datos en una tabla MySQL.

Ejemplo

Este ejemplo tomará tres parámetros del usuario y los insertará en la tabla MySQL:

<html>

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

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

Al hacer una inserción de datos, es mejor usar la función get_magic_quotes_gpc()para comprobar si la configuración actual de la cita mágica está establecida o no. Si esta función devuelve falso, entonces use la funciónaddslashes() para agregar barras antes de las comillas.

Puede poner muchas validaciones para verificar si los datos ingresados ​​son correctos o no y puede tomar la acción apropiada.

El SQL SELECTEl comando se usa para obtener datos de la base de datos MySQL. Puede usar este comando en el indicador mysql> así como en cualquier script como PHP.

Sintaxis

Aquí está la sintaxis SQL genérica del comando SELECT para obtener datos de la tabla MySQL:

SELECT field1, field2,...fieldN 
FROM table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • Puede usar una o más tablas separadas por comas para incluir varias condiciones usando una cláusula WHERE, pero la cláusula WHERE es una parte opcional del comando SELECT.

  • Puede buscar uno o más campos en un solo comando SELECT.

  • Puede especificar asterisco (*) en lugar de campos. En este caso, SELECT devolverá todos los campos.

  • Puede especificar cualquier condición utilizando la cláusula WHERE.

  • Puede especificar un desplazamiento usando OFFSETdesde donde SELECT comenzará a devolver registros. De forma predeterminada, la compensación comienza en cero.

  • Puede limitar el número de devoluciones utilizando el LIMIT atributo.

Obtener datos de un símbolo del sistema

Esto usará el comando SQL SELECT para obtener datos de la tabla MySQL tutorials_tbl.

Ejemplo

El siguiente ejemplo devolverá todos los registros del tutorials_tbl mesa -

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

mysql>

Obtención de datos mediante un script PHP

Puede usar el mismo comando SQL SELECT en una función PHP mysql_query(). Esta función se usa para ejecutar el comando SQL y luego otra función PHPmysql_fetch_array()se puede utilizar para recuperar todos los datos seleccionados. Esta función devuelve la fila como una matriz asociativa, una matriz numérica o ambas. Esta función devuelve FALSE si no hay más filas.

El siguiente programa es un ejemplo simple que mostrará cómo buscar / mostrar registros del tutorials_tbl mesa.

Ejemplo

El siguiente bloque de código mostrará todos los registros de la tabla tutorials_tbl.

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

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

El contenido de las filas se asigna a la variable $ fila y luego se imprimen los valores en esa fila.

NOTE - Recuerde siempre poner corchetes cuando desee insertar un valor de matriz directamente en una cadena.

En el ejemplo anterior, la constante MYSQL_ASSOC se utiliza como segundo argumento de la función PHP mysql_fetch_array(), para que devuelva la fila como una matriz asociativa. Con una matriz asociativa, puede acceder al campo usando su nombre en lugar de usar el índice.

PHP proporciona otra función llamada mysql_fetch_assoc(), que también devuelve la fila como una matriz asociativa.

Ejemplo

El siguiente ejemplo muestra todos los registros de la tabla tutorial_tbl usando la función mysql_fetch_assoc ().

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

También puedes usar la constante MYSQL_NUMcomo segundo argumento de la función PHP mysql_fetch_array (). Esto hará que la función devuelva una matriz con el índice numérico.

Ejemplo

Pruebe el siguiente ejemplo para mostrar todos los registros de la tabla tutorials_tbl usando el argumento MYSQL_NUM.

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

Los tres ejemplos anteriores producirán el mismo resultado.

Liberando memoria

Es una buena práctica liberar la memoria del cursor al final de cada instrucción SELECT. Esto se puede hacer usando la función PHPmysql_free_result(). El siguiente programa es un ejemplo para mostrar cómo debe usarse.

Ejemplo

Pruebe el siguiente ejemplo:

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

Mientras busca datos, puede escribir un código tan complejo como desee, pero el procedimiento seguirá siendo el mismo que se mencionó anteriormente.

Hemos visto el SQL SELECTcomando para obtener datos de una tabla MySQL. Podemos usar una cláusula condicional llamadaWHERE Clausepara filtrar los resultados. Usando esta cláusula WHERE, podemos especificar un criterio de selección para seleccionar los registros requeridos de una tabla.

Sintaxis

El siguiente bloque de código tiene una sintaxis SQL genérica del comando SELECT con la cláusula WHERE para obtener datos de la tabla MySQL:

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • Puede usar una o más tablas separadas por una coma para incluir varias condiciones usando una cláusula WHERE, pero la cláusula WHERE es una parte opcional del comando SELECT.

  • Puede especificar cualquier condición utilizando la cláusula WHERE.

  • Puede especificar más de una condición utilizando el AND o la OR operadores.

  • Se puede utilizar una cláusula WHERE junto con el comando DELETE o UPDATE SQL también para especificar una condición.

los WHERE la cláusula funciona como una if conditionen cualquier lenguaje de programación. Esta cláusula se utiliza para comparar el valor dado con el valor del campo disponible en una tabla MySQL. Si el valor dado desde fuera es igual al valor del campo disponible en la tabla MySQL, entonces devuelve esa fila.

Aquí está la lista de operadores, que se puede utilizar con el WHERE cláusula.

Suponga que el campo A tiene 10 y el campo B tiene 20, entonces -

Operador Descripción Ejemplo
= Comprueba si los valores de los dos operandos son iguales o no; en caso afirmativo, la condición se cumple. (A = B) no es cierto.
! = Comprueba si los valores de los dos operandos son iguales o no, si los valores no son iguales, la condición se vuelve verdadera. (A! = B) es cierto.
> Comprueba si el valor del operando izquierdo es mayor que el valor del operando derecho; si es así, la condición se cumple. (A> B) no es cierto.
< Comprueba si el valor del operando izquierdo es menor que el valor del operando derecho; si es así, la condición se cumple. (A <B) es cierto.
> = Comprueba si el valor del operando izquierdo es mayor o igual que el valor del operando derecho; si es así, la condición se convierte en verdadera. (A> = B) no es cierto.
<= Comprueba si el valor del operando izquierdo es menor o igual que el valor del operando derecho; si es así, la condición se cumple. (A <= B) es cierto.

La cláusula WHERE es muy útil cuando desea obtener las filas seleccionadas de una tabla, especialmente cuando usa la MySQL Join. Las uniones se tratan en otro capítulo.

Es una práctica común buscar registros utilizando la Primary Key para hacer la búsqueda más rápida.

Si la condición dada no coincide con ningún registro de la tabla, la consulta no devolverá ninguna fila.

Obteniendo datos desde el símbolo del sistema

Esto usará el comando SQL SELECT con la cláusula WHERE para recuperar los datos seleccionados de la tabla MySQL - tutorials_tbl.

Ejemplo

El siguiente ejemplo devolverá todos los registros del tutorials_tbl tabla cuyo nombre de autor es Sanjay.

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

mysql>

A menos que realice una LIKEcomparación en una cadena, la comparación no distingue entre mayúsculas y minúsculas. Puede hacer que su búsqueda distinga entre mayúsculas y minúsculas utilizando elBINARY palabra clave de la siguiente manera:

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

mysql>

Obtención de datos mediante un script PHP

Puede usar el mismo comando SQL SELECT con la CLAUSULA WHERE en la función PHP mysql_query(). Esta función se usa para ejecutar el comando SQL y luego otra función PHPmysql_fetch_array()se puede utilizar para recuperar todos los datos seleccionados. Esta función devuelve una fila como una matriz asociativa, una matriz numérica o ambas. Esta función devuelve FALSE si no hay más filas.

Ejemplo

El siguiente ejemplo devolverá todos los registros del tutorials_tbl tabla cuyo nombre de autor es Sanjay -

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

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

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

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

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

Puede haber un requisito en el que los datos existentes en una tabla MySQL deban modificarse. Puede hacerlo utilizando SQLUPDATEmando. Esto modificará cualquier valor de campo de cualquier tabla MySQL.

Sintaxis

El siguiente bloque de código tiene una sintaxis SQL genérica del comando UPDATE para modificar los datos en la tabla MySQL:

UPDATE table_name SET field1 = new-value1, field2 = new-value2
[WHERE Clause]
  • Puede actualizar uno o más campos por completo.
  • Puede especificar cualquier condición utilizando la cláusula WHERE.
  • Puede actualizar los valores en una sola tabla a la vez.

La cláusula WHERE es muy útil cuando desea actualizar las filas seleccionadas en una tabla.

Actualización de datos desde el símbolo del sistema

Esto usará el comando SQL UPDATE con la cláusula WHERE para actualizar los datos seleccionados en la tabla MySQL tutorials_tbl.

Ejemplo

El siguiente ejemplo actualizará el tutorial_title campo para un registro que tenga el tutorial_id como 3.

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

mysql> use TUTORIALS;
Database changed

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

mysql>

Actualización de datos mediante un script PHP

Puede usar el comando SQL UPDATE con o sin la CLAUSULA WHERE en la función PHP - mysql_query(). Esta función ejecutará el comando SQL de una manera similar a como se ejecuta en el indicador mysql>.

Ejemplo

El siguiente ejemplo para actualizar el tutorial_title campo para un registro que tenga tutorial_id como 3.

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

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

Si desea eliminar un registro de cualquier tabla MySQL, puede usar el comando SQL DELETE FROM. Puede usar este comando en el indicador mysql> así como en cualquier script como PHP.

Sintaxis

El siguiente bloque de código tiene una sintaxis SQL genérica del comando DELETE para eliminar datos de una tabla MySQL.

DELETE FROM table_name [WHERE Clause]
  • Si no se especifica la cláusula WHERE, todos los registros se eliminarán de la tabla MySQL dada.

  • Puede especificar cualquier condición utilizando la cláusula WHERE.

  • Puede eliminar registros en una sola tabla a la vez.

La cláusula WHERE es muy útil cuando desea eliminar filas seleccionadas en una tabla.

Eliminar datos del símbolo del sistema

Esto usará el comando SQL DELETE con la cláusula WHERE para eliminar los datos seleccionados en la tabla MySQL - tutorials_tbl.

Ejemplo

El siguiente ejemplo eliminará un registro de tutorial_tbl cuyo tutorial_id es 3.

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

mysql> use TUTORIALS;
Database changed

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

mysql>

Eliminar datos usando un script PHP

Puede usar el comando SQL DELETE con o sin la CLAUSULA WHERE en la función PHP - mysql_query(). Esta función ejecutará el comando SQL de la misma manera que se ejecuta en el indicador mysql>.

Ejemplo

Pruebe el siguiente ejemplo para eliminar un registro de tutorial_tbl cuyo tutorial_id es 3.

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

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

Hemos visto el SQL SELECTcomando para obtener datos de la tabla MySQL. También podemos usar una cláusula condicional llamada comoWHERE cláusula para seleccionar los registros requeridos.

Una cláusula WHERE con el signo 'igual a' (=) funciona bien donde queremos hacer una coincidencia exacta. Como si "tutorial_author = 'Sanjay'". Pero puede haber un requisito en el que queramos filtrar todos los resultados en los que el nombre tutorial_author debe contener "jay". Esto se puede manejar usandoSQL LIKE Clause junto con la cláusula WHERE.

Si se usa la cláusula SQL LIKE junto con el carácter%, entonces funcionará como un metacarácter (*) como en UNIX, mientras enumera todos los archivos o directorios en el símbolo del sistema. Sin un carácter%, la cláusula LIKE es muy similar a laequal to firmar junto con la cláusula WHERE.

Sintaxis

El siguiente bloque de código tiene una sintaxis SQL genérica del comando SELECT junto con la cláusula LIKE para obtener datos de una tabla MySQL.

SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • Puede especificar cualquier condición utilizando la cláusula WHERE.

  • Puede utilizar la cláusula LIKE junto con la cláusula WHERE.

  • Puede utilizar la cláusula LIKE en lugar de la equals to firmar.

  • Cuando se usa LIKE junto con el signo%, funcionará como una búsqueda de metacaracteres.

  • Puede especificar más de una condición usando AND o OR operadores.

  • Una cláusula WHERE ... LIKE se puede utilizar junto con el comando DELETE o UPDATE SQL también para especificar una condición.

Usando la cláusula LIKE en el símbolo del sistema

Esto usará el comando SQL SELECT con la cláusula WHERE ... LIKE para recuperar los datos seleccionados de la tabla MySQL - tutorials_tbl.

Ejemplo

El siguiente ejemplo devolverá todos los registros del tutorials_tbl tabla para la que el nombre del autor termina con jay -

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

mysql>

Usando la cláusula LIKE dentro de PHP Script

Puede usar una sintaxis similar a la cláusula WHERE ... LIKE en la función PHP - mysql_query(). Esta función se usa para ejecutar el comando SQL y luego otra función PHP -mysql_fetch_array() se puede utilizar para recuperar todos los datos seleccionados, si se utiliza la cláusula WHERE ... LIKE junto con el comando SELECT.

Pero si se usa la cláusula WHERE ... LIKE con el comando DELETE o UPDATE, no se requiere ninguna otra llamada a la función PHP.

Ejemplo

Pruebe el siguiente ejemplo para devolver todos los registros del tutorials_tbl tabla para la que contiene el nombre del autor jay -

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

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

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

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

Hemos visto el SQL SELECTcomando para obtener datos de una tabla MySQL. Cuando selecciona filas, el servidor MySQL es libre de devolverlas en cualquier orden, a menos que le indique lo contrario diciendo cómo ordenar el resultado. Pero, ordena un conjunto de resultados agregando unORDER BY cláusula que nombra la columna o columnas que desea ordenar.

Sintaxis

El siguiente bloque de código es una sintaxis SQL genérica del comando SELECT junto con la cláusula ORDER BY para ordenar los datos de una tabla MySQL.

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
  • Puede ordenar el resultado devuelto en cualquier campo, si ese campo está en la lista.

  • Puede ordenar el resultado en más de un campo.

  • Puede utilizar la palabra clave ASC o DESC para obtener un resultado en orden ascendente o descendente. De forma predeterminada, es el orden ascendente.

  • Puede utilizar la cláusula WHERE ... LIKE de la forma habitual para poner una condición.

Usando la cláusula ORDER BY en el símbolo del sistema

Esto usará el comando SQL SELECT con el ORDER BY cláusula para obtener datos de la tabla MySQL - tutorials_tbl.

Ejemplo

Pruebe el siguiente ejemplo, que devuelve el resultado en orden ascendente.

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

mysql>

Verifique todos los nombres de los autores que se enumeran en orden ascendente.

Usando la cláusula ORDER BY dentro de un script PHP

Puede usar una sintaxis similar de la cláusula ORDER BY en la función PHP - mysql_query(). Esta función se usa para ejecutar el comando SQL y luego otra función PHPmysql_fetch_array() se puede utilizar para recuperar todos los datos seleccionados.

Ejemplo

Pruebe el siguiente ejemplo, que devuelve el resultado en orden descendente de los autores del tutorial.

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

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

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

En los capítulos anteriores, obtuvimos datos de una tabla a la vez. Esto es lo suficientemente bueno para tomas simples, pero en la mayoría de los usos de MySQL en el mundo real, a menudo necesitará obtener datos de varias tablas en una sola consulta.

Puede utilizar varias tablas en su única consulta SQL. El acto de unirse en MySQL se refiere a romper dos o más tablas en una sola tabla.

Puede usar JOINS en las sentencias SELECT, UPDATE y DELETE para unir las tablas MySQL. También veremos un ejemplo de LEFT JOIN que es diferente del simple JOIN de MySQL.

Uso de combinaciones en el símbolo del sistema

Supongamos que tenemos dos mesas tcount_tbl y tutorials_tbl, en TUTORIALES. Ahora eche un vistazo a los ejemplos que se dan a continuación:

Ejemplo

Los siguientes ejemplos:

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

Ahora podemos escribir una consulta SQL para unir estas dos tablas. Esta consulta seleccionará todos los autores de la tabla.tutorials_tbl y recogerá el número correspondiente de tutorías del tcount_tbl.

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

Usar combinaciones en un script PHP

Puede utilizar cualquiera de las consultas SQL mencionadas anteriormente en el script PHP. Solo necesita pasar la consulta SQL a la función PHPmysql_query() y luego obtendrá los resultados de la forma habitual.

Ejemplo

El siguiente ejemplo:

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

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

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

MySQL LEFT JOIN

Una combinación izquierda de MySQL es diferente de una combinación simple. Un LEFT JOIN de MySQL le da una consideración adicional a la tabla que está a la izquierda.

Si hago un LEFT JOIN, Obtengo todos los registros que coinciden de la misma manera y, ADEMÁS, obtengo un registro adicional por cada registro no coincidente en la tabla izquierda de la combinación: asegurando así (en mi ejemplo) que cada AUTOR reciba una mención.

Ejemplo

Pruebe el siguiente ejemplo para comprender el LEFT JOIN.

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

Necesitaría practicar más para familiarizarse con JOINS. Este es un concepto un poco complejo en MySQL / SQL y se volverá más claro al hacer ejemplos reales.

Hemos visto el SQL SELECT comando junto con el WHERE cláusula para obtener datos de una tabla MySQL, pero cuando intentamos dar una condición, que compara el campo o el valor de la columna con NULL, no funciona correctamente.

Para manejar tal situación, MySQL proporciona tres operadores:

  • IS NULL - Este operador devuelve verdadero, si el valor de la columna es NULL.

  • IS NOT NULL - Este operador devuelve verdadero, si el valor de la columna no es NULL.

  • <=> - Este operador compara valores, que (a diferencia del operador =) es verdadero incluso para dos valores NULL.

Las condiciones que involucran NULL son especiales. No puedes usar =NULL o! = NULLpara buscar valores NULL en columnas. Estas comparaciones siempre fallan porque es imposible saber si son ciertas o no. A veces, incluso NULL = NULL falla.

Para buscar columnas que sean o no NULL, use IS NULL o IS NOT NULL.

Usar valores NULL en el símbolo del sistema

Suponga que hay una tabla llamada tcount_tbl en la base de datos TUTORIALS y contiene dos columnas a saber tutorial_author y tutorial_count, donde un tutorial_count NULL indica que el valor es desconocido.

Ejemplo

Pruebe los siguientes ejemplos:

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

mysql> use TUTORIALS;
Database changed

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

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

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

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

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

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

mysql>

Puedes ver que = y != no funciona con valores NULL de la siguiente manera:

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

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

Para encontrar los registros donde la columna tutorial_count es o no NULL, las consultas deben escribirse como se muestra en el siguiente programa.

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

Manejo de valores NULL en un script PHP

Puedes usar el if...else condición para preparar una consulta basada en el valor NULL.

Ejemplo

El siguiente ejemplo toma el tutorial_count desde fuera y luego lo compara con el valor disponible en la tabla.

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

Has visto la coincidencia de patrones de MySQL con LIKE ...%. MySQL admite otro tipo de operación de coincidencia de patrones basada en las expresiones regulares yREGEXPoperador. Si conoce PHP o PERL, entonces es muy simple de entender porque esta coincidencia es la misma que la de las expresiones regulares.

A continuación se muestra la tabla de patrones, que se puede utilizar junto con REGEXP operador.

Patrón Que coincide el patrón
^ Principio de cadena
PS Fin de cadena
. Cualquier personaje
[...] Cualquier carácter incluido entre corchetes
[^ ...] Cualquier carácter que no figure entre corchetes
p1 | p2 | p3 Alternancia; coincide con cualquiera de los patrones p1, p2 o p3
* Cero o más instancias del elemento anterior
+ Una o más instancias del elemento precedente
{norte} n instancias del elemento anterior
{Minnesota} m hasta n instancias del elemento anterior

Ejemplos

Ahora, según la tabla anterior, puede configurar varios tipos de consultas SQL para satisfacer sus necesidades. Aquí, enumero algunos para su comprensión.

Considere que tenemos una mesa llamada person_tbl y tiene un campo llamado name -

Consulta para encontrar todos los nombres que comienzan con 'st' -

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

Consulta para encontrar todos los nombres que terminan en 'ok' -

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

Consulta para encontrar todos los nombres, que contienen 'mar' -

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

Consulta para encontrar todos los nombres que comienzan con una vocal y terminan con 'ok' -

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

Una transacción es un grupo secuencial de operaciones de manipulación de bases de datos, que se realiza como si fuera una sola unidad de trabajo. En otras palabras, una transacción nunca estará completa a menos que cada operación individual dentro del grupo sea exitosa. Si alguna operación dentro de la transacción falla, toda la transacción fallará.

Prácticamente, agrupará muchas consultas SQL en un grupo y las ejecutará todas juntas como parte de una transacción.

Propiedades de las transacciones

Las transacciones tienen las siguientes cuatro propiedades estándar, generalmente denominadas por el acrónimo ACID -

  • Atomicity- Esto asegura que todas las operaciones dentro de la unidad de trabajo se completen con éxito; de lo contrario, la transacción se aborta en el punto de falla y las operaciones anteriores se revierten a su estado anterior.

  • Consistency - Esto asegura que la base de datos cambia correctamente de estado tras una transacción confirmada con éxito.

  • Isolation - Esto permite que las transacciones operen de forma independiente y transparente entre sí.

  • Durability - Esto asegura que el resultado o efecto de una transacción comprometida persista en caso de falla del sistema.

En MySQL, las transacciones comienzan con la declaración BEGIN WORK y terminar con un COMMIT o un ROLLBACKdeclaración. Los comandos SQL entre las declaraciones inicial y final forman la mayor parte de la transacción.

COMMIT y ROLLBACK

Estas dos palabras clave Commit y Rollback se utilizan principalmente para transacciones MySQL.

  • Cuando se completa una transacción exitosa, se debe emitir el comando COMMIT para que los cambios en todas las tablas involucradas surtan efecto.

  • Si ocurre una falla, se debe emitir un comando ROLLBACK para devolver cada tabla referenciada en la transacción a su estado anterior.

Puede controlar el comportamiento de una transacción configurando la variable de sesión llamada AUTOCOMMIT. Si AUTOCOMMIT se establece en 1 (el valor predeterminado), entonces cada instrucción SQL (dentro de una transacción o no) se considera una transacción completa y se confirma de manera predeterminada cuando finaliza.

Cuando AUTOCOMMIT se establece en 0, emitiendo el SET AUTOCOMMIT = 0 comando, la siguiente serie de declaraciones actúa como una transacción y no se compromete ninguna actividad hasta que se emite una declaración COMMIT explícita.

Puede ejecutar estos comandos SQL en PHP utilizando el mysql_query() función.

Un ejemplo genérico de transacción

Esta secuencia de eventos es independiente del lenguaje de programación utilizado. La ruta lógica se puede crear en cualquier idioma que use para crear su aplicación.

Puede ejecutar estos comandos SQL en PHP utilizando el mysql_query() función.

  • Comience la transacción emitiendo el comando SQL BEGIN WORK.

  • Emita uno o más comandos SQL como SELECT, INSERT, UPDATE o DELETE.

  • Compruebe que no haya ningún error y que todo esté de acuerdo con su requerimiento.

  • Si hay algún error, emita un comando ROLLBACK; de lo contrario, emita un comando COMMIT.

Tipos de tablas seguras para transacciones en MySQL

No puede utilizar transacciones directamente, pero puede hacerlo para determinadas excepciones. Sin embargo, no son seguros ni están garantizados. Si planeas usar transacciones en tu programación MySQL, entonces necesitas crear tus tablas de una manera especial. Hay muchos tipos de tablas que admiten transacciones, pero la más popular esInnoDB.

El soporte para tablas InnoDB requiere un parámetro de compilación específico al compilar MySQL desde la fuente. Si su versión de MySQL no es compatible con InnoDB, solicite a su proveedor de servicios de Internet que cree una versión de MySQL compatible con los tipos de tablas InnoDB o descargue e instale elMySQL-Max Binary Distribution para Windows o Linux / UNIX y trabajar con el tipo de tabla en un entorno de desarrollo.

Si su instalación de MySQL admite tablas InnoDB, simplemente agregue un TYPE = InnoDB definición a la declaración de creación de la tabla.

Por ejemplo, el siguiente código crea una tabla InnoDB llamada tcount_tbl -

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

mysql> use TUTORIALS;
Database changed

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

Para obtener más detalles sobre InnoDB, puede hacer clic en el siguiente enlace: InnoDB

Puede utilizar otros tipos de tablas como GEMINI o BDB, pero depende de su instalación, si es compatible con estos dos tipos de tablas o no.

El MySQL ALTER El comando es muy útil cuando desea cambiar el nombre de su tabla, cualquier campo de la tabla o si desea agregar o eliminar una columna existente en una tabla.

Comencemos con la creación de una tabla llamada testalter_tbl.

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

mysql> use TUTORIALS;
Database changed

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

Soltar, agregar o reposicionar una columna

Si desea eliminar una columna i existente de la tabla MySQL anterior, usará el DROP cláusula junto con la ALTER comando como se muestra a continuación -

mysql> ALTER TABLE testalter_tbl  DROP i;

UN DROP La cláusula no funcionará si la columna es la única que queda en la tabla.

Para agregar una columna, use ADD y especifique la definición de la columna. La siguiente declaración restaura lai columna al testalter_tbl -

mysql> ALTER TABLE testalter_tbl ADD i INT;

Después de emitir esta declaración, testalter contendrá las mismas dos columnas que tenía cuando creó la tabla por primera vez, pero no tendrá la misma estructura. Esto se debe a que hay nuevas columnas que se agregan al final de la tabla de forma predeterminada. Así que aunquei originalmente era la primera columna en mytbl, ahora es la última.

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

Para indicar que desea una columna en una posición específica dentro de la tabla, use FIRST para convertirla en la primera columna o AFTER col_name para indicar que la nueva columna debe colocarse después de col_name.

Prueba lo siguiente ALTER TABLE declaraciones, usando SHOW COLUMNS después de cada uno para ver qué efecto tiene cada uno -

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;

Los especificadores FIRST y AFTER solo funcionan con la cláusula ADD. Esto significa que si desea reposicionar una columna existente dentro de una tabla, primero debeDROP eso y luego ADD en la nueva posición.

Modificar (cambiar) una definición de columna o un nombre

Para cambiar la definición de una columna, use MODIFY o CHANGE cláusula junto con el comando ALTER.

Por ejemplo, para cambiar de columna c de CHAR (1) a CHAR (10), puede usar el siguiente comando:

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

Con CHANGE, la sintaxis es un poco diferente. Después de la palabra clave CHANGE, nombre la columna que desea cambiar y luego especifique la nueva definición, que incluye el nuevo nombre.

Pruebe el siguiente ejemplo:

mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;

Si ahora usa CHANGE para convertir j desde BIGINT de regreso INT sin cambiar el nombre de la columna, la declaración será como se muestra a continuación:

mysql> ALTER TABLE testalter_tbl CHANGE j j INT;

The Effect of ALTER TABLE on Null and Default Value Attributes- Cuando MODIFICA o CAMBIA una columna, también puede especificar si la columna puede contener valores NULL y cuál es su valor predeterminado. De hecho, si no hace esto, MySQL asigna automáticamente valores para estos atributos.

El siguiente bloque de código es un ejemplo, donde el NOT NULL La columna tendrá el valor 100 por defecto.

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

Si no usa el comando anterior, MySQL completará los valores NULL en todas las columnas.

Alterar (cambiar) el valor predeterminado de una columna

Puede cambiar un valor predeterminado para cualquier columna utilizando el ALTER mando.

Pruebe el siguiente ejemplo.

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

Puede eliminar la restricción predeterminada de cualquier columna utilizando la cláusula DROP junto con la ALTER mando.

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

Modificar (cambiar) un tipo de tabla

Puede utilizar un tipo de tabla utilizando el TYPEcláusula junto con el comando ALTER. Pruebe el siguiente ejemplo para cambiar eltestalter_tbl a MYISAM tipo de tabla.

Para averiguar el tipo actual de tabla, use el SHOW TABLE STATUS declaración.

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

Cambiar el nombre (alterar) de una tabla

Para cambiar el nombre de una tabla, use el RENAME opción de la ALTER TABLE declaración.

Pruebe el siguiente ejemplo para cambiar el nombre testalter_tbl a alter_tbl.

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

Puede usar el comando ALTER para crear y soltar el comando INDEX en un archivo MySQL. Discutiremos en detalle sobre este comando en el próximo capítulo.

Un índice de base de datos es una estructura de datos que mejora la velocidad de las operaciones en una tabla. Los índices se pueden crear usando una o más columnas, proporcionando la base tanto para búsquedas aleatorias rápidas como para ordenar eficientemente el acceso a los registros.

Al crear el índice, debe tenerse en cuenta qué columnas se utilizarán para realizar consultas SQL y crear uno o más índices en esas columnas.

Prácticamente, los índices también son un tipo de tablas, que mantienen la clave principal o el campo de índice y un puntero a cada registro en la tabla real.

Los usuarios no pueden ver los índices, solo se utilizan para acelerar las consultas y serán utilizados por el motor de búsqueda de la base de datos para localizar registros muy rápido.

Las instrucciones INSERT y UPDATE toman más tiempo en tablas que tienen índices, mientras que las instrucciones SELECT se vuelven rápidas en esas tablas. La razón es que mientras se inserta o actualiza, una base de datos también necesita insertar o actualizar los valores del índice.

Índice simple y único

Puede crear un índice único en una tabla. Un índice único significa que dos filas no pueden tener el mismo valor de índice. Aquí está la sintaxis para crear un índice en una tabla.

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

Puede utilizar una o más columnas para crear un índice.

Por ejemplo, podemos crear un índice en tutorials_tbl utilizando tutorial_author.

CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author)

Puede crear un índice simple en una tabla. Simplemente omita elUNIQUEpalabra clave de la consulta para crear un índice simple. Un índice simple permite valores duplicados en una tabla.

Si desea indexar los valores de una columna en orden descendente, puede agregar la palabra reservada DESC después del nombre de la columna.

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

ALTER comando para agregar y soltar ÍNDICE

Hay cuatro tipos de declaraciones para agregar índices a una tabla:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) - Esta declaración agrega un PRIMARY KEY, lo que significa que los valores indexados deben ser únicos y no pueden ser NULL.

  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) - Esta declaración crea un índice para el cual los valores deben ser únicos (excepto los valores NULL, que pueden aparecer varias veces).

  • ALTER TABLE tbl_name ADD INDEX index_name (column_list) - Esto agrega un índice ordinario en el que cualquier valor puede aparecer más de una vez.

  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) - Esto crea un índice FULLTEXT especial que se utiliza con fines de búsqueda de texto.

El siguiente bloque de código es un ejemplo para agregar índice en una tabla existente.

mysql> ALTER TABLE testalter_tbl ADD INDEX (c);

Puede eliminar cualquier ÍNDICE utilizando el DROP cláusula junto con el comando ALTER.

Pruebe el siguiente ejemplo para eliminar el índice creado anteriormente.

mysql> ALTER TABLE testalter_tbl DROP INDEX (c);

Puede eliminar cualquier ÍNDICE usando la cláusula DROP junto con el comando ALTER.

ALTER Comando para agregar y soltar la LLAVE PRIMARIA

También puede agregar una clave principal de la misma manera. Pero asegúrese de que la clave principal funcione en columnas, que NO sean NULL.

El siguiente bloque de código es un ejemplo para agregar la clave principal en una tabla existente. Esto hará que una columna NO sea NULA primero y luego la agregará como clave principal.

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

Puede usar el comando ALTER para eliminar una clave primaria de la siguiente manera:

mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;

Para eliminar un índice que no es una CLAVE PRINCIPAL, debe especificar el nombre del índice.

Visualización de información de ÍNDICE

Puedes usar el SHOW INDEXcomando para enumerar todos los índices asociados con una tabla. La salida de formato vertical (especificada por \ G) a menudo es útil con esta declaración, para evitar una larga línea envolvente:

Pruebe el siguiente ejemplo:

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

Las tablas temporales pueden ser muy útiles en algunos casos para mantener datos temporales. Lo más importante que se debe saber sobre las tablas temporales es que se eliminarán cuando finalice la sesión actual del cliente.

¿Qué son las tablas temporales?

Se agregaron tablas temporales en MySQL Versión 3.23. Si usa una versión anterior de MySQL a 3.23, no puede usar las tablas temporales, pero puede usarHeap Tables.

Como se indicó anteriormente, las tablas temporales solo durarán mientras la sesión esté activa. Si ejecuta el código en un script PHP, la tabla temporal se destruirá automáticamente cuando el script termine de ejecutarse. Si está conectado al servidor de base de datos MySQL a través del programa cliente MySQL, entonces la tabla temporal existirá hasta que cierre el cliente o destruya manualmente la tabla.

Ejemplo

El siguiente programa es un ejemplo que muestra el uso de la tabla temporal. El mismo código se puede utilizar en scripts PHP utilizando elmysql_query() función.

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)

Cuando emite un SHOW TABLEScomando, entonces su tabla temporal no aparecerá en la lista. Ahora, si cierra la sesión de MySQL y luego emitirá unSELECTcomando, entonces no encontrará datos disponibles en la base de datos. Incluso su mesa temporal no existirá.

Dejar caer tablas temporales

De forma predeterminada, MySQL elimina todas las tablas temporales cuando se termina la conexión a la base de datos. Aún así, si desea eliminarlos en el medio, hágalo emitiendo elDROP TABLE mando.

El siguiente programa es un ejemplo de cómo eliminar una tabla temporal:

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

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

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

Puede haber una situación en la que necesite una copia exacta de una tabla y CREATE TABLE ... SELECT no se adapta a sus propósitos porque la copia debe incluir los mismos índices, valores predeterminados, etc.

Puede manejar esta situación siguiendo los pasos que se detallan a continuación:

  • Utilice SHOW CREATE TABLE para obtener una declaración CREATE TABLE que especifique la estructura de la tabla fuente, los índices y todo.

  • Modifique la instrucción para cambiar el nombre de la tabla por el de la tabla de clonación y ejecute la instrucción. De esta manera, tendrá la tabla de clonación exacta.

  • Opcionalmente, si también necesita copiar el contenido de la tabla, emita también una instrucción INSERT INTO ... SELECT.

Ejemplo

Pruebe el siguiente ejemplo para crear una tabla de clonación para tutorials_tbl.

Step 1 - Obtenga la estructura completa sobre la mesa.

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

ERROR:
No query specified

Step 2 - Cambie el nombre de esta tabla y cree otra tabla.

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

Step 3- Después de ejecutar el paso 2, creará una tabla de clonación en su base de datos. Si desea copiar datos de la tabla anterior, puede hacerlo mediante la instrucción INSERT INTO ... SELECT.

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

Finalmente, tendrá una tabla de clonación exacta como deseaba tener.

Obtención y uso de metadatos de MySQL

Hay tres tipos de información que le gustaría obtener de MySQL.

  • Information about the result of queries - Esto incluye el número de registros afectados por cualquier instrucción SELECT, UPDATE o DELETE.

  • Information about the tables and databases - Incluye información relativa a la estructura de las tablas y bases de datos.

  • Information about the MySQL server - Esto incluye el estado del servidor de la base de datos, número de versión, etc.

Es muy fácil obtener toda esta información en el indicador de MySQL, pero al usar las API de PERL o PHP, necesitamos llamar a varias API de forma explícita para obtener toda esta información.

Obtener el número de filas afectadas por una consulta

Veamos ahora cómo obtener esta información.

Ejemplo PERL

En los scripts DBI, el recuento de filas afectadas es devuelto por do( ) o por el execute( ) comando, dependiendo de cómo ejecute la consulta.

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

Ejemplo de PHP

En PHP, invoque el mysql_affected_rows( ) función para averiguar cuántas filas cambió una consulta.

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

Listado de tablas y bases de datos

Es muy fácil enumerar todas las bases de datos y las tablas disponibles con un servidor de base de datos. Tu resultado puede sernull si no tiene los privilegios suficientes.

Aparte del método que se muestra en el siguiente bloque de código, puede utilizar SHOW TABLES o SHOW DATABASES consultas para obtener la lista de tablas o bases de datos en PHP o en PERL.

Ejemplo PERL

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

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

Ejemplo de PHP

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

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

Obtener metadatos del servidor

Hay algunos comandos importantes en MySQL que se pueden ejecutar en el indicador de MySQL o utilizando cualquier script como PHP para obtener información importante sobre el servidor de la base de datos.

No Señor. Comando y descripción
1

SELECT VERSION( )

Cadena de versión del servidor

2

SELECT DATABASE( )

Nombre de la base de datos actual (vacío si no hay ninguno)

3

SELECT USER( )

Nombre de usuario actual

4

SHOW STATUS

Indicadores de estado del servidor

5

SHOW VARIABLES

Variables de configuración del servidor

Una secuencia es un conjunto de números enteros 1, 2, 3, ... que se generan en orden según una demanda específica. Las secuencias se utilizan con frecuencia en las bases de datos porque muchas aplicaciones requieren que cada fila de una tabla contenga un valor único y las secuencias proporcionan una manera fácil de generarlas.

Este capítulo describe cómo usar secuencias en MySQL.

Usando la columna AUTO_INCREMENT

La forma más sencilla en MySQL de usar secuencias es definir una columna como AUTO_INCREMENT y deje que MySQL se encargue del resto.

Ejemplo

Pruebe el siguiente ejemplo. Esto creará una tabla y luego insertará algunas filas en esta tabla donde no es necesario dar un ID de registro porque MySQL lo incrementa automáticamente.

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

Obtener valores AUTO_INCREMENT

los LAST_INSERT_ID( )es una función SQL, por lo que puede utilizarla desde cualquier cliente que sepa cómo emitir sentencias SQL. De lo contrario, los scripts de PERL y PHP proporcionan funciones exclusivas para recuperar el valor incrementado automáticamente del último registro.

Ejemplo PERL

Utilizar el mysql_insertid atributo para obtener el AUTO_INCREMENTvalor generado por una consulta. Se accede a este atributo a través de un identificador de base de datos o un identificador de declaración, según cómo emita la consulta.

El siguiente ejemplo lo hace referencia a través del identificador de la base de datos.

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

Ejemplo de PHP

Después de emitir una consulta que genera un valor AUTO_INCREMENT, recupere el valor llamando al mysql_insert_id( ) mando.

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

Renumerar una secuencia existente

Puede darse el caso de que haya eliminado muchos registros de una tabla y desee volver a secuenciar todos los registros. Esto se puede hacer usando un truco simple, pero debe tener mucho cuidado al hacerlo si su tabla se une con la otra tabla.

Si determina que la resecuenciación de una columna AUTO_INCREMENT es inevitable, la forma de hacerlo es eliminar la columna de la tabla y luego agregarla nuevamente.

El siguiente ejemplo muestra cómo volver a numerar id values en la mesa usando esta técnica.

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

Iniciar una secuencia con un valor particular

De forma predeterminada, MySQL iniciará la secuencia desde 1, pero también puede especificar cualquier otro número en el momento de la creación de la tabla.

El siguiente programa es un ejemplo que muestra cómo MySQL iniciará la secuencia desde 100.

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

Alternativamente, puede crear la tabla y luego establecer el valor de secuencia inicial con el ALTER TABLE mando.

mysql> ALTER TABLE t AUTO_INCREMENT = 100;

Generalmente, las tablas o los conjuntos de resultados a veces contienen registros duplicados. La mayoría de las veces está permitido, pero a veces es necesario detener los registros duplicados. Es necesario identificar registros duplicados y eliminarlos de la tabla. Este capítulo describirá cómo evitar la aparición de registros duplicados en una tabla y cómo eliminar los registros duplicados ya existentes.

Evitar que se produzcan duplicados en una tabla

Puedes usar un PRIMARY KEY o un UNIQUE Indexe en una tabla con los campos apropiados para detener registros duplicados.

Tomemos un ejemplo: la siguiente tabla no contiene tal índice o clave primaria, por lo que permitiría registros duplicados para first_name y last_name.

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

Para evitar que se creen varios registros con los mismos valores de nombre y apellido en esta tabla, agregue un PRIMARY KEYa su definición. Al hacer esto, también es necesario declarar que las columnas indexadas seanNOT NULL, Porque un PRIMARY KEY no permite NULL valores -

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 presencia de un índice único en una tabla normalmente causa un error si inserta un registro en la tabla que duplica un registro existente en la columna o columnas que definen el índice.

Utilizar el INSERT IGNORE comando en lugar del INSERTmando. Si un registro no duplica un registro existente, entonces MySQL lo inserta como de costumbre. Si el registro es un duplicado, entonces elIGNORE La palabra clave le dice a MySQL que la descarte silenciosamente sin generar un error.

El siguiente ejemplo no genera errores y, al mismo tiempo, tampoco inserta registros duplicados.

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)

Utilizar el REPLACEcomando en lugar del comando INSERT. Si el registro es nuevo, se inserta igual que con INSERT. Si es un duplicado, el nuevo registro reemplaza al anterior.

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)

Los comandos INSERT IGNORE y REPLACE deben elegirse según el comportamiento de manejo de duplicados que desee realizar. El comando INSERT IGNORE conserva el primer conjunto de registros duplicados y descarta el resto. El comando REPLACE conserva el último conjunto de duplicados y borra los anteriores.

Otra forma de hacer cumplir la singularidad es agregar un UNIQUE índice en lugar de una CLAVE PRIMARIA a una tabla.

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

Contar e identificar duplicados

A continuación se muestra la consulta para contar registros duplicados con first_name y last_name en una tabla.

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

Esta consulta devolverá una lista de todos los registros duplicados en la tabla person_tbl. En general, para identificar conjuntos de valores duplicados, siga los pasos que se indican a continuación.

  • Determine qué columnas contienen los valores que pueden duplicarse.

  • Enumere esas columnas en la lista de selección de columnas, junto con el COUNT(*).

  • Enumere las columnas en el GROUP BY cláusula también.

  • Agrega un HAVING cláusula que elimina los valores únicos al requerir que los recuentos de grupos sean mayores que uno.

Eliminar duplicados de un resultado de consulta

Puedes usar el DISTINCT junto con la instrucción SELECT para encontrar registros únicos disponibles en una tabla.

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

Una alternativa al comando DISTINCT es agregar una cláusula GROUP BY que nombre las columnas que está seleccionando. Esto tiene el efecto de eliminar duplicados y seleccionar solo las combinaciones únicas de valores en las columnas especificadas.

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

Eliminación de duplicados mediante reemplazo de mesa

Si tiene registros duplicados en una tabla y desea eliminar todos los registros duplicados de esa tabla, siga el procedimiento que se indica a continuación.

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;

Una forma fácil de eliminar registros duplicados de una tabla es agregar un ÍNDICE o una CLAVE PRIMARIA a esa tabla. Incluso si esta tabla ya está disponible, puede utilizar esta técnica para eliminar los registros duplicados y también estará seguro en el futuro.

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

Si toma la entrada del usuario a través de una página web y la inserta en una base de datos MySQL, existe la posibilidad de que se haya quedado abierto a un problema de seguridad conocido como SQL Injection. Este capítulo le enseñará cómo ayudar a evitar que esto suceda y le ayudará a proteger sus scripts y declaraciones MySQL.

La inyección de SQL generalmente ocurre cuando le pide a un usuario una entrada, como su nombre y en lugar de un nombre, le dan una declaración de MySQL que sin saberlo ejecutará en su base de datos.

Nunca confíe en los datos proporcionados por un usuario, procese estos datos solo después de la validación; como regla, esto se hace mediante la coincidencia de patrones. En el siguiente ejemplo, el nombre de usuario está restringido a caracteres alfanuméricos más guión bajo y a una longitud de entre 8 y 20 caracteres; modifique estas reglas según sea necesario.

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

Para demostrar este problema, considere el siguiente extracto.

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

Se supone que la llamada a la función recupera un registro de la tabla de usuarios, donde la columna de nombre coincide con el nombre especificado por el usuario. En circunstancias normales, $ name solo contendría caracteres alfanuméricos y quizás espacios. Pero aquí, agregando una consulta completamente nueva a$name, la llamada a la base de datos se convierte en un desastre. La consulta DELETE inyectada elimina todos los registros de los usuarios.

Afortunadamente, si usa MySQL, el mysql_query()La función no permite apilar consultas o ejecutar múltiples consultas en una sola llamada de función. Si intenta apilar consultas, la llamada falla.

Sin embargo, otras extensiones de base de datos PHP, como SQLite y PostgreSQL, realiza felizmente consultas apiladas, ejecutando todas las consultas proporcionadas en una cadena y creando un grave problema de seguridad.

Prevención de la inyección de SQL

Puede manejar todos los caracteres de escape de forma inteligente en lenguajes de script como PERL y PHP. La extensión MySQL para PHP proporciona la funciónmysql_real_escape_string() para escapar de los caracteres de entrada que son especiales para MySQL.

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

El dilema LIKE

Para abordar el dilema de LIKE, un mecanismo de escape personalizado debe convertir los caracteres% y _ proporcionados por el usuario en literales. Utilizaraddcslashes(), una función que le permite especificar un rango de caracteres para escapar.

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

La forma más sencilla de exportar los datos de una tabla a un archivo de texto es mediante el SELECT...INTO OUTFILE declaración que exporta el resultado de una consulta directamente a un archivo en el servidor.

Exportación de datos con la instrucción SELECT ... INTO OUTFILE

La sintaxis de esta declaración combina un SELECT comando con INTO OUTFILE filenameal final. El formato de salida predeterminado es el mismo que el del comando LOAD DATA. Entonces, la siguiente declaración exporta eltutorials_tbl mesa en /tmp/tutorials.txt como un archivo delimitado por tabuladores y terminado en salto de línea.

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

Puede cambiar el formato de salida utilizando varias opciones para indicar cómo citar y delimitar columnas y registros. Para exportar la tabla tutorial_tbl en formato CSV con líneas terminadas en CRLF, utilice el siguiente código.

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

los SELECT ... INTO OUTFILE tiene las siguientes propiedades:

  • El archivo de salida lo crea directamente el servidor MySQL, por lo que el nombre del archivo debe indicar dónde desea que se escriba el archivo en el servidor. No existe una versión LOCAL de la declaración análoga a laLOCAL versión de LOAD DATA.

  • Debes tener el MySQL FILE privilegio para ejecutar el SELECT ... INTO declaración.

  • El archivo de salida no debe existir todavía. Esto evita que MySQL golpee archivos que pueden ser importantes.

  • Debe tener una cuenta de inicio de sesión en el host del servidor o alguna forma de recuperar el archivo de ese host. De lo contrario, elSELECT ... INTO OUTFILE Lo más probable es que el comando no tenga ningún valor para usted.

  • En UNIX, se crea el archivo world readabley es propiedad del servidor MySQL. Esto significa que, aunque podrá leer el archivo, es posible que no pueda eliminarlo.

Exportación de tablas como datos sin procesar

los mysqldumpEl programa se utiliza para copiar o realizar copias de seguridad de tablas y bases de datos. Puede escribir la salida de la tabla como unRaw Datafile o como un conjunto de INSERT declaraciones que recrean los registros en la tabla.

Para volcar una tabla como archivo de datos, debe especificar un --tab opción que indica el directorio donde desea que el servidor MySQL escriba el archivo.

Por ejemplo, para volcar el tutorials_tbl mesa de la TUTORIALS base de datos a un archivo en el /tmp directorio, use un comando como se muestra a continuación.

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

Exportación de contenidos o definiciones de tablas en formato SQL

Para exportar una tabla en formato SQL a un archivo, use el comando que se muestra a continuación.

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

Esto creará un archivo con el contenido que se muestra a continuación.

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

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

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

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

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

Para volcar varias tablas, nómbrelas todas seguidas del argumento del nombre de la base de datos. Para volcar una base de datos completa, no nombre ninguna tabla después de la base de datos como se muestra en el siguiente bloque de código.

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

Para realizar una copia de seguridad de todas las bases de datos disponibles en su host, utilice el siguiente código.

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

La opción --all-database está disponible en la versión MySQL 3.23.12. Este método se puede utilizar para implementar una estrategia de copia de seguridad de la base de datos.

Copiar tablas o bases de datos a otro host

Si desea copiar tablas o bases de datos de un servidor MySQL a otro, utilice el mysqldump con el nombre de la base de datos y el nombre de la tabla.

Ejecute el siguiente comando en el host de origen. Esto volcará la base de datos completa endump.txt archivo.

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

Puede copiar la base de datos completa sin usar un nombre de tabla en particular como se explicó anteriormente.

Ahora, archivo ftp dump.txt en otro host y use el siguiente comando. Antes de ejecutar este comando, asegúrese de haber creado database_name en el servidor de destino.

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

Otra forma de lograr esto sin usar un archivo intermediario es enviar la salida de mysqldump directamente a través de la red al servidor MySQL remoto. Si puede conectarse a ambos servidores desde el host donde reside la base de datos de origen, use el siguiente comando (asegúrese de tener acceso en ambos servidores).

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

En mysqldump, la mitad del comando se conecta al servidor local y escribe la salida del volcado en la tubería. La mitad restante del comando se conecta al servidor MySQL remoto en other-host.com. Lee la tubería para la entrada y envía cada declaración al servidor other-host.com.

Hay dos formas sencillas en MySQL para cargar datos en la base de datos MySQL desde un archivo previamente respaldado.

Importación de datos con LOAD DATA

MySQL proporciona una declaración LOAD DATA que actúa como un cargador de datos masivo. Aquí hay una declaración de ejemplo que lee un archivodump.txt de su directorio actual y lo carga en la tabla mytbl en la base de datos actual.

mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
  • Si el LOCAL la palabra clave no está presente, MySQL busca el archivo de datos en el servidor utilizando el looking into absolute pathname, que especifica completamente la ubicación del archivo, comenzando desde la raíz del sistema de archivos. MySQL lee el archivo desde la ubicación dada.

  • Por defecto, LOAD DATA asume que los archivos de datos contienen líneas que terminan con avances de línea (nuevas líneas) y que los valores de datos dentro de una línea están separados por tabulaciones.

  • Para especificar un formato de archivo explícitamente, utilice un FIELDS cláusula para describir las características de los campos dentro de una línea, y una LINEScláusula para especificar la secuencia final de línea. El seguimientoLOAD DATA declaración especifica que el archivo de datos contiene valores separados por dos puntos y líneas terminadas por retornos de carro y carácter de nueva línea.

mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl
   -> FIELDS TERMINATED BY ':'
   -> LINES TERMINATED BY '\r\n';
  • El comando LOAD DATA asume que las columnas del archivo de datos tienen el mismo orden que las columnas de la tabla. Si eso no es cierto, puede especificar una lista para indicar en qué columnas de la tabla se deben cargar las columnas del archivo de datos. Suponga que su tabla tiene columnas a, byc, pero las columnas sucesivas en el archivo de datos corresponden a las columnas b, c y a.

Puede cargar el archivo como se muestra en el siguiente bloque de código.

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

Importando datos con mysqlimport

MySQL también incluye un programa de utilidad llamado mysqlimport que actúa como un contenedor alrededor de LOAD DATA, para que pueda cargar los archivos de entrada directamente desde la línea de comando.

Para cargar datos del dump.txt dentro mytbl, utilice el siguiente comando en el indicador de UNIX.

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

Si utiliza mysqlimport, las opciones de la línea de comandos proporcionan los especificadores de formato. losmysqlimport comandos que corresponden a los dos anteriores LOAD DATA declaraciones se ve como se muestra en el siguiente bloque de código.

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

El orden en el que especifique las opciones no importa para mysqlimport, excepto que todas deben preceder al nombre de la base de datos.

los mysqlimport declaración usa el --columns opción para especificar el orden de las columnas -

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

Manejo de citas y caracteres especiales

La cláusula FIELDS puede especificar otras opciones de formato además TERMINATED BY. Por defecto, LOAD DATA asume que los valores no están entre comillas e interpreta la barra invertida (\) como un carácter de escape para los caracteres especiales. Para indicar el carácter de cotización de valor explícitamente, utilice elENCLOSED BYmando. MySQL quitará ese carácter de los extremos de los valores de datos durante el procesamiento de entrada. Para cambiar el carácter de escape predeterminado, useESCAPED BY.

Cuando especifica ENCLOSED BY para indicar que los caracteres de comillas deben eliminarse de los valores de datos, es posible incluir el carácter de comillas literalmente dentro de los valores de datos duplicándolo o precediéndolo con el carácter de escape.

Por ejemplo, si las comillas y los caracteres de escape son "y \, el valor de entrada "a""b\"c" será interpretado como a"b"c.

por mysqlimport, las opciones de línea de comandos correspondientes para especificar valores de comillas y de escape son --fields-enclosed-by y --fields-escaped-by.