Este documento describe las funciones básicas de MySQL para la gestión de bases de datos en la web. Explica cómo crear, modificar y consultar bases de datos y tablas, insertar y eliminar datos, y establecer permisos de usuario. Se proporcionan ejemplos de comandos SQL para realizar operaciones comunes como la creación de tablas, inserción y selección de datos, y modificación de la estructura de tablas. También cubre la creación de relaciones entre tablas y el uso de índices y llaves primarias.
3. TALLER DE PROGRAMACIÓN WEB
1. OPERACIONES BÁSICAS
Se entra a la base de datos con:
mysql -u root –p y como clave se pone admin.
En la línea de comandos:
mysql> SELECT VERSION(), CURRENT_DATE();
lo cual mostrara:
+-----------+----------------+
| version() | current_date() |
+-----------+----------------+
| 5.01.49 | 2012-12-06 |
+-----------+----------------+
1 row in set (0.00 sec)
se pueden hacer pequeñas operaciones como:
mysql> SELECT SIN(PI()/4), (4+1)*5;
+-------------+---------+
| SIN(PI()/4) | (4+1)*5 |
+-------------+---------+
| 0.707107 | 25 |
+-------------+---------+
1 row in set (0.00 sec)
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.04 sec)
2. BASES DE DATOS
2.1. MOSTRAR LAS BASES DE DATOS
Para ver las bases de datos existentes se pone:
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.00 sec)
Ing. Jaime Suasnábar Terrel Página 3
4. TALLER DE PROGRAMACIÓN WEB
2.2. PASOS PARA CREAR BASES DE DATOS
El comando para crear la base de datos es:
mysql> CREATE DATABASE prueba;
esto hará que se cree el directorio prueba en /var/lib/mysql/prueba.
3. TABLAS
3.1. CREACIÓN DE TABLAS
Para crear las tablas de la base de datos se pone:
mysql> use prueba;
para elegir la tabla en la que se va ha trabajar
mysql> create table clientes (nombre varchar(20), edad int(2),
-> sueldo float(9,2), memo text);
Tipos posibles de campos
VARCHAR
CHAR
DATE
TIME
DATETIME
TIMESTAMP(N) Tipo fecha y hora. Se utiliza para generar campos en los
cuales
automáticamente se guardan la fecha y hora de creación
o modificación del registro. Ejemplos de formatos:
TIMESTAMP(14)
TIMESTAMP(12)
TIMESTAMP(10)
TIMESTAMP(8)
TIMESTAMP(6)
TIMESTAMP(4)
TIMESTAMP(2)
YEAR(2 o 4)
INTEGER (INT)
FLOAT
(-3.402823466E+38 a -1.175494351E-38, 0, y
1.175494351E-38 a 3.402823466E+38.)
DOUBLE(M,D)
2.2250738585072014E-308 a 1.7976931348623157E+308)
BLOB
TEXT
Ing. Jaime Suasnábar Terrel Página 4
5. TALLER DE PROGRAMACIÓN WEB
Opciones para los campos
not null El valor no puede ser nulo en el campo
auto_increment automáticamente incrementa el número del registro anterior
primary key El PRIMARY KEY es un campo que MySQL usa como índice. Este
índice puede hacer cosas como:
Hallar rápidamente filas que acierten una cláusula WHERE.
Regresar filas de una tabla desde otras tablas cuando se realizan uniones.
Esto definitivamente te va a ayudar a agilizar sus peticiones también.
Key Crea una llave secundaria
3.2. CREACIÓN DE UNA TABLA CON ÍNDICES O LLAVES:
Mysql> create table prueba4 (llave1 int(1) not null, llave2 int(1),
primary key(llave1),key(llave2));
Toda llave primaria debe ser de tipo not null para que pueda indexar
correctamente. En este ejemplo el campo llave1 es la llave primaria y el campo
llave2 es la llave secundaria.
3.3. CREACIÓN DE CAMPOS PARA BUSCAR TEXTOS EN ESTOS:
mysql> CREATE TABLE articles (
-> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> title VARCHAR(200),
-> body TEXT,
-> FULLTEXT (title,body)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO articles VALUES
-> (0,'MySQL Tutorial', 'DBMS stands for DataBase ...'),
-> (0,'How To Use MySQL Efficiently', 'After you went through a
...'),
-> (0,'Optimising MySQL','In this tutorial we will show ...'),
-> (0,'1001 MySQL Trick','1. Never run mysqld as root. 2. ...'),
-> (0,'MySQL vs. YourSQL', 'In the following database comparison
...'),
-> (0,'MySQL Security', 'When configured properly, MySQL ...');
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM articles
-> WHERE MATCH (title,body) AGAINST ('database');
+----+-------------------+------------------------------------------+
| id | title | body |
+----+-------------------+------------------------------------------+
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
| 1 | MySQL Tutorial | DBMS stands for DataBase ... |
Ing. Jaime Suasnábar Terrel Página 5
6. TALLER DE PROGRAMACIÓN WEB
+----+-------------------+------------------------------------------+
2 rows in set (0.00 sec)
Para ver todas las tablas de la base:
mysql> show tables;
+------------------+
| Tables_in_prueba |
+------------------+
| clientes |
+------------------+
1 row in set (0.00 sec)
Para ver la estructura de la tabla se pone:
mysql> DESCRIBE clientes;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| nombre | varchar(20) | YES | | NULL | |
| edad | int(2) | YES | | NULL | |
| sueldo | float(9,2) | YES | | NULL | |
| memo | text | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
4. MODIFICACIÓN DE LA ESTRUCTURA DE UNA TABLA
4.1. CAMBIA LOS ATRIBUTOS DE UNA COLUMNA QUE YA EXISTE
ALTER TABLE [nombre_de_la_tabla] CHANGE [nombre_columna] [nombre_columna
opciones_de _columna];
ALTER TABLE clientes CHANGE nombre nombreapellido varchar(10);
4.2. COLOCAR UNA COLUMNA AL FINAL DE LA TABLA
ALTER TABLE [nombre_de_la_tabla] ADD [columna_nueva opciones];
ALTER TABLE clientes ADD cedula varchar(10);
4.3. SI SE DESEA CREAR UNA COLUMNA AL INICIO DE UNA TABLA:
ALTER TABLE [nombre_de_la_tabla] ADD [columna_nueva opciones] FIRST;
ALTER TABLE clientes ADD cedula varchar(10) FIRST;
4.4. Y SI SE TRATA DE COLOCARLA DESPUÉS DE UNA COLUMNA DADA, ES:
ALTER TABLE [nombre_de_la_tabla] ADD [columna_nueva opciones] AFTER
[nombre_de_columna];
ALTER TABLE clientes ADD cedula varchar(10) AFTER nombre;
4.5. PARA ELIMINARLA, SE UTILIZA ESTE COMANDO:
Ing. Jaime Suasnábar Terrel Página 6
7. TALLER DE PROGRAMACIÓN WEB
ALTER TABLE [nombre_de_la_tabla] DROP [nombre_columna];
ALTER TABLE clientes DROP cedula;
5. PARA INSERTAR DATOS A LA TABLA
Se utiliza la siguiente sentencia:
mysql> INSERT INTO clientes
-> VALUES ('Pablo','30','600',NULL);
Nota: La comilla es obligatorio para el ingreso de datos
Otra forma de ingresar datos es:
mysql> insert into clientes
-> (nombre)
-> values
-> ('pablo');
con esta forma se ingresa el nombre pablo en el campo nombre únicamente
Para insertar datos a la tabla desde un archivo de textos la sentencia es:
mysql> LOAD DATA LOCAL INFILE "datos.txt" INTO TABLE clientes;
el archivo debe tener el siguiente formato:
Pablo 30 600 N
Juan 20 N bueno
El símbolo N sirve para cuando ese campo no tiene datos. El separador de campos es
TAB y el de registros el fin de línea LF (o Enter)
Si el archivo de texto tiene separado los campos por medio de comas y a su vez cada
campo encerrado por comillas la sentencia que se utiliza es:
mysql> LOAD DATA INFILE 'datos.txt' INTO TABLE clientes
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY 'n';
Ejemplo de archivo datos.txt
“Pabo”,”30”,”600”,”N”
“Juan”,”25”,”500”,”N”
6. MOSTRAR LOS DATOS DE UNA TABLA
Ing. Jaime Suasnábar Terrel Página 7
8. TALLER DE PROGRAMACIÓN WEB
Para los datos de una tabla se utiliza la sentencia :
SELECT [campos que se quiere mostrar]
FROM [nombre de la tabla de la cual se extraen datos]
WHERE [condiciones para extraer datos]
Ejemplo:
mysql> SELECT * FROM clientes;
+--------+------+--------+------+
| nombre | edad | sueldo | memo |
+--------+------+--------+------+
| pablo | 30 | 600.00 | NULL |
| pablo | NULL | NULL | NULL |
+--------+------+--------+------+
2 rows in set (0.00 sec)
6.1. ENVIAR LA CONSULTA A UN ARCHIVO
mysql> select * from empresas into outfile '/prueba/hola2.txt' fields
terminated by '@@'
-> lines terminated by ‘n’;
6.2. CONSULTA CON CONDICIONES:
mysql> SELECT * FROM clientes WHERE nombre="pablo" and sueldo="500";
mysql> SELECT * FROM clientes WHERE edad >= "30";
mysql> SELECT nombre, edad FROM clientes WHERE edad >= "30";
mysql> SELECT distinct nombre FROM clientes;
distinct sirve para que saque solo los registros únicos no los repetidos
en el campo nombre
mysql> SELECT * FROM clientes ORDER BY edad;
para que el resultado se ordene por edad
mysql> SELECT * FROM clientes ORDER BY edad DESC;
para que el resultado se ordene en forma descendente
mysql> SELECT * FROM clientes GROUP BY edad;
mysql> SELECT nombre, sueldo/100 from clientes;
para que muestre la columna sueldo dividido para 100
mysql> select * from clientes where edad is NULL;
mysql> select * from clientes where edad is NOT NULL;
mysql> SELECT * FROM clientes WHERE nombre LIKE "P%";
mysql> SELECT * FROM clientes WHERE nombre LIKE "%P";
mysql> SELECT * FROM clientes WHERE nombre LIKE "%P%";
mysql> SELECT * FROM clientes WHERE nombre LIKE "_";
mysql> SELECT nombre, COUNT(*) FROM clientes
mysql> SELECT DISTINCT nombre FROM clientes saca los nombres sin
repetidos
mysql> SELECT * from tabla1 where not exists
Ing. Jaime Suasnábar Terrel Página 8
9. TALLER DE PROGRAMACIÓN WEB
(SELECT * from tabla2 where tabla1.codigo =
tabla2.codigo); muestra los códigos de la tabla1 que no existan en la
tabla2
7. MODIFICAR UN REGISTRO
mysql> UPDATE clientes SET sueldo="500" WHERE nombre="pablo";
mysql> UPDATE clientes set sueldo="600" where edad=30;
8. BORRAR TODOS LOS REGISTROS DE LA TABLA
mysql> DELETE from clientes;
8.1. BORRAR UNA TABLA Y SU ESTRUCTURA
mysql> drop table clientes;
8.2. BORRAR UNA BASE DE DATOS
mysql> drop database datos;
9. RELACIONES ENTRE LAS TABLAS
Se crean dos tablas con un campo que se llama factura de tipo int(1), este va ha ser la
llave de las tablas por la cual se van ha relacionar.Para poder mostrar tablas con datos
que las relacionan podemos hacerlo mediante el siguiente comando select:
mysql> select cabecera.nombre,detalle.remedio from cabecera,detalle where
-> cabecera.factura=1 and detalle.factura=1;
+--------+------------+
| nombre | remedio |
+--------+------------+
| pablo | mejoral |
| pablo | aspirina |
| pablo | vitamina c |
| pablo | cebion |
+--------+------------+
los campos que relacionan estas tablas son el número de la factura
Otra forma puede ser:
select cabecera.nombre,detalle.remedio from cabecera,detalle where
-> cabecera.factura=detalle.factura;
esto mostrara todos los campos en orden de relación.
Ing. Jaime Suasnábar Terrel Página 9
10. TALLER DE PROGRAMACIÓN WEB
+--------+------------+
| nombre | remedio |
+--------+------------+
| pablo | mejoral |
| pablo | aspirina |
| pablo | vitamina c |
| pablo | cebion |
| juan | complejo B |
| juan | contrex |
| juan | mentol |
+--------+------------+
7 rows in set (0.00 sec)
10. CREACIÓN DE USUARIOS Y PERMISOS PARA LAS TABLAS
Una vez creada la base de datos se le puede dar permisos para que solo un usuario
determinado pueda usar dicha base de datos la forma de hacerlo es la siguiente:
mysql –u root –p se ingresa con el usuario de administrador
grant all on pruebas.* to ua033333@localhost identified by ‘clave’
flush privileges;
donde pruebas es la base de datos y ua033333 es el usuario al que se quiere dar
acceso y clave la clave del usuario.
Para ingresar a la base se pone mysql -u ua033333 –p y se introduce la clave
Para cambiar de clave se pone
SET PASSWORD FOR 'ua033333@localhost' = PASSWORD( '**********' )
Otra forma de crear usuarios es ingresar con la clave de root a la base de datos y poner
las siguientes sentencias:
use mysql;
insert into user values("localhost", "nombredeusuario",
password("clavedeusuario"), "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y",
"Y", "Y", "Y", "Y");
insert into db values ("localhost", "basededatosconcreta", "nombredeusuario",
"Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y");
exit;
Ing. Jaime Suasnábar Terrel Página 10