Top Banner
Tutorial de MySQL M. en C. Erika Vilches
40

Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Feb 13, 2019

Download

Documents

vanquynh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Tutorial de MySQLM. en C. Erika Vilches

Page 2: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Presentación y BD

• Bajar esta presentación:www.erika-vilches.com/mysql.pdf

• Bajar una base de datos muestra: www.erika-vilches.com/db.sql

• Cargar base de datos: $ wget www.erika-vilches.com/db.sql$ $ mysql --user=yourname --password=yourpass < db.sql

Page 3: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Iniciando el cliente de Línea de Comandos

$ mysqlWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 2084 to server version: 4.1.12-standard-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Iniciando el cliente (conexión anónima):

Si el cliente no permite conexiones anónimas:$ mysqlERROR 1045 (28000): Access denied for user 'evilches'@'localhost'(using password: NO)

$ mysqlERROR 2002 (HY000): Can't connect to local MySQL server throughsocket '/var/lib/mysql/mysql.sock' (2)

Si el servidor MySQL no esta corriendo:

Errores comunes:

Page 4: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Conexión con usuario y password:

$ mysql --user=yourname --password=yourpass

Password visible en la pantalla en texto plano:

$ mysql --user=yourname --passwordEnter password:

Password no visible en la pantalla. No se despliega mientras se escribe:

ERROR 1045 (28000): Access denied for user 'yourname'@'localhost'(using password: YES)

En caso de error:

$ mysql --host=host.yourdomain.com --user=yourname --password

Para conectarse a un servidor remoto:

$ mysql --host=IP --user=yourname --password

$ mysql --host host.yourdomain.com --user yourname --password

Page 5: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Puerto default: 3306. Si el servidor utiliza un puerto distinto, especificarlo usando o --port= -P

Si se desea utilizar una base de datos en especifico, utilizar o , o simplemente especificando

el nombre de la base de datos al final:--database -D

Abreviadamente:

$ mysql -h host.yourdomain.com -u yourname -p

$ mysql -hhost.yourdomain.com -uyourname -ppaswword

$ mysql -h host.yourdomain.com -u yourname -p password

Incorrecto (trata al password como nombre de la base):

$ mysql --host=host.yourdomain.com --user=yourname --password dbname

Page 6: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Ejecutando comandos SQL

Seleccionando una base de datos a utilizar:

mysql> show databases;+--------------------+| Database |+--------------------+| mysql || test || yourdb |+--------------------+3 rows in set (0.00 sec)

Ver las bases de datos disponibles:

Seleccionar una base de datos:mysql> \u yourdbDatabase changed

mysql> use yourdbDatabase changedo

Si la base no existe:mysql> \u wrongdbERROR 1049 (42000): Unknown database 'wrongdb'

\comando NO es SQL, es comando interno de

MySQL

Page 7: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Mostrando el status de la conexión:

mysql> \s- - - - - - - C:\Program Files\MySQL\MySQL Server 4.1\bin\mysql.exe Ver 14.7 Distrib 4.1.14, for Win32 (ia32)Connection id: 94Current database: mysqlin10Current user: root@localhostSSL: Not in useUsing delimiter: ;Server version: 4.1.14-ntProtocol version: 10Connection: localhost via TCP/IPServer characterset: latin1Db characterset: latin1Client characterset: latin1Conn. characterset: latin1TCP port: 3306Uptime: 35 days 5 hours 34 min 51 sec

Threads: 1 Questions: 542843 Slow queries: 18 Opens: 546Flush tables: 1 Open tables: 0 Queries per second avg: 0.178- - - - - - - -

Para salir del cliente MySQL:

\q quit exit

Page 8: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Delimitación de comandos usando “;” :mysql> SHOW DATABASES ->

mysql> SELECT first_name, last_name -> FROM customer_contacts -> WHERE customer_code = 'PRESINC' -> ORDER BY last_name;+------------+-----------+| first_name | last_name |+------------+-----------+| Abraham | Lincoln || Richard | Nixon || Franklin | Roosevelt || Theodore | Roosevelt |+------------+-----------+4 rows in set (0.00 sec)

mysql> show databases;+--------------------+| Database |+--------------------+| mysql || test || yourdb |+--------------------+3 rows in set (0.00 sec)

Otra forma de delimitar un comando “\g”:mysql> show databases \g+--------------------+| Database |+--------------------+| mysql || test || yourdb |+--------------------+3 rows in set (0.00 sec)

Page 9: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Formato de salida -> Vertical:mysql> SELECT * FROM products -> \G*************************** 1. row *************************** code: MINI name: Small productweight: 1.50 price: 5.99*************************** 2. row *************************** code: MIDI name: Medium productweight: 4.50 price: 9.99*************************** 3. row *************************** code: MAXI name: Large productweight: 8.00 price: 15.993 rows in set (0.02 sec)

Cuando un query no regresa nada:mysql> SELECT * -> FROM emptytable;Empty set (0.00 sec)

Producido con o con el switch . Tambien existe el switch y (switchs usados al iniciar

el cliente).

\G --vertical

--html --xml

Page 10: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Comando SELECT

• Utilidad: Obtener registros de información

• Se debe especificar de qué tabla con FROM

Regresando columnas individuales:mysql> SELECT name -> FROM customers;+-------------------------+| name |+-------------------------+| Presidents Incorporated || Science Corporation || Musicians of America |+-------------------------+3 rows in set (0.02 sec)

Devolverá todos los registros de la tabla a menos que se le indique lo contrario

Page 11: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Regresando columnas múltiples:

mysql> SELECT name, price, weight -> FROM products;+----------------+-------+---------+| name | price | weight |+----------------+-------+---------+| Small product | 5.99 | 1.50 || Medium product | 9.99 | 4.50 || Large product | 15.99 | 8.00 |+----------------+-------+---------+3 rows in set (0.00 sec)

Regresando todas las columnas:

mysql> SELECT * -> FROM products;+------+----------------+--------+-------+| code | name | weight | price |+------+----------------+--------+-------+| MINI | Small product | 1.50 | 5.99 || MIDI | Medium product | 4.50 | 9.99 || MAXI | Large product | 8.00 | 15.99 |+------+----------------+--------+-------+3 rows in set (0.00 sec)

Page 12: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Conociendo la definición de una tabla:mysql> DESCRIBE products;+--------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+--------+--------------+------+-----+---------+-------+| code | varchar(10) | | | | || name | varchar(40) | | | | || weight | decimal(6,2) | | | 0.00 | || price | decimal(6,2) | | | 0.00 | |+--------+--------------+------+-----+---------+-------+4 rows in set (0.00 sec)

Si la tabla no existe:mysql> SELECT * -> FROM product;ERROR 1146 (42S02): Table sampdb.product' doesn't exist

Si la columna no existe:mysql> SELECT name -> FROM customer_contacts;ERROR 1054 (42S22): Unknown column 'name' in 'field list'

Page 13: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Errores de sintaxis:

mysql> SELECT first_name, last name, -> FROM customer_contacts;ERROR 1064 (42000): You have an error in your SQL syntax; checkthe manual that corresponds to your MySQL server version forthe right syntax to use near 'FROM customer_contacts' at line 2

mysql> SELECT name -> FORM products;ERROR 1064 (42000): You have an error in your SQL syntax; checkthe manual that corresponds to your MySQL server version forthe right syntax to use near 'products' at line 2

Devolviendo la lista de bases de datos:mysql> SHOW DATABASES;+-------------------+| Database |+-------------------+| mysqlin10 || mydb |+-------------------+2 rows in set (0.00 sec)

Page 14: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Devolviendo la lista de tablas en la base de datos en uso:

mysql> SHOW TABLES;+---------------------+| Tables_in_mysqlin10 |+---------------------+| customer_contacts || customers || order_lines || orders || products |+---------------------+5 rows in set (0.00 sec)

mysql> SHOW TABLES FROM sampdb;+---------------------+| Tables_in_sambdb |+---------------------+| customer_contacts || customers || order_lines || orders || products |+---------------------+5 rows in set (0.00 sec)

Devolviendo la lista de tablas en otra base de datos distinta a la que esta en uso:

Page 15: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

mysql> SHOW COLUMNS FROM products;+--------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+--------+--------------+------+-----+---------+-------+| code | varchar(10) | | | | || name | varchar(40) | | | | || weight | decimal(6,2) | | | 0.00 | || price | decimal(6,2) | | | 0.00 | |+--------+--------------+------+-----+---------+-------+4 rows in set (0.00 sec)

Devolver la estructura de una tabla:

Shotcut: DESCRIBE table

mysql> DESCRIBE products;+--------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+--------+--------------+------+-----+---------+-------+| code | varchar(10) | | | | || name | varchar(40) | | | | || weight | decimal(6,2) | | | 0.00 | || price | decimal(6,2) | | | 0.00 | |+--------+--------------+------+-----+---------+-------+4 rows in set (0.00 sec)

Page 16: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Cláusula WHERE

• Utilidad: Se añade al comando SELECT para filtrar los resultados basándose en una condición (solo los registros que la cumplan serán devueltos).

Page 17: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

mysql> SELECT * -> FROM products -> WHERE code(=)'MINI';+------+----------------+--------+-------+| code | name | weight | price |+------+----------------+--------+-------+| MIDI | Medium product | 4.50 | 9.99 || MAXI | Large product | 8.00 | 15.99 |+------+----------------+--------+-------+2 rows in set (0.02 sec)s

Filtrado sobre un valor exacto:

mysql> SELECT id, first_name, last_name -> FROM customer_contacts -> WHERE customer_code = 'SCICORP';+----+------------+-----------+| id | first_name | last_name |+----+------------+-----------+| 4 | Albert | Einstein || 5 | Charles | Darwin || 6 | Marie | Curie || 7 | Benjamin | Franklin |+----+------------+-----------+4 rows in set (0.03 sec)

mysql> SELECT * -> FROM products -> WHERE code = 'MIDI';+------+----------------+--------+-------+| code | name | weight | price |+------+----------------+--------+-------+| MIDI | Medium product | 4.50 | 9.99 |+------+----------------+--------+-------+1 row in set (0.00 sec)

Page 18: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Filtrado sobre un rango de valores:

mysql> SELECT * -> FROM products -> WHERE price <= 9.99;+------+----------------+--------+-------+| code | name | weight | price |+------+----------------+--------+-------+| MINI | Small product | 1.50 | 5.99 || MIDI | Medium product | 4.50 | 9.99 |+------+----------------+--------+-------+2 rows in set (0.00 sec)

mysql> SELECT last_name -> FROM customer_contacts -> WHERE last_name > 'G';+-----------+| last_name |+-----------+| Lincoln || Nixon || Roosevelt || Gershwin || Lennon |+-----------+5 rows in set (0.00 sec)

“Gershwin” es mayor que “G”, funciona igual que en un diccionario

(iría después).

Page 19: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Uso de comillas en valores no numéricos:

mysql> SELECT last_name -> FROM customer_contacts -> WHERE first_name = Benjamin;ERROR 1054 (42S22): Unknown column 'Benjamin' in 'where clause'

mysql> SELECT last_name -> FROM customer_contacts -> WHERE first_name = 'Benjamin';+-----------+| last_name |+-----------+| Franklin || Britten |+-----------+2 rows in set (0.00 sec)

Incorrecto:

Correcto:

Page 20: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

mysql> SELECT last_name -> FROM customer_contacts -> WHERE 'Benjamin' = first_name;+-----------+| last_name |+-----------+| Franklin || Britten |+-----------+2 rows in set (0.00 sec)

Funciona pero esta fuera de la convenciónWHERE column = ‘value’

mysql> SELECT first_name, last_name -> FROM customer_contacts -> WHERE first_name = last_name;Empty set (0.00 sec)

Peculiar comparación de columnas de la misma tabla:

Page 21: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Cláusula ORDER BY

• Utilidad: Especificar el ordenamiento del resultado de un query.

mysql> SELECT * -> FROM products -> ORDER BY price;+------+----------------+--------+-------+| code | name | weight | price |+------+----------------+--------+-------+| MINI | Small product | 1.50 | 5.99 || MIDI | Medium product | 4.50 | 9.99 || MAXI | Large product | 8.00 | 15.99 |+------+----------------+--------+-------+3 rows in set (0.00 sec)

mysql> SELECT first_name, last_name -> FROM customer_contacts -> WHERE customer_code = 'SCICORP' -> ORDER BY last_name; +------------+-----------+| first_name | last_name |+------------+-----------+| Marie | Curie || Charles | Darwin || Albert | Einstein || Benjamin | Franklin |+------------+-----------+4 rows in set (0.00 sec)

Ordenando sobre una sola columna:

Page 22: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Ordenando sobre múltiples columnas:mysql> SELECT order_date, customer_code -> FROM orders -> ORDER BY order_date, customer_code;+------------+---------------+| order_date | customer_code |+------------+---------------+| 2006-01-23 | PRESINC || 2006-01-23 | SCICORP || 2006-01-26 | PRESINC || 2006-02-01 | MUSGRP || 2006-02-02 | MUSGRP || 2006-02-02 | SCICORP || 2006-02-05 | SCICORP |+------------+---------------+7 rows in set (0.00 sec)

Especificando el orden:mysql> SELECT * -> FROM products -> ORDER BY weight DESC;+------+----------------+--------+-------+| code | name | weight | price |+------+----------------+--------+-------+| MAXI | Large product | 8.00 | 15.99 || MIDI | Medium product | 4.50 | 9.99 || MINI | Small product | 1.50 | 5.99 |+------+----------------+--------+-------+3 rows in set (0.00 sec)

Opcional: ASC

Page 23: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Combinando cláusulas WHERE

Operador AND:

mysql> SELECT * FROM orders -> WHERE customer_code = 'Scicorp' -> AND order_date >= '2006-02-01';+----+---------------+------------+| id | customer_code | order_date |+----+---------------+------------+| 4 | Scicorp | 2006-02-02 || 5 | SCICORP | 2006-02-05 |+----+---------------+------------+2 rows in set (0.00 sec)

mysql> SELECT * FROM orders -> WHERE customer_code = 'Scicorp' -> OR order_date >= '2006-02-01';+----+---------------+------------+| id | customer_code | order_date |+----+---------------+------------+| 3 | SCICORP | 2006-01-23 || 4 | SCICORP | 2006-02-02 || 5 | SCICORP | 2006-02-05 || 6 | MUSGRP | 2006-02-01 || 7 | MUSGRP | 2006-02-02 |+----+---------------+------------+5 rows in set (0.00 sec)

Operador OR:

Page 24: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Buscar un mismo valor en dos columnas:

mysql> SELECT first_name, last_name -> FROM customer_contacts -> WHERE first_name = 'Franklin' -> OR last_name = 'Franklin';+------------+-----------+| first_name | last_name |+------------+-----------+| Franklin | Roosevelt || Benjamin | Franklin |+------------+-----------+2 rows in set (0.00 sec)

Buscar dos valores en la misma columna:

mysql> SELECT first_name, last_name -> FROM customer_contacts -> WHERE first_name = 'Benjamin' -> OR first_name = 'Charles';+------------+-----------+| first_name | last_name |+------------+-----------+| Charles | Darwin || Benjamin | Franklin || Benjamin | Britten |+------------+-----------+3 rows in set (0.00 sec)

mysql> SELECT first_name, last_name -> FROM customer_contacts -> WHERE first_name IN ('Benjamin', 'Charles');+------------+-----------+| first_name | last_name |+------------+-----------+| Charles | Darwin || Benjamin | Franklin || Benjamin | Britten |+------------+-----------+3 rows in set (0.00 sec)

o

Page 25: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Buscar en un rango de valores (inclusive):mysql> SELECT * -> FROM orders -> WHERE order_date BETWEEN '2006-01-24' AND '2006-01-30';+----+---------------+------------+| id | customer_code | order_date |+----+---------------+------------+| 2 | PRESINC | 2006-01-26 || 3 | SCICORP | 2006-01-23 |+----+---------------+------------+2 rows in set (0.00 sec)

Negando una condición:mysql> SELECT first_name, last_name FROM customer_contacts -> WHERE customer_code = 'PRESINC' -> AND first_name NOT IN ('Abraham', 'Theodore');+------------+-----------+| first_name | last_name |+------------+-----------+| Richard | Nixon || Franklin | Roosevelt |+------------+-----------+2 rows in set (0.00 sec)

mysql> SELECT * FROM orders -> WHERE order_date NOT BETWEEN '2006-01-26' AND '2006-02-03';+----+---------------+------------+| id | customer_code | order_date |+----+---------------+------------+ | 1 | PRESINC | 2006-01-23 || 3 | SCICORP | 2006-01-23 || 5 | SCICORP | 2006-02-05 |+----+---------------+------------+3 rows in set (0.00 sec)

Page 26: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Precedencia de operadores: AND > OR > NOT

mysql> SELECT customer_code, first_name, last_name -> FROM customer_contacts -> WHERE customer_code = 'SCICORP' -> AND first_name = 'Albert' -> OR first_name = 'Benjamin';+---------------+------------+-----------+| customer_code | first_name | last_name |+---------------+------------+-----------+| SCICORP | Albert | Einstein || SCICORP | Benjamin | Franklin || MUSGRP | Benjamin | Britten |+---------------+------------+-----------+3 rows in set (0.00 sec)

Cambiando las precedencias:mysql> SELECT customer_code, first_name, last_name -> FROM customer_contacts -> WHERE customer_code = 'SCICORP' -> AND (first_name = 'Albert' -> OR first_name = 'Benjamin');+---------------+------------+-----------+| customer_code | first_name | last_name |+---------------+------------+-----------+| SCICORP | Albert | Einstein || SCICORP | Benjamin | Franklin |+---------------+------------+-----------+2 rows in set (0.00 sec)

Page 27: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Limitando el numero de registros de respuesta:mysql> SELECT first_name, last_name -> FROM customer_contacts -> ORDER BY last_name -> LIMIT 3;+------------+-----------+| first_name | last_name |+------------+-----------+| Benjamin | Britten || Marie | Curie || Charles | Darwin |+------------+-----------+3 rows in set (0.00 sec)

Devolviendo el valor más alto solamente:mysql> SELECT * -> FROM products -> ORDER BY price DESC -> LIMIT 1;+------+---------------+--------+-------+| code | name | weight | price |+------+---------------+--------+-------+| MAXI | Large product | 8.00 | 15.99 |+------+---------------+--------+-------+1 row in set (0.00 sec)

Page 28: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Saltándose registros: (Offset)

mysql> SELECT email -> FROM customer_contacts -> ORDER BY email -> LIMIT 3;+--------------------------+| email |+--------------------------+| [email protected] || [email protected] || [email protected] |+--------------------------+3 rows in set (0.00 sec)

mysql> SELECT email -> FROM customer_contacts -> ORDER BY email -> LIMIT 3,3;+--------------------------+| email |+--------------------------+| [email protected] || [email protected] || [email protected] |+--------------------------+3 rows in set (0.00 sec)

Solo los primeros 3: (equivalente a LIMIT 0,3)

Solo 3, saltándose los primeros 3:

Page 29: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Aún faltan muchos comandos para generar consultas por ver... pero de momento es

mas importante que conozcan como crear una base de datos... (proyecto de su

profesor)

Page 30: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Manejando una Base de Datos

mysql> CREATE DATABASE newdb;Query OK, 1 row affected (0.02 sec)

Si la base de datos ya existe:mysql> CREATE DATABASE newdb;ERROR 1007 (HY000): Can't create database 'newdb';database exists

Creando la base:

Prevención:mysql> CREATE DATABASE IF NOT EXISTS newdb;Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;+-------+------+--------------------------------------------------+| Level | Code | Message |+-------+------+--------------------------------------------------+| Note | 1007 | Can't create database 'newdb'; database exists |+-------+------+--------------------------------------------------+1 row in set (0.00 sec)

Page 31: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Cambiando las características de una base existente:mysql> ALTER DATABASE greekdb -> CHARACTER SET ascii;Query OK, 1 row affected (0.00 sec)

Eliminando una base:mysql> DROP DATABASE greekdb;Query OK, 0 rows affected (0.00 sec)

Creando una tabla:CREATE TABLE products ( product_code VARCHAR(10) PRIMARY KEY, name VARCHAR(40) NOT NULL UNIQUE, weight DECIMAL(6,2) NOT NULL, price DECIMAL(6,2) NOT NULL);

Page 32: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Especificando valores default:

mysql> CREATE TABLE people ( -> name VARCHAR(40), -> sex VARCHAR(6) DEFAULT 'Female' -> );Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO people (name) -> VALUES ('Jane Doe');Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM people;+----------+--------+| name | sex |+----------+--------+| Jane Doe | Female |+----------+--------+1 row in set (0.00 sec)

Page 33: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Autoincrementando columnas:CREATE TABLE orders ( order_id INT PRIMARY KEY AUTO_INCREMENT, customer_code VARCHAR(10) NOT NULL, order_date DATE NOT NULL);

mysql> INSERT INTO orders (customer_code, order_date) -> VALUES ('SCICORP','2006-03-20');Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM orders -> ORDER BY order_id DESC -> LIMIT 2;+----------+---------------+------------+| order_id | customer_code | order_date |+----------+---------------+------------+| 8 | SCICORP | 2006-03-20 || 7 | MUSGRP | 2006-02-02 |+----------+---------------+------------+2 rows in set (0.00 sec)

Page 34: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Cambiando la definición de una tabla:

mysql> ALTER TABLE customer_contacts -> ADD fax VARCHAR(12);Query OK, 11 rows affected (0.00 sec)Records: 11 Duplicates: 0 Warnings: 0

Añadiendo una columna:

mysql> ALTER TABLE customer_contacts -> CHANGE fax fax TEXT;Query OK, 11 rows affected (0.01 sec)Records: 11 Duplicates: 0 Warnings: 0

Cambiando el tipo de la columna sin cambiar el nombre:

Eliminando una columna:

mysql> ALTER TABLE customer_contacts -> DROP fax;Query OK, 11 rows affected (0.00 sec)Records: 11 Duplicates: 0 Warnings: 0

Page 35: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Eliminando una tabla:

mysql> DROP TABLE people;Query OK, 0 rows affected (0.00 sec)

Page 36: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Otra cosa útil para su proyecto... el manejo de usuarios

Page 37: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Manejo de UsuariosCreando un usuario, que se conectara solamente desde localhost:

mysql> CREATE USER evilches@localhost IDENTIFIED BY 'mypass';Query OK, 0 rows affected (0.02 sec)

Asignando o cambiando un password:mysql> SET PASSWORD FOR evilches@localhost = PASSWORD('newpass');Query OK, 0 rows affected (0.00 sec)

Error (omitir la función password):mysql> SET PASSWORD FOR evilches@localhost = 'newpass';ERROR 1372 (HY000): Password hash should be a 41-digithexadecimal number

mysql> SET PASSWORD = PASSWORD('newpass');Query OK, 0 rows affected (0.00 sec)

Cambiar password del usuario loggeado:

Page 38: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Dando privilegios:

mysql> GRANT SELECT, INSERT -> ON mysql10.products -> TO evilches@localhost;Query OK, 0 rows affected (0.00 sec)

Privilegio select e insert para usuario evilches, en localhost, en la tabla products, de la base mysql10:

Al conectarse como el usuario evilches, a la base mysql10: mysql> show tables;

+-------------------+| Tables_in_mysql10 |+-------------------+| products |+-------------------+1 row in set (0.00 sec)

Permite hacer consultas sobre la tabla, insertar registros, pero no le permite usar DELETE

mysql> INSERT INTO products -> (product_code, name, weight, price) -> VALUES -> ('MYPROD', 'My new product', 1.00, 1.99);Query OK, 1 row affected (0.03 sec)

mysql> DELETE FROM products;ERROR 1142 (42000): DELETE command denied to user 'evilches'@'localhost' for table 'products'

Page 39: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Revocando privilegios:

mysql> REVOKE INSERT -> ON mysql10.products -> FROM evilches@localhost;Query OK, 0 rows affected (1.25 sec)

Revocando el privilegio INSERT (el privilegio SELECT asignado no se ve afectado):

Page 40: Tutorial de MySQL - tierravirtual.cl de mysql.pdf · $ mysql -hhost.yourdomain.com -uyourname -ppaswword $ mysql -h host.yourdomain.com -u yourname -p password Incorrecto (trata al

Muchas gracias por su atención.

Dudas: [email protected]