Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MySQL
Objetivo
Aprender los fundamentos del manejo de informacin en MySQL.
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL Dentro del cliente de MySQL podemos utilizar un gran nmero de comandos, despus de teclear cada comando se termina con el carcter de punto y coma (;) para indicarle a MySQL que ejecute la instruccin. Por ejemplo, para obtener el listado de bases de datos utilizamos el comando SHOW DATABASES;
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL Para utilizar una base de datos utilizamos el comando USE base-de-datos; Para obtener un listado de las tablas utilizamos SHOW TABLES;
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL Para obtener la estructura de una tabla DESC tabla;
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL Para borrar la base de datos utilizamos DROP DATABASE base-de-datos;
10
Texto
CHAR : 0-255 caracteres de longitud fija VARCHAR : 0 - 255 de longitud variable TINYTEXT : 0 - 255 bytes TEXT : 0 - 65535 bytes MEDIUMTEXT : 0 - 16777215 bytes LONGTEXT : 0 - 4294967295 bytes
Objetos Binarios
TINYBLOB : 0-255 bytes BLOB : 0 - 65535 bytes MEDIUMBLOB : 0 - 16777215 bytes LONGBLOB : 0 - 4294967295 bytes
11
Fechas
DATE : Formato YYYY-MM-DD DATETIME : Formato YYYY-MM-DD hh:mm:ss TIMESTAMP : Formato YYYYMMDDhhmmss TIME : hh:mm:ss YEAR : YYYY
Especiales
ENUM Almacena enumeraciones, por ejemplo: (1,5,8). Cuando se asigna un valor a un campo debe estar contenido en la enumeracin. SET Almacena una lista valida de valores, por ejemplo: ("a","b","c","d"). Cuando se asigna un valor a un campo debe estar contenido en la lista y adems se le pueden asignar varios de los valores.
12
Atributos
BINARY Provoca que un campo de texto sea case-sensitive, solo valido para CHAR y VARCHAR. NULL o NOT NULL Permite o impide que un campo sea nulo. Si a un campo no se le especifica un valor, entonces se le asigna el NULL. DEFAULT valor_default Asigna un valor default al campo. En caso que un campo tenga un valor default especificado, este se le asigna cuando el valor es NULL. AUTO_INCREMENT Incrementa en uno el valor mxima que contenga el campo y se lo asigna al nuevo registro, solo puede haber uno por tabla.
Indices
KEY/INDEX Define que el campo sera utilizado como ndice de uno o varios campos. Comnmente se utilizan para agilizar las busquedas de informacin. PRIMARY KEY Define que el campo deber contener valores nicos, no puede contener NULL. Este campo se utiliza para establecer asociaciones entre distintas tablas. UNIQUE Define que el campo deber contener valores nicos.
13
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL Para crear una tabla de categoras podemos utilizar un comando como este: USE base-de-datos; CREATE TABLE categorias ( claveCategoria int(11) NOT NULL auto_increment, categoria varchar(15) NOT NULL default '', notas varchar(255) default NULL, urlImagen varchar(255) default NULL, PRIMARY KEY (claveCategoria), UNIQUE KEY claveCategoria (claveCategoria) ) TYPE=MyISAM
claveCategoria int(11) NOT NULL auto_increment Tipo integer, no permite nulos, su valor se incrementa automaticamente con cada nuevo registro. categoria varchar(15) NOT NULL default '' Tipo string de entre 0 y 15 caracteres, no permite nulos, el valor default que se le asigna cuando no se proporciona un valor es ''. notas varchar(255) default NULL Tipo string de entre 0 y 255 caracteres, si permite nulos. PRIMARY KEY (claveCategoria) Define el campo claveCategoria como la llave primaria de la tabla. UNIQUE KEY claveCategoria (claveCategoria) Define que para el campo claveCategoria se crea un ndice que no permite valores duplicados. TYPE=MyISAM Determina el tipo de tabla que se va a crear, este es el mas comn y no soporta transacciones.
14
15
16
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL Los scripts pueden crear tablas como en el ejemplo anterior, pero tambin se pueden utilizar para insertar datos en las tablas. Por ejemplo el archivo categorias-datos-pruebas.sql contiene los siguientes estatutos: USE pruebas; INSERT INTO `categorias` (`claveCategoria`, `categoria`, `notas`, `urlImagen`) VALUES (1,'Bebidbas','Sodas, cafe, te, cerveza','images/bebidas.jpg'), (2,'Condimentos','Apio, perejil','images/condimentos.jpg'), (3,'Postres','Pasteles, dulces','images/postres.jpg'), (4,'Lacteos','Queso, mantequilla','images/lacteos.jpg'), (5,'Granos/Cereales','Pasta, pan','images/granos.jpg'), (6,'Carnes','Pollo, res, puerco','images/carnes.jpg'), (7,'Vegetales','Tomates, lechuga','images/vegetales.jpg'), (8,'Mariscos','Camarones, ostiones','images/mariscos.jpg');
17
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL Podemos ejecutar varios archivos y de esta manera crear fcilmente tablas e importar informacin en las tablas, por ejemplo: mysql --user=usuario --password=password < /cursos/php/dbscripts/productostabla-pruebas.sql mysql --user=usuario --password=password < /cursos/php/dbscripts/productosdatos-pruebas.sql
Despus de ejecutar estos comandos tendremos dos tablas en la base de datos recin creada:
18
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL Una vez importados los datos en las tablas podemos ejecutar comandos para manipular dicha informacin, por ejemplo el estatuto SELECT. Este estatuto extrae informacin de las tablas, por ejemplo: select * from categorias; Nos arroja un resultado como este:
19
20
Lista de actividades: 1. Arranque el daemon o servicio de MySQL 2. Agregue una base de datos llamada cursophp 3. Agregue una tabla llamada usuarios con las siguientes caractersticas: CREATE TABLE usuarios ( clave int(4) NOT NULL auto_increment, usuario varchar(60) NOT NULL default '', password varchar(60) NOT NULL default '', PRIMARY KEY (clave), UNIQUE KEY clave (clave) ) TYPE=MyISAM;
21
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL 4. En el directorio /cursos/php/dbscripts estn los scripts con las definiciones de las tablas y sus datos 5. Por cada tabla hay un par de scripts: Uno para crear la tabla y otro para insertar datos en la misma. 6. Primero ejecute el script para crear la tabla y posteriormente el script para insertar informacin. Por ejemplo, para la tabla de categoras primero ejecute el script categorias-tabla.sql y luego categoriasdatos.sql. 7. Los scripts estn numerados, van del 01- al 16-, ejectelos en ese orden. Al final deber contar con las siguientes tablas:
22
23
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL La estructura de la tabla es la siguiente:
24
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL Para ver los usuarios registrados podemos ejecutar el estatuto SELECT: select host, user, password from user;
Para crear y otorgar permisos a un nuevo usuario en MySQL podemos insertar registros directamente en la tabla, o bien utilizar el comando GRANT lo cual es la manera recomendada. Para cambiar los permisos se utiliza el comando REVOKE.
25
GRANT
La sintaxis de este comando es la siguiente: GRANT tipo-de-privilegio ON base-de-datos.tabla TO usuario IDENTIFIED BY 'password'; Aqu tenemos algunos ejemplos: GRANT ALL PRIVILEGES ON cursophp.* TO usuarioweb IDENTIFIED BY 'digitever'; Da de alta al usuario usuarioweb con el password digitever. Otorga todos los privilegios aplicables para la base de datos cursophp.
GRANT ALL PRIVILEGES ON cursophp.categorias TO categorias IDENTIFIED BY 'digitever'; Da de alta al usuario categorias con el password digitever. Otorga todos los privilegios aplicables a una tabla para la tabla categorias. GRANT SELECT ON cursophp.* TO soloLectura IDENTIFIED BY 'digitever'; Da de alta al usuario soloLectura con el password digitever. Otorga solamente el privilegio de ejecutar estatutos SELECT en la base de datos cursophp. GRANT SELECT, UPDATE ON cursophp.* TO noAltas IDENTIFIED BY 'digitever'; Da de alta al usuario noAltas con el password digitever. Puede ejecutar estatutos SELECT y UPDATE en la base de datos cursophp. GRANT SELECT (campo1, campo3) ON cursophp.categorias TO restringido IDENTIFIED BY 'digitever'; Da de alta al usuario restringido con el password digitever. Puede ejecutar el estatuto SELECT solamente en los campos especificado en la base de datos cursophp en la tabla categorias.
REVOKE
La sintaxis es similar a la de GRANT: REVOKE tipo-de-privilegio ON base-de-datos.tabla FROM usuario; Ejemplos: REVOKE ALL PRIVILEGES ON cursophp.* FROM usuarioweb; Retira todos los privilegios al usuario usuarioweb aplicables para la base de datos cursophp. REVOKE ALL PRIVILEGES ON *.* FROM usuarioweb; Retira todos los privilegios al usuario usuarioweb aplicables para la todas las base de datos. REVOKE DELETE ON cursophp.categorias FROM usuarioCategorias; Retira el privilegio de ejecutar estatutos DELETE al usuario usuarioCategorias aplicables para la tabla categorias.
26
27
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL Utilizamos el estatuto: delete from user where user='userPruebas'; Al manipular directamente la tabla de usuarios de MySQL tenemos que utilizar el comando FLUSH PRIVILEGES para que MySQL tome en cuenta los cambios:
28
29
SELECT
Extrae informacin de las tablas, sintaxis: SELECT campo1,campo2,....,campoN FROM tabla WHERE condiciones Ejemplos:
mysql> select * from categorias; +----------------+-----------------+--------------------------+------------------------+ | claveCategoria | categoria | notas | urlImagen +----------------+-----------------+--------------------------+------------------------+ | 1 | Bebidbas | Sodas, cafe, te, cerveza | images/bebidas.jpg | 2 | Condimentos | Apio, perejil | images/condimentos.jpg | | 3 | Postres | Pasteles, dulces | images/postres.jpg | 4 | Lacteos | Queso, mantequilla | images/lacteos.jpg | 5 | Granos/Cereales | Pasta, pan | images/granos.jpg | 6 | Carnes | Pollo, res, puerco | images/carnes.jpg | 7 | Vegetales | Tomates, lechuga | images/vegetales.jpg | | 8 | Mariscos | Camarones, ostiones | images/mariscos.jpg +----------------+-----------------+--------------------------+------------------------+
| | | | | | |
mysql> select * from categorias where claveCategoria = 2; +----------------+-------------+---------------+------------------------+ | claveCategoria | categoria | notas | urlImagen | +----------------+-------------+---------------+------------------------+ | 2 | Condimentos | Apio, perejil | images/condimentos.jpg | +----------------+-------------+---------------+------------------------+
mysql> select * from categorias where categoria = 'carnes'; +----------------+-----------+--------------------+-------------------+ | claveCategoria | categoria | notas | urlImagen | +----------------+-----------+--------------------+-------------------+ | 6 | Carnes | Pollo, res, puerco | images/carnes.jpg | +----------------+-----------+--------------------+-------------------+
30
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL mysql> select claveProducto,producto, existencia from productos where existencia < 10 ORDER BY existencia; +---------------+----------------------------+------------+ | claveProducto | producto | existencia | +---------------+----------------------------+------------+ | 5 | Chef Anton's Gumbo Mix | 0 | | 17 | Alice Mutton | 0 | | 29 | Th?ringer Rostbratwurst | 0 | | 31 | Gorgonzola Telino | 0 | | 53 | Perth Pasties | 0 | | 21 | Sir Rodney's Scones | 3 | | 66 | Louisiana Hot Spiced Okra | 4 | | 74 | Longlife Tofu | 4 | | 45 | R?gede sild | 5 | | 8 | Northwoods Cranberry Sauce | 6 | | 68 | Scottish Longbreads | 6 | | 32 | Mascarpone Fabioli | 9 | +---------------+----------------------------+------------+
31
UPDATE
Actualiza informacin, sintaxis: UPDATE tabla SET campo1 = valor1, campo2 = valor2, campoN = valorN WHERE condiciones mysql> select * from entregas; +--------------+------------------+----------------+ | claveEntrega | descripcion | telefono | +--------------+------------------+----------------+ | 1 | Speedy Express | (503) 555-9831 | | 2 | United Package | (503) 555-3199 | | 3 | Federal Shipping | (503) 555-9931 | +--------------+------------------+----------------+ mysql> update entregas set descripcion = 'United Shipping' where claveEntrega = 2; mysql> select * from entregas; +--------------+------------------+----------------+ | claveEntrega | descripcion | telefono | +--------------+------------------+----------------+ | 1 | Speedy Express | (503) 555-9831 | | 2 | United Shipping | (503) 555-3199 | | 3 | Federal Shipping | (503) 555-9931 | +--------------+------------------+----------------+
32
INSERT
Agrega informacin, sintaxis: INSERT tabla (campo1,campo2,....,campoN) VALUES (valor1,valor2,....,valorN) mysql> select * from entregas; +--------------+------------------+----------------+ | claveEntrega | descripcion | telefono | +--------------+------------------+----------------+ | 1 | Speedy Express | (503) 555-9831 | | 2 | United Shipping | (503) 555-3199 | | 3 | Federal Shipping | (503) 555-9931 | +--------------+------------------+----------------+ mysql> insert entregas (descripcion, telefono) values ('Nuevo registro', '(956) 722 -3420') ; mysql> select * from entregas; +--------------+------------------+-----------------+ | claveEntrega | descripcion | telefono | +--------------+------------------+-----------------+ | 1 | Speedy Express | (503) 555-9831 | | 2 | United Shipping | (503) 555-3199 | | 3 | Federal Shipping | (503) 555-9931 | | 4 | Nuevo registro | (956) 722 -3420 | +--------------+------------------+-----------------+
33
DELETE
Borra informacin, sintaxis: DELETE FROM tabla WHERE condiciones mysql> select * from entregas; +--------------+------------------+-----------------+ | claveEntrega | descripcion | telefono | +--------------+------------------+-----------------+ | 1 | Speedy Express | (503) 555-9831 | | 2 | United Shipping | (503) 555-3199 | | 3 | Federal Shipping | (503) 555-9931 | | 4 | Nuevo registro | (956) 722 -3420 | +--------------+------------------+-----------------+ 4 rows in set (0.00 sec) mysql> delete from entregas where claveEntrega = 4; Query OK, 1 row affected (0.00 sec) mysql> select * from entregas; +--------------+------------------+----------------+ | claveEntrega | descripcion | telefono | +--------------+------------------+----------------+ | 1 | Speedy Express | (503) 555-9831 | | 2 | United Shipping | (503) 555-3199 | | 3 | Federal Shipping | (503) 555-9931 | +--------------+------------------+----------------+
34
35
Programacin WEB con PHP Y MySQL (IT Tapachula) MySQL Para obtener la descripcin de la categora para su respectiva clave almacenada en productos el join seria como este: mysql> select productos.claveProducto, productos.producto, categorias.categoria from productos, categorias where productos.claveCategoria = categorias.claveCategoria; +---------------+----------------------------------+-----------------+ | claveProducto | producto | categoria | +---------------+----------------------------------+-----------------+ | 1 | Chai | Bebidbas | | 2 | Chang | Bebidbas | | 24 | Guaran? Fant?stica | Bebidbas | | 75 | Rh?nbr?u Klosterbier | Bebidbas | | 76 | Lakkalik??ri | Bebidbas | | 3 | Aniseed Syrup | Condimentos | | 4 | Chef Anton's Cajun Seasoning | Condimentos | | 5 | Chef Anton's Gumbo Mix | Condimentos | | 6 | Grandma's Boysenberry Spread | Condimentos | | 66 | Louisiana Hot Spiced Okra | Condimentos | | 77 | Original Frankfurter gr?ne So?e | Condimentos | | 16 | Pavlova | Postres | | 48 | Chocolade | Postres | | 49 | Maxilaku | Postres | | 50 | Valkoinen suklaa | Postres | | 62 | Tarte au sucre | Postres | | 68 | Scottish Longbreads | Postres | | 78 | nuevo01 | Postres | | 11 | Queso Cabrales | Lacteos | | 12 | Queso Manchego La Pastora | Lacteos | | 31 | Gorgonzola Telino | Lacteos | | 72 | Mozzarella di Giovanni | Lacteos | | 22 | Gustaf's Kn?ckebr?d | Granos/Cereales | | 23 | Tunnbr?d | Granos/Cereales | | 64 | Wimmers gute Semmelkn?del | Granos/Cereales | | 9 | Mishi Kobe Niku | Carnes | | 17 | Alice Mutton | Carnes | | 7 | Uncle Bob's Organic Dried Pears | Vegetales | | 14 | Tofu | Vegetales | | 28 | R?ssle Sauerkraut | Vegetales | | 51 | Manjimup Dried Apples | Vegetales | | 74 | Longlife Tofu | Vegetales | | 10 | Ikura | Mariscos | | 46 | Spegesild | Mariscos | | 58 | Escargots de Bourgogne | Mariscos | | 73 | R?d Kaviar | Mariscos | +---------------+----------------------------------+-----------------+ 36