Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Fundamentos Mysql

Descargar como ppt, pdf o txt
Descargar como ppt, pdf o txt
Está en la página 1de 89

BASE DE DATOS

El Lenguaje SQL de las Bases de Datos


Relacionales
CONTENIDO
» SQL: Definición, Características, Estructura del Lenguaje.
» Mysql Gestor de Base de Datos Open Source: Origen e Historia,
Características Distintivas, Clientes, Características Generales, Arquitectura
del Servidor, Motores de Almacenamiento, El Cliente de Mysql.
» Tipos de Datos en Mysql: Numéricos, Fecha y Hora, Cadena
» DDL: CREATE DATABASE, CREATE TABLE, CREATE VIEW, DROP
TABLE, DROP VIEW, DROP DATABASE, ALTER TABLE, ALTER
VIEW, SHOW CREATE VIEW, SHOW CREATE TABLE
» DML: INSERT, UPDATE, DELETE, SELECT, Operadores en SQL,
Funciones de Agrupación
» DCL: CREATE USER, GRANT, REVOKE, DROP USER, SHOW GRANTS
CONTENIDO
» Operadores en SQL: Operadores Lógicos, Comparación, Aritméticos
» Funciones de Agrupación
» Algebra Relacional: Selección, Proyección, Producto Cartesiano,
Renombramiento, JOIN, LEFT JOIN, RIGHT JOIN, IN, NOT IN
SQL: Definición
El lenguaje de consulta estructurado o SQL (por sus siglas en
inglés Structured Query Language) es un lenguaje declarativo de
acceso a bases de datos relacionales que permite especificar diversos
tipos de operaciones en éstas.

Una de sus características es el manejo del álgebra y el cálculo


relacional permitiendo efectuar consultas con el fin de recuperar de una
forma sencilla información de interés de una base de datos, así como
también hacer cambios sobre ella.
SQL: Características
• SQL contiene la funcionalidad tanto de un DDL (Data Definition
Language), como de un DML (Data Manipulation Language), y un
DCL (Data Control Language).

• Explota la flexibilidad y potencia de los sistemas relacionales


permitiendo gran variedad de operaciones en éstos últimos.

• Es un lenguaje declarativo de "alto nivel" o "de no procedimiento",


orientado al manejo de conjuntos de registros, y no a registros
individuales, que permite una alta productividad en codificación y la
orientación a objetos.

• Es un lenguaje declarativo, que especifica qué es lo que se quiere,


por lo que una sentencia no establece explícitamente un orden de
ejecución.
SQL: Estructura Del Lenguaje
• SQL sólo contiene un limitado número de verbos o palabras claves,
distribuidos en tres grandes grupos funcionales:

 DDL: Lenguaje de Definición de Datos. (Data Definition


Language). Es el lenguaje que se usa para crear, modificar y
borrar bases de datos, tablas, campos de estas.

 DML: Lenguaje de Manipulación de Datos. (Data Manipulation


Language). Es el que se usa para modificar, consultar datos
desde las bases de datos, borrar e insertar datos en tablas y
vistas.

 DCL:Lenguaje de Control de Datos. (Data Control Language).


Contiene los operadores primitivos de gestión de prioridades de
acceso a los datos, tanto para otorgarlos como revocarlos.
SQL: Estructura del Lenguaje
Mysql Gestor de Base de Datos Open
Source: Origen e Historia
• MySQL es un programa de licencia open-source y gratuito pero
que, sin embargo, está mantenido por una empresa, MySQL AB,
con sede en Suecia.

• El código fuente de MySQL está sólo relativamente abierto y


disponible para modificaciones, puesto que es la empresa MySQL
AB la que contrata y coordina los trabajos de mantenimiento del
producto.

• Los trabajadores contratados, procedentes de todo el mundo, son


usuarios del producto que realizan sus encargos a través de
Internet.

SERVER
Mysql Gestor de Base de Datos Open
Source: Caracteristicas Distintivas
Las siguientes características son implementadas únicamente por
MySQL:
•Múltiples motores de almacenamiento (MyISAM, Merge, InnoDB,
BDB, Memory/heap, MySQL Cluster, Federated, Archive, CSV,
Blackhole y Example en 5.x), permitiendo al usuario escoger la que
sea más adecuada para cada tabla de la base de datos.

•Agrupación de transacciones, reuniendo múltiples transacciones de


varias conexiones para incrementar el número de transacciones por
segundo.

•MySQL Server ofrece hoy una rica variedad de funciones, que da


respuesta a servicios informativos de gran tamaño con un costo bajo.
Mysql Gestor de Base de Datos Open
Source: Caracteristicas Distintivas
• Potencia, puesto que SQL es un lenguaje muy potente para
consulta de bases de datos.
• Portabilidad, por ser SQL estandarizado las consultas hechas
usando SQL son fácilmente portables a otros sistemas y
plataformas.
• Escalabilidad, permite manipular bases de datos de 6000 tablas con
multitud de tipos de columnas, alrededor de 50 millones de
registros, hasta 32 índices por tabla y registros de longitud fija o
variable.
• Conectividad, permite conexiones entre diferentes máquinas con
distintos sistemas operativos. Tal como es frecuente servidores
Linux o Unix, usando MySQL, que sirvan datos a ordenadores con
Windows, Linux, Solaris, entre otros.
• Multihilo, se beneficia con sistemas multiprocesador.
Mysql Gestor de Base de Datos Open
Source: Caracteristicas Generales
• MySQL funciona sobre múltiples plataformas, incluyendo: AIX ,
FreeBSD , HP-UX , GNU/Linux, Mac OS X, NetBSD, Novell
Netware, OS/2 Warp, QNX, SGI IRIX, Solaris, SunOS, SCO
OpenServer, SCO UnixWare, Windows (todas).

• Requiere de una arquitectura de hardware mínima para ser


ejecutado.

• Seguridad, ofrece un sistema de contraseñas y privilegios seguro


mediante verificación basada en el host y el tráfico de contraseñas
está cifrado al conectarse a un servidor.

SERVER
Mysql Gestor de Base de Datos Open
Source: Caracteristicas Generales
• Soporta gran cantidad de datos: MySQL Server tiene bases de
datos de hasta 50 millones de registros.

• Se permiten hasta 64 índices por tabla (32 antes de MySQL


4.1.2): Cada índice puede consistir desde 1 hasta 16 columnas o
partes de columnas. El máximo ancho de límite son 1000 bytes
(500 antes de MySQL 4.1.2).
• Consiste en un sistema cliente/servidor que se compone de un
servidor SQL multihilo, varios programas clientes y bibliotecas,
herramientas administrativas, y una gran variedad de interfaces de
programación (APIs – Application Programming Interface).

SERVER
Mysql Gestor de Base de Datos Open
Source: Arquitectura del Servidor
Podemos imaginar la arquitectura interna de MySQL dividida en tres
capas. Se trata de una división lógica, que no coincide necesariamente
con la división interna del código, pero ayuda a entender los
conceptos. Las tres capas son:
• Capa de Conexión: En la que reside la funcionalidad que
conecta MySQL con otros sistemas y lenguajes (APIs, sockets,
ODBC, etc.)
• Capa de Lógica: En la que reside la lógica para procesar
consultas SQL (sentencias, planificación, ejecución, cachés,
etc.)
• Capa de Almacenamiento: En la que reside la lógica para
almacenar y acceder a los datos de las tablas. Una
característica de MySQL es que puede utilizar distintos motores
de almacenamiento.

SERVER
Mysql Gestor de Base de Datos Open
Source: Arquitectura del Servidor

SERVER
Mysql Gestor de Base de Datos Open
Source: Motores de Almacenamiento
Al diseñar una base de datos con MySQL será necesario decidir qué
motores de almacenamiento se utilizaran. MySQL dispone, actualmente,
de los siguientes motores de almacenamiento:
•MyISAM: Es el motor por defecto. Es muy rápido pero no transaccional.

•InnoDB: Es transaccional, incluyendo integridad referencial.

•Memory (Heap): Es una tabla MyISAM, pero almacenada en memoria,


no en disco. Es todavía más rápida.

•Archive: Es una tabla MyISAM, pero comprimida y de sólo lectura.

•MRG_MyISAM: Es una agregación de tablas MyISAM. Las tablas


agregadas deben ser exactamente iguales.

SERVER
Mysql Gestor de Base de Datos Open
Source: Motores de Almacenamiento
• CSV: Es una tabla que se almacena en un fichero de valores
separados por comas.

• FEDERATED: Se trata de una tabla que, realmente, reside en otro


servidor MySQL.

• Blackhole: Esta es una base de datos en la que todo lo que metes,


desaparece.

Puede utilizar distintos motores en una misma base de datos.

La decisión correcta depende en gran parte del uso futuro que tendrá la
base de datos, lo que suele ser difícil saberlo con exactitud durante el
diseño.

SERVER
El Cliente de MYSQL

mysql -h host -u usuario –p

Host: Especifica el ordenador donde está el servidor de bases de datos (host), es decir equipo donde
se encuentra MYSQL, por defecto llamado localhost.
Usuario: por defecto el usuario es root, es quien tiene los privilegios totales sobre los objetos
existentes del SGBD.
Parámetros "-h" y "-u" indican que los parámetros a continuación son, respectivamente, el nombre
del host y el usuario.
Parámetro "-p" indica que se debe solicitar una clave de acceso.
El Cliente de MYSQL
En versiones de MySQL anteriores a la 4.1.9 es posible abrir un
cliente de forma anónima sin especificar una contraseña. Pero esto es
mala idea, y de hecho, las últimas versiones de MySQL no lo permiten.

Durante la instalación de MySQL se nos pedirá que elijamos una clave


de acceso para el usuario 'root', deberemos usar esa clave para iniciar
una sesión con el cliente MySQL.

mysql -h localhost -u root -p


Enter password: *******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 76 to server version: 4.1.9-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Tipos de Datos en MYSQL
Para usar MySQL de forma efectiva es importante comprender los
distintos bloques de construcción disponibles. Existen tres tipos
fundamentales de columnas en MySQL: numéricas, de cadena y de
fecha.

Por regla general, debería seleccionar el tipo de columna de menor


tamaño, ya que de esta forma se ahorra espacio y se logra una mayor
velocidad de acceso y actualización.

Sin embargo, si se selecciona un tipo de columna demasiado pequeño


puede dar como resultado la perdida de datos o que se recorten al
introducirlos.
Tipos de Datos en MYSQL

Tipos de Datos Numéricos


Las columnas numéricas están diseñadas para almacenar todo tipo de
datos numérico, como precios, edades o cantidades. Existen dos tipos
principales de tipos numérico: tipos enteros (números enteros sin
decimales ni partes fraccionales) y tipos de coma flotante.

Todos los tipos numéricos permiten dos opciones: UNSIGNED y


ZERO FILL.

•UNSIGNED: No permite el uso de números negativos (extiende el


rango positivo del tipo de datos de enteros).

•ZEROFILL: Rellena el valor con ceros en lugar de los espacios


habituales, además de asignar el tipo UNSIGNED de manera
predeterminada.
Tipos de Datos en MYSQL
Tipos de Dato Numéricos Enteros

• TINYINT: Un entero pequeño; de -128 a 127 (SIGNED), de 0 a 255


(UNSIGNED); requiere 1 byte de espacio de almacenamiento.

• BIT: Sinónimo de TINYINT(1).

• BOOL: Otro sinónimo de TINYINT(1).

• SMALLINT: Un entero pequeño; de 32.768 a 32.767 (SIGNED); de 0 a


65,535 (UNSIGNED); requiere 2 bytes de espacio de almacenamiento.

• MEDIUMINT: Un entero de tamaño medio, de -8.388.608 a 8.388.607


(SIGNED); de 0 a 16.777.215 (UNSIGNED); requiere 3 bytes de
espacio de almacenamiento..
Tipos de Datos en MYSQL
Tipos de Dato Numéricos Enteros

• INT: Un entero; de -2.147.483.648 a 2.147.483.647 (SIGNED);


de 0 a 4.294.967.295 (UNSIGNED); requiere 4 bytes de
espacio de almacenamiento.

• INTEGER: Es Sinónimo de INT.

• BIGINT: Un entero grande; de -9.223.372.036.854.775.808 a


9.223.372.036.854.775.807 (SIGNED); de 0 a
18.446.744.073.709.551.615 (UNSIGNED); requiere 8 bytes de
espacio de almacenamiento. En las reglas incluidas tras esta
tabla se exponen algunas consideraciones importantes sobre el
uso de BIGINT.
Tipos de Datos en MYSQL
Tipos de Dato Numéricos Coma Flotante

•FLOAT: Un numero de coma flotante. Se asigna una precisión <=24 a


los números de coma flotante de precisión simple. Una precisión de
entre 25 y 53 se asigna a los números coma flotante de precisión
doble. FLOAT (x) consta del mismo rango que los tipos FLOAT y
DOUBLE correspondiente, pero el tamaño y el número de los
decimales no están definidos. En las versiones de MySQL anteriores a
la 3.23, no se trataba de un verdadero valor de coma flotante y
siempre llevaba dos decimales. Este hecho puede originar problemas
inesperados como que todos los cálculos de MySQL se realicen con
precisión doble.
Tipos de Datos en MYSQL
Tipos de Dato Numéricos Coma Flotante

•FLOAT(): Un numero decimal pequeño o de precisión simple. Su


valor oscila entre 3,402823 466E+38 y -1,175494351E-38, 0 y de
1,17549435l E-38 a 3,402823466E+38. Con UNSIGNED, el rango
positivo sigue siendo el mismo, pero no se admiten los números
negativos. M indica el ancho total que se muestra y D indica el numero
de decimales. FLOAT sin argumentos o FLOAT (x) , donde x <=24
equivale a un numero de coma flotante de precisión simple. FLOAT
( X) , donde x se sitúa entre 25 y 53 equivale a un numero de coma
flotante de precisión simple. Requiere 4 bytes de espacio de
almacenamiento (precisión simple).
Tipos de Datos en MYSQL
Tipos de Dato Numéricos Coma Flotante
• DOUBLE, DOUBLE PRECISION, REAL: Contiene un número
en coma flotante de tamaño normal (precisión doble). Los
valores permitidos están entre -1.7976931348623157E+308 y
-2.2250738585072014E-308, 0, y entre
2.2250738585072014E-308 y 1.7976931348623157E+308. Si
se especifica el modificador UNSIGNED, no se permiten los
valores negativos. El valor M es la anchura a mostrar y D es el
número de decimales.
Tipos de Datos en MYSQL
Tipos de Dato Numéricos Coma Flotante
• DECIMAL, DEC, NUMERIC, FIXED: Contiene un número en
coma flotante sin empaquetar. Se comporta igual que una
columna CHAR: "sin empaquetar" significa que se almacena
como una cadena, usando un carácter para cada dígito del
valor. El punto decimal y el signo '-' para valores negativos, no
se cuentan en M (pero el espacio para estos se reserva). Si D
es 0, los valores no tendrán punto decimal ni decimales. El
rango de los valores DECIMAL es el mismo que para DOUBLE,
pero el rango actual para una columna DECIMAL dada está
restringido por la elección de los valores M y D. Si se especifica
el modificador UNSIGNED, los valores negativos no están
permitido. Si se omite D, el valor por defecto es 0. Si se omite
M, el valor por defecto es 10.
Tipos de Datos en MYSQL
Tipos de Datos Numéricos y Coma Flotante

Utilice las siguientes directrices a la hora de escoger el tipo numérico:

•Seleccione el tipo mas pequeño susceptible de aplicación (TINYINT


en lugar de INT si el valor no es mayor a 127).

•Para números enteros, seleccione el tipo entero. (Recuerde que las


monedas también se pueden almacenar como números enteros; por
ejemplo, se pueden almacenar en forma de céntimos en lugar de en
unidades con céntimos).

•También podrían almacenarse como tipo DECIMAL.

•Para los casos en los que se necesite una mayor precisión, utilice los
tipos enteros en lugar de los tipos de coma flotante (los errores de
redondeo afectan a los números de coma flotante).
Tipos de Datos en MYSQL
Tipos de Datos de Fecha y Hora

Los tipos de columna de fecha y hora están diseñados para trabajar


con las necesidades especiales que exigen los datos de tipo temporal
y se puede utilizar para almacenar datos tales como la hora del día o
fechas de nacimiento.

•Date: Contiene una fecha. El rango soportado está entre '1000-01-01'


y '9999-12-31'. MySQL muestra los valores DATE con el formato
'AAAA-MM-DD', pero es posible asignar valores a columnas de este
tipo usando tanto números como cadenas.

•DATETIME: Contiene una combinación de fecha y hora. El rango


soportado está entre '1000-01-01 00:00:00' y '9999-12-31 23:59:59'.
MySQL muestra los valores DATETIME con el formato 'AAAA-MM-DD
HH:MM:SS', pero es posible asignar valores a columnas de este tipo
usando tanto cadenas como números.
Tipos de Datos en MYSQL
Tipos de Datos de Fecha y Hora

•TIMESTAMP: Contiene un valor del tipo timestamp. El rango está entre '1970-
01-01 00:00:00' y algún momento del año 2037. Desde MySQL 4.1,
TIMESTAMP se devuelve como una cadena con el formato 'AAAA-MM-DD
HH:MM:SS'. Para convertir este valor a un número, bastará con sumar el valor
0. Ya no se soportan distintas longitudes para estas columnas. Se puede
asignar fácilmente la fecha y hora actual a uno de estas columnas asignando el
valor NULL.

•TIME: Una hora. El rango está entre '-838:59:59' y '838:59:59'. MySQL


muestra los valores TIME en el formato 'HH:MM:SS', pero permite asignar
valores a columnas TIME usando tanto cadenas como números.

•YEAR: Contiene un año en formato de 2 ó 4 dígitos (por defecto es 4). Los


valores válidos son entre 1901 y 2155, y 0000 en el formato de 4 dígitos. Y
entre 1970-2069 si se usa el formato de 3 dígitos (70-69). MySQL muestra los
valores YEAR usando el formato AAAA, pero permite asignar valores a una
columna YEAR usando tanto cadenas como números.
Tipos de Datos en MYSQL
Tipos de Datos de Fecha y Hora

Tipo Descripcion
DATETIME AAAA-MM-DD HH:MM:SS desde
1000-01-01 00:00:00 a 9999-12-31 23:59:59.
DATE AAAA-MM-DD desde 1000-01-01 a 9999-12-31.

TIMESTAMP AAAAMMDDHHMMSS.

TIME HH:MM:SS.
YEAR AAAA.
Tipos de Datos en MYSQL
Tipos de Datos de Cadena

Cadenas de Caracteres

• Char: Es un sinónimo de CHAR(1), y puede contener un único


carácter.

• Char(): Contiene una cadena de longitud constante. Para


mantener la longitud de la cadena, se rellena a la derecha con
espacios. Estos espacios se eliminan al recuperar el valor.
CHAR es un alias para CHARACTER.

• Varchar(): Contiene una cadena de longitud variable. Los


espacios al final se eliminan.Si no se especifica la palabra
clave BINARY estos valores se ordenan y comparan sin
distinguir mayúsculas y minúsculas. VARCHAR es un alias
para CHARACTER VARYING.
Tipos de Datos en MYSQL
Tipos de Datos de Cadena

Para Datos sin tipo o grandes bloques de datos:

• TINYBLOB, TINYTEXT: Contiene una columna BLOB o TEXT


con una longitud máxima de 255 caracteres (28 - 1).

• BLOB, TEXT: Contiene una columna BLOB o TEXT con una


longitud máxima de 65535 caracteres (216 - 1).

• MEDIUMBLOB, MEDIUMTEXT: Contiene una columna BLOB


o TEXT con una longitud máxima de 16777215 caracteres (224 -
1).

• LONGBLOB, LONGTEXTTIME: Contiene una columna BLOB


o TEXT con una longitud máxima de 4294967298 caracteres
(232 - 1).
Tipos de Datos en MYSQL
Tipos de Datos de Cadena

Para Datos sin tipo o grandes bloques de datos:

•ENUM('valorl','valor2', ...) : Enumeración. Solo puede tener uno de


los valores especificados, NULL o "". Valores máximos de 65.535.

•SET('valorl', 'valor2', ...) : Un conjunto. Puede contener de cero a 64


valores de la lista especificada.
Tipos de Datos en MYSQL
Tipos de Datos de Cadena

Considere las siguientes recomendaciones para decidir que tipo de


cadena seleccionar:

•No almacene nunca números en columnas de cadena. Resulta mucho


mas eficaz hacerlo en columnas de tipo numérico. Cada digito incluido
en una cadena ocupa un byte de espacio, en contraposición a un campo
numérico, que los almacena en bits. Así mismo, la ordenación de
números almacenados en columnas de cadena puede generar
resultados incoherentes.

•Para lograr mayor velocidad, utilice columnas fijas, como CHAR.

•Para ahorrar espacio, utilice columnas dinámicas, como VARCHAR.


Tipos de Datos en MYSQL
Tipos de Datos de Cadena

•Para limitar los contenidos de una columna a una opción, utilice ENUM.

•Para permitir mas de una entrada en una columna, seleccione SET.

•Si desea buscar testo sin discriminar entre mayúsculas y minúsculas,


utilice TEXT.

•Si desea buscar texto discriminando entre mayúsculas y minúsculas,


utilice BLOB.

•Para imágenes y otros objetos binarios, almacénelos en el sistema de


archivos en lugar de directamente en la base de datos.
Operadores en SQL
Operadores Logicos
Operador Descripcion, Uso Ejemplo
AND Y Logico, evalua dos SELECT * FROM clientes
condiciones, retorna verdad WHERE codcli>=5 AND
si ambas son cierta. codcli<=10;
OR O Logico, evalua dos SELECT * FROM clientes
condiciones, retorna verdad WHERE codcli>=5 OR codcli<=10;
si una de ellas es cierta.
NOT Negacion Logica, devuelve el SELECT * FROM clientes
valor contrario de la WHERE NOT codcli>=5;
expresion.
IN Especifica registros de una SELECT * FROM clientes
base de datos, evalua solo WHERE codcli IN (5,6,7,9,10);
los valores delimitados entre
comillas.
Operadores en SQL
Operadores Logicos
Operador Descripcion, Uso Ejemplo
NOT IN Evalua solo los valores SELECT * FROM clientes
distintos a los delimitados WHERE codcli NOT IN (5,6,7,9,10);
entre comillas.
BETWEEN Especifica un intervalo de SELECT * FROM clientes
valores. Contenido en el WHERE codcli BETWEEN 5 AND 10;
rango.
NOT Evalua los valores que se SELECT * FROM clientes
BETWEEN encuentran fuera del WHERE codcli NOT BETWEEN 5
intervalo de valores. AND 10;
LIKE Se usa en la comparacion SELECT * FROM clientes
de un modelo. % cadena de WHERE nom LIKE ‘%MARIA’;
caracteres , _ solo un
caracter.
Operadores en SQL
Operadores De Comparacion

Operador Descripcion, Uso Ejemplo

= Igualdad, Igual a SELECT * FROM clientes


WHERE codcli=5;
!=,<> Desigualdad, Distinto de o no es SELECT * FROM clientes
igual a WHERE codcli<>5 OR codcli!
=10;
< Menor que SELECT * FROM clientes
WHERE NOT codcli<5;
> Mayor que SELECT * FROM clientes
WHERE codcli > 10;
<= Menor o igual que SELECT * FROM clientes
WHERE codcli <=10);
>= Mayor o igual que SELECT * FROM clientes
WHERE codcli >=10;
Operadores en SQL
Operadores Aritmeticos

Operador Descripcion, Uso Ejemplo

+ Suma SELECT nombre, numventas+100


FROM clientes
WHERE feccom=‘2011-12-31’;
- Resta SELECT nombre, numventas-5
FROM clientes
WHERE feccom=‘2011-12-31’;
* Multiplicacion SELECT codart, nomart, precio*1.4
FROM articulos
WHERE NOT codart<100;
/ Division SELECT codcli, nomcli, montoventas/31
FROM clientes
WHERE codcli >10;
DDL Lenguaje De Definicion De Datos:
CREATE DATABASE
Desde el punto de vista de SQL, una base de datos es sólo un
conjunto de relaciones (o tablas), y para organizarlas o distinguirlas se
accede a ellas mediante su nombre. A nivel de sistema operativo, cada
base de datos se guarda en un directorio diferente.
Debido a esto, crear una base de datos es una tarea muy simple.
Claro que, en el momento de crearla, la base de datos estará vacía, es
decir, no contendrá ninguna tabla.
En principio se creara y manipulara una base de datos llamada
prueba, para esto se usa una sentencia CREATE DATABASE.
•Sentencia
mysql> CREATE DATABASE prueba;
Query OK, 1 row affected (0.03 sec)
DDL Lenguaje De Definicion De Datos:
CREATE DATABASE
En el mismo DBMS pueden crearse varias base de datos, para saber
solo bastara con ejecutar SHOW DATABASES.

mysql> SHOW DATABASES;


+--------------------+
| Database |
+--------------------+
| mysql |
| prueba |
| test |
+--------------------+
3 rows in set (0.00 sec)
mysql>
DDL Lenguaje De Definicion De Datos:
CREATE DATABASE
Una vez creada la base de datos es necesario seleccionar la base de
datos a partir de la cual se comenzara a crear las tablas. Se debe
utilizar USE.
mysql> USE prueba;
Database changed
mysql>
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
Esta sentencia CREATE TABLE sirve para crear tablas.
La sintaxis de esta sentencia es muy compleja, ya que existen muchas
opciones y posibilidades diferentes a la hora de crear una tabla.
La sintaxis más simple, para CREATE TABLE es la siguiente, la cual
creara una tabla que almacenara nombres de personas y sus fechas
de nacimiento.
Es necesario indicar el nombre de la tabla y los nombres y tipos de las
columnas:
mysql> USE prueba
Database changed
mysql> CREATE TABLE gente (nombre VARCHAR(40), fecha DATE);
Query OK, 0 rows affected (0.53 sec)
mysql>
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
La tabla creada se llama "gente" y posee dos columnas: "nombre" que
puede contener cadenas de hasta 40 caracteres y "fecha" de tipo
fecha.
Para consultar cuántas tablas y qué nombres tienen en una base de
datos, se usa la sentencia SHOW TABLES.
mysql> SHOW TABLES;
+------------------------+
| Tables_in_prueba |
+------------------------+
| gente |
+------------------------+
1 row in set (0.01 sec)
mysql>
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
Pero al crear una tabla es necesario no solo los campos, se requiere
definir aspectos como: Valores Nulos, Valores por Defecto, Claves
Primarias, Columnas Autoincrementadas, Comentarios, Índices (Claves
Primarias, Índices, Claves Únicas), Claves Foráneas.

La sintaxis para definir columnas es:

nombre_col tipo [NOT NULL | NULL] [DEFAULT valor_por_defecto]


[AUTO_INCREMENT] [[PRIMARY] KEY] [COMMENT 'string']
[definición_referencia]
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
Pero al crear una tabla es necesario no solo los campos, se requiere
definir aspectos como: Valores Nulos, Valores por Defecto, Claves
Primarias, Columnas Autoincrementadas, Comentarios, Índices
(Claves Primarias, Índices, Claves Únicas), Claves Foráneas.
• Para Valores Nulos, definir si la columna podrá (NULL) o no
contener valores nulos (NOT NULL). Ejemplo:
CREATE TABLE ciudad1 (nombre CHAR(20) NOT NULL,
poblacion INT NULL);
• Para Valores por Defecto, se le asignará un valor por defecto
automático a una columna cuando no se especifique un valor
determinado al añadir filas. Ejemplo:
CREATE TABLE ciudad2 (nombre CHAR(20) NOT NULL,
poblacion INT NULL DEFAULT 5000);
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
• Para una clave primaria sobre una columna, usando la palabra
clave KEY o PRIMARY KEY, sólo puede existir una clave primaria
en cada tabla, y la columna sobre la que se define una clave
primaria no puede tener valores NULL. Ejemplo:
CREATE TABLE ciudad3
(nombre CHAR(20) NOT NULL PRIMARY KEY,
poblacion INT NULL DEFAULT 5000);
• Para Columna Auto Incrementada, la columna sólo puede ser de
tipo entero y solo puede existir una en la tabla. Ejemplo:
CREATE TABLE ciudad5
(clave INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nombre CHAR(20) NOT NULL,
poblacion INT NULL DEFAULT 5000);
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
• Para Columna con Comentarios, Adicionalmente, al crear la
tabla, podemos añadir un comentario a cada columna. Este
comentario sirve como información adicional sobre alguna
característica especial de la columna, y documenta la base de
datos.

mysql> CREATE TABLE ciudad


(clave INT AUTO_INCREMENT PRIMARY KEY COMMENT 'Clave principal',
nombre CHAR(50) NOT NULL,
poblacion INT NULL DEFAULT 5000);
Query OK, 0 rows affected (0.08 sec)
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
Definición de creación

Es posible añadir otras definiciones.

La sintaxis más general es:


|| [CONSTRAINT
[CONSTRAINT [símbolo]]
[símbolo]] PRIMARY
PRIMARY KEY
KEY (index_nombre_col,...)
(index_nombre_col,...)
|| KEY
KEY [nombre_index]
[nombre_index] (nombre_col_index,...)
(nombre_col_index,...)

|| INDEX
INDEX [nombre_index]
[nombre_index] (nombre_col_index,...)
(nombre_col_index,...)
|| [CONSTRAINT
[CONSTRAINT [símbolo]]
[símbolo]] UNIQUE
UNIQUE [INDEX]
[INDEX]
[nombre_index]
[nombre_index] [tipo_index]
[tipo_index] (nombre_col_index,...)
(nombre_col_index,...)

|| [FULLTEXT|SPATIAL]
[FULLTEXT|SPATIAL] [INDEX]
[INDEX] [nombre_index]
[nombre_index] (nombre_col_index,...)
(nombre_col_index,...)
|| [CONSTRAINT
[CONSTRAINT [símbolo]]
[símbolo]] FOREIGN
FOREIGN KEY
KEY
[nombre_index]
[nombre_index] (nombre_col_index,...)
(nombre_col_index,...) [definición_referencia]
[definición_referencia]
|| CHECK
CHECK (expr)
(expr)
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
Para crear Índices: Existen tres tipos de índices:
• Claves Primarias: La sintaxis para definir claves primarias es:
definición_columnas | PRIMARY KEY (index_nombre_col,...).
Ejemplo:

CREATE TABLE ciudad4 (nombre CHAR(20) NOT NULL,


poblacion INT NULL DEFAULT 5000,
PRIMARY KEY (nombre));
• Índices: Se usa para definir índices sobre una columna, sobre
varias, o sobre partes de columnas. Para definir estos índices se
usan indistintamente las opciones KEY o INDEX. Ejemplo:

CREATE TABLE mitabla2 (id INT,


nombre CHAR(19),
INDEX (nombre));
CREATE TABLE mitabla3 (id INT,
nombre CHAR(19),
KEY (nombre));
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
CREATE TABLE mitabla4 (id INT,
nombre CHAR(19),
INDEX (nombre(4)));
• Claves Únicas: Permite definir índices con claves únicas, también
sobre una columna, sobre varias o sobre partes de columnas. Para
definir índices con claves únicas se usa la opción UNIQUE.
Ejemplo:

CREATE TABLE mitabla5 (id INT,


nombre CHAR(19),
UNIQUE (nombre));
CREATE TABLE mitabla6 (id INT,
nombre CHAR(19) NOT NULL,
UNIQUE (nombre));
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
CREATE TABLE mitabla7 (id INT,
nombre CHAR(19),
PRIMARY KEY (nombre));
La diferencia entre un índice único y uno normal es que en los únicos
no se permite la inserción de filas con claves repetidas. La excepción
es el valor NULL, que sí se puede repetir.
•Para claves foráneas: En mysql las claves foráneas se definen en
tablas con motor de almacenamiento de tipo InnoDB. Sin embargo,
pueden usarse en otros tipos de tablas. La diferencia consiste en que
en esas tablas no se verifica si una clave foránea existe realmente en
la tabla referenciada, y que no se eliminan filas de una tabla con una
definición de clave foránea. Para hacer esto hay que usar tablas
InnoDB. Ejemplo:
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
• Definir una referencia al crear una columna. Ejemplo:
CREATE TABLE personas (id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(40),
fecha DATE);

CREATE TABLE telefonos (numero CHAR(12),


id INT NOT NULL REFERENCES personas (id),
ON DELETE CASCADE ON UPDATE CASCADE);
• Después de creada la columna definir una referencia. Ejemplo:
CREATE TABLE personas2 (id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(40),
fecha DATE) ENGINE=InnoDB;

CREATE TABLE telefonos2 (numero CHAR(12),


id INT NOT NULL,
KEY (id), (1)
FOREIGN KEY (id) REFERENCES personas2 (id)
ON DELETE CASCADE ON UPDATE CASCADE) (2)
ENGINE=InnoDB;
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
• (1): Es imprescindible que la columna que contiene una definición
de clave foránea esté indexada. Pero si no lo hacemos de forma
explícita, MySQL lo hará de forma implícita.
• (2): Esta forma define una clave foránea en la columna 'id', que
hace referencia a la columna 'id' de la tabla 'personas‘. La definición
incluye las tareas a realizar en el caso de que se elimine una fila en
la tabla 'personas'.

ON DELETE <opción>, indica que acciones se deben realizar en la


tabla actual si se borra una fila en la tabla referenciada.

ON UPDATE <opción>, es análogo pero para modificaciones de


claves.
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
Existen cinco opciones diferentes. A continuación se explican cada
uno de ellos:

•RESTRICT: esta opción impide eliminar o modificar filas en la tabla


referenciada si existen filas con el mismo valor de clave foránea.

•CASCADE: borrar o modificar una clave en una fila en la tabla


referenciada con un valor determinado de clave, implica borrar las filas
con el mismo valor de clave foránea o modificar los valores de esas
claves foráneas.

•SET NULL: borrar o modificar una clave en una fila en la tabla


referenciada con un valor determinado de clave, implica asignar el
valor NULL a las claves foráneas con el mismo valor.
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
• NO ACTION: las claves foráneas no se modifican, ni se eliminan
filas en la tabla que las contiene.

• SET DEFAULT: borrar o modificar una clave en una fila en la tabla


referenciada con un valor determinado implica asignar el valor por
defecto a las claves foráneas con el mismo valor.

Ejemplo:
CREATE TABLE telefonos3 (numero CHAR(12),
id INT NOT NULL,
KEY (id),
FOREIGN KEY (id) REFERENCES personas (id)
ON DELETE RESTRICT ON UPDATE CASCADE)
ENGINE=InnoDB;
DDL Lenguaje De Definicion De Datos:
CREATE TABLE
• Si se intenta borrar una fila de 'personas' con un determinado valor
de 'id', se producirá un error si existen filas en la tabla 'telefonos3'
con mismo valor en la columna 'id'. La fila de 'personas' no se
eliminará, a no ser que previamente eliminemos las filas con el
mismo valor de clave foránea en 'teléfonos3'.

• Si se modifica el valor de la columna 'id' en la tabla 'personas', se


modificarán los valores de la columna 'id' para mantener la relación.
DDL Lenguaje De Definicion De Datos:
CREATE VIEW
Esta sentencia permite crear una vista en una base de datos. Esta es
un objecto de la base de datos que se define mediante un SELECT que
agrupa o selecciona un conjunto de datos.
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW
nombre_vista [(columnas)]
AS sentencia_select
[WITH [CASCADED | LOCAL] CHECK OPTION]

CREATE OR REPLACE VIEW listado AS (SELECT codcli, apecli, nomcli, telcli


from clientes
ORDER BY codcli ASC);
Esta sentencia crea una vista nueva o reemplaza una existente de nombre listado ya que
incluye la cláusula OR REPLACE.
La sentencia_select indica las columnas que le interesan se asocien a la vista. Esta puede
referir a tablas o vistas de la base de datos.
Se requiere que posea el permiso CREATE VIEW para la vista, y algún privilegio en cada
columna seleccionada por la sentencia SELECT. Para columnas incluidas en otra parte de
la sentencia SELECT debe poseer el privilegio SELECT. Si está presente la cláusula OR
REPLACE, también deberá tenerse el privilegio DELETE para la vista.
DDL Lenguaje De Definicion De Datos:
CREATE VIEW
• Toda vista pertenece a una base de datos. Por defecto, las vistas se
crean en la base de datos actual.
• Para crear una vista en una base de datos específica, indíquela con
base_de_datos.nombre_vista al momento de crearla. Ejemplo:

CREATE OR REPLACE VIEW test.listado AS (SELECT codcli, apecli, nomcli,


from clientes
ORDER BY codcli ASC);
La definición de una vista está sujeta a las siguientes limitaciones:
• La sentencia SELECT no puede contener una subconsulta en su
cláusula FROM.
• La sentencia SELECT no puede hacer referencia a variables del
sistema o del usuario.
• La sentencia SELECT no puede hacer referencia a parámetros de
sentencia preparados.
DDL Lenguaje De Definicion De Datos:
CREATE VIEW
• Dentro de una rutina almacenada, la definición no puede hacer
referencia a parámetros de la rutina o a variables locales.
• Cualquier tabla o vista referenciada por la definición debe existir. Sin
embargo, es posible que después de crear una vista, se elimine alguna
tabla o vista a la que se hace referencia. Para comprobar la definición
de una vista en busca de problemas de este tipo, utilice la sentencia
CHECK TABLE.
• La definición no puede hacer referencia a una tabla TEMPORARY, y
tampoco se puede crear una vista TEMPORARY.
• Las tablas mencionadas en la definición de la vista deben existir
siempre.
• No se puede asociar un disparador con una vista.
• En la definición de una vista está permitido ORDER BY, pero es
ignorado si se seleccionan columnas de una vista que tiene su propio
ORDER BY.
DDL Lenguaje De Definicion De Datos:
DROP TABLE
Esta sentencia permite eliminar una tabla definida en la base de datos. Su
sintaxis:
DROP
DROP TABLE
TABLE [IF
[IF EXISTS]
EXISTS] tbl_name
tbl_name [,[, tbl_name]
tbl_name] ...
...
Ejemplo:
DROP TABLE ciudad6;
Query OK, 0 rows affected (0.75 sec)
•Al borrar la tabla, desapareceran sus filas y a la vez los campos
definidos.
•Se puede adicionar la palabra IF EXISTS para evitar recibir mensajes de
error si la tabla no esta definida en la base de datos.

DROP TABLE ciudad6;


ERROR 1051 (42S02): Unknown table 'ciudad6'
DROP TABLE IF EXISTS ciudad6;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql>
DDL Lenguaje De Definicion De Datos:
DROP VIEW
Elimina una o más vistas de la base de datos. Se debe poseer el
privilegio DROP en cada vista a eliminar.
•La cláusula IF EXISTS se emplea para evitar que ocurra un error por
intentar eliminar una vista inexistente. Cuando se utiliza esta cláusula, se
genera una NOTE por cada vista inexistente.
•Las excepciones RESTRICT y CASCADE son ignoradas.
DROP
DROP VIEW
VIEW [IF
[IF EXISTS]
EXISTS] nombre_vista
nombre_vista [,[, nombre_vista]
nombre_vista] ...
... [RESTRICT
[RESTRICT ||
CASCADE]
CASCADE]

Ejemplo:
DROP VIEW listado;
Query OK, 0 rows affected (0.75 sec)

DROP VIEW IF EXISTS listado;


Query OK, 0 rows affected (0.75 sec)
DDL Lenguaje De Definicion De Datos:
DROP DATABASE
Esta sentencia permite eliminar la base de datos. Su sintaxis:
DROP
DROP DATABASE
DATABASE [IF
[IF EXISTS]
EXISTS] db_name
db_name

Ejemplo:
DROP DATABASE prueba;
Query OK, 0 rows affected (0.75 sec)
•Al borrar la base de datos, desapareceran todas sus tablas asi como
cualquier objeto (vistas, consultas, procedimientos, usuarios) definidos en
ella.
•Se puede adicionar la palabra IF EXISTS para evitar recibir mensajes de
error si la base de datos no esta definida.

mysql> DROP DATABASE IF EXISTS borrame;


Query OK, 1 row affected (0.11 sec)
mysql> DROP DATABASE IF EXISTS borrame;
Query OK, 0 rows affected, 1 warning (0.00 sec)
DDL Lenguaje De Definicion De Datos:
ALTER TABLE
Permite cambiar la estructura de las tablas. Puede agregar columnas,
modificar definiciones, cambiar el nombre de las tablas y eliminar
columnas.
ALTER TABLE <nombre de tabla>
{RENAME|ENGINE|ADD|DROP|MODIFY|CHANGE} (especificación de campo(s)...)

•RENAME: Permite renombrar una tabla de la base de datos.


•ENGINE: Asocia a una tabla el motor de almacenamiento.
•ADD: Permite agregar columnas, llaves primarias, indices, unicos,
foreign key, key.
•DROP: Permite eliminar columnas, llaves primarias, indices, unicos,
foreign key, key.
•MODIFY: Permite modificar la definicion de una columna.
•CHANGE: Permite cambiar el nombre de una de las columnas definidas.
DDL Lenguaje De Definicion De Datos:
ALTER TABLE
| ADD [COLUMN] create_definition [FIRST | AFTER column_name ]
| ADD [COLUMN] (create_definition, create_definition,...)
| ADD INDEX [index_name] (index_col_name,...)
| ADD [CONSTRAINT [symbol]] PRIMARY KEY (index_col_name,...)
| ADD [CONSTRAINT [symbol]] UNIQUE [index_name] (index_col_name,...)
| ADD FULLTEXT [index_name] (index_col_name,...)
| ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) [reference_definition]
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
| CHANGE [COLUMN] old_col_name create_definition [FIRST | AFTER column_name]
| MODIFY [COLUMN] create_definition [FIRST | AFTER column_name]
| DROP [COLUMN] col_name
| DROP PRIMARY KEY
| DROP INDEX index_name
| DISABLE KEYS
| ENABLE KEYS
| RENAME [TO] new_tbl_name
| ORDER BY col
| CHARACTER SET character_set_name [COLLATE collation_name]
| table_options
DDL Lenguaje De Definicion De Datos:
ALTER TABLE
• Para Renombrar una Tabla: Permite cambiar el nombre de una de
las tablas definidas en la base de datos. Ejemplo:
ALTER TABLE cliente RENAME clientes;

• Para Establecer el motor de almacenamiento: Permite asociar un


motor de almacenamiento a una de tabla definida en la base de datos.
Ejemplo:
ALTER TABLE cliente ENGINE=INNODB;

• Para Agregar una Columna: La especificación de campos se hace


igual que en el caso de CREATE TABLE. Se puede agregar mas de
una columna en una misma sentencia. Ejemplo:
ALTER TABLE pedido ADD fecha DATE NOT NULL;
ALTER TABLE pedido ADD (telefono CHAR(12) NOT NULL,
lugar VARCHAR(30) NOT NULL) ;
DDL Lenguaje De Definicion De Datos:
ALTER TABLE
• Para Agregar una Columna de Primera: Si se desea agregar de
primera la columna se debe usar FIRST. Ejemplo:
ALTER TABLE pedido ADD idped INT NOT NULL FIRST;

• Para Agregar una Columna Despues de una Columna: Si se desea


agregar la columna despues de una columna en particular se debe
usar AFTER. Ejemplo:
ALTER TABLE pedido ADD fecped INT NOT NULL AFTER codcli;

• Para iniciar el valor de una columna de AUTOINCREMENTO: Si se


desea agregar un valor de inicio a la columna definida de
autoincemento en una tabla se emplea la siguiente sentencia. Ejemplo:
ALTER TABLE pedido AUTO_INCREMENT=100;
DDL Lenguaje De Definicion De Datos:
ALTER TABLE
• Para Agregar una Llave Primaria: Se puede agregar una llave
primaria a una tabla solo se debe considerar que el campo debe estar
definido. Ejemplo:
ALTER TABLE pedido ADD PRIMARY KEY(idped );
• Para Agregar una Columna Unica: Se puede agregar una columna
de tipo único siempre y cuando el campo este definido. Ejemplo:
ALTER TABLE pedido ADD UNIQUE(nomtie);
• Para Agregar un Indice: Se puede agregar una columna de tipo
indice siempre y cuando el campo este definido. Ejemplo:
ALTER TABLE pedido ADD INDEX(codcli);
• Para Agregar una Llave Foranea: Se puede agregar una llave
foranea a una tabla siempre y cuando el campo este definido.
Ejemplo:
ALTER TABLE pedido ADD FOREIGN KEY(codcli) REFERENCES
clientes(codcli);
DDL Lenguaje De Definicion De Datos:
ALTER TABLE
• Para Eliminar una Columna: Se puede borrar una columna de una
tabla. Ejemplo:
ALTER TABLE pedido DROP (status);

• Para Eliminar un Indice: Se puede borrar un índice de una tabla.


Ejemplo:
ALTER TABLE pedido DROP INDEX(codcli);

• Para Cambiar el nombre de una Columna: Se puede cambiar el


nombre de un campo existente en una tabla. Ejemplo:
ALTER TABLE `clientes` CHANGE `nomcli` `nomape` VARCHAR(40) NOT NULL;

• Para Modificar el dominio de una Columna: Se puede cambiar el


tipo de datos y restricciones de un campo existente en una tabla.
Ejemplo:
ALTER TABLE clientes MODIFY nomcli VARCHAR(60) NOT NULL;
ALTER TABLE clientes CHANGE nomcli nomcli VARCHAR(60) NOT
NULL;
DDL Lenguaje De Definicion De Datos:
ALTER VIEW
Esta sentencia modifica la definición de una vista existente.
•La sintaxis es semejante a la empleada en CREATE VIEW.
•Se requiere que posea los permisos CREATE VIEW y DELETE para la
vista, y algún privilegio en cada columna seleccionada por la sentencia
SELECT.
•Esta sentencia se introdujo en MySQL versión 5.0.1.
ALTER
ALTER [ALGORITHM
[ALGORITHM == {UNDEFINED
{UNDEFINED || MERGE
MERGE || TEMPTABLE}]
TEMPTABLE}]
VIEW
VIEW nombre_vista
nombre_vista [(columnas)]
[(columnas)]
AS
AS sentencia_select
sentencia_select
[WITH
[WITH [CASCADED
[CASCADED || LOCAL]
LOCAL] CHECK
CHECK OPTION]
OPTION]
Ejemplo:
ALTER VIEW listado
AS (SELECT Client.C_ID, Client.Name, Client.City, Products.Prod_Detail
from Client, Products
WHERE Client.C_ID=Products.C_ID);
DDL Lenguaje De Definicion De Datos:
SHOW CREATE VIEW
Muestra la sentencia CREATE VIEW que se utilizó para crear la vista.
•Esta sentencia fue introducida en MySQL 5.0.1.
Ejemplo:
mysql> SHOW CREATE VIEW v;
CREATE VIEW `test`.`v` AS select 1 AS `a`,2 AS `b`

SHOW
SHOW CREATE
CREATE VIEW
VIEW nombre_vista
nombre_vista
DDL Lenguaje De Definicion De Datos:
SHOW CREATE TABLE
Muestra la sentencia CREATE TABLE que se utilizó para crear la tabla.
•Esta sentencia fue introducida en MySQL 5.0.1.

SHOW
SHOW CREATE
CREATE TABLE
TABLE nombre_tabla
nombre_tabla

Ejemplo:
mysql> SHOW CREATE TABLE clientes;
CREATE TABLE clientes (id int(11) NOT NULL AUTO_INCREMENT,
  nomape varchar(60) NOT NULL,
  fecnac date NOT NULL,
PRIMARY KEY (`id`))
ENGINE=InnoDB;
DML Lenguaje De Manipulación De Datos:
INSERT
INSERT inserta nuevos registros en una tabla existente.
La forma INSERT ... VALUES inserta registros basados en valores
explícitamente especificados.
La forma INSERT ... SELECT inserta registros seleccionados de otra
tabla o tablas.
INSERT
INSERT INTO
INTO <tabla>
<tabla> [(<lista
[(<lista de
de campos>)]
campos>)]
VALUES
VALUES (<lista
(<lista de
de valores>|<expresión
valores>|<expresión select>)
select>)
tabla: es la tabla en que los registros deben insertarse.
lista de campos: las columnas para las que el comando proporciona
valores. Si no especifica la lista de columnas los valores se pasaran en el
orden como muestra el DESCRIBE tabla.
lista de valores: son los valores que seran asociados a cada uno de los
campos de la tabla.
Ejemplo:
INSERT INTO PEDIDO (NRO_PED, RUT_PROV)
VALUES (130, ’50.155.842-K’);
DML Lenguaje De Manipulación De Datos:
INSERT
La instrucción SQL INSERT permite crear dos registros, de la siguiente forma:
mysql> INSERT INTO Empleado (idemp,apellido,nombre,comision)
VALUES(1, 'Rive', 'Soll',10),
(2, 'Gordimer ', 'Charlene' ,15) ;
•Es necesario encerrar el valor del campo de cadena y/o fecha/hora (un campo de
CHAR o VARCHAR o DATE o TIME o TIMESTAMP o DATETIME) entre comillas
simple, tal es el caso de los campos (apellido, nombre).
•En el caso de los campos numéricos (idemp, comision) no es necesario usar la
comilla simple.
Existe otra forma mas sencilla de introducir datos con la instrucción INSERT,
como se muestra en la siguiente secuencia:
mysql> INSERT INTO Empleado
VALUES(1, 'Rive', 'Soll',10),
(2, 'Gordimer ', 'Charlene' ,15) ;
En este caso, los valores de los campos son los mismos solo que no se escribe
los campos a los que se le asociara el valor asumiendo el orden del describe de la
tabla.
DML Lenguaje De Manipulación De Datos:
UPDATE
Actualiza columnas en registros de tabla existentes con nuevos valores.
•La cláusula SET indica qué columna modificar y los valores que puede
recibir.
•La cláusula WHERE, si se da, especifica qué registros deben
actualizarse. En caso que se omita actualiza todos los registros.
•Si la cláusula ORDER BY se especifica, los registros se actualizan en el
orden que se especifica.
•La cláusula LIMIT es el límite de registros a actualizar.

UPDATE
UPDATE [LOW_PRIORITY]
[LOW_PRIORITY] [IGNORE]
[IGNORE] tbl_name
tbl_name
SET
SET col_name1=expr1
col_name1=expr1 [,[, col_name2=expr2
col_name2=expr2 ...]
...]
[WHERE
[WHERE where_definition]
where_definition]
[ORDER
[ORDER BYBY ...]
...]
[LIMIT
[LIMIT row_count]
row_count]
DML Lenguaje De Manipulación De Datos:
UPDATE
Ejemplo:
UPDATE clientes
SET descuento=0.1, edad=30
WHERE YEAR(fecnac)=1981
ORDER BY idcli;

Esta sentencia actualiza en la tabla clientes las columnas descuento a un


valor de 0.1 y edad de 30, siendo que el cliente tenga un ano de
nacimiento de 1981 ordenando la actualizacion por el valor de la columna
idcli.

Si se omite la clausula WHERE todos los clientes asumiran los valores de


descuento y edad establecido.
DML Lenguaje De Manipulación De Datos:
UPDATE
Es posible actualizar varios campos de varias tablas a traves de un
sentencia update.
Ejemplo:

UPDATE items,month
SET items.price=month.price
WHERE items.id=month.id;

Este ejemplo muestra un inner join usando el operador coma, pero los
comandos UPDATE de múltiples tablas pueden usar cualquier tipo de join
permitido en comandos SELECT tales como LEFT JOIN.

No puede usar ORDER BY o LIMIT con un UPDATE de múltiples tablas.


DML Lenguaje De Manipulación De Datos:
DELETE
DELETE borra los registros de una tabla que satisfagan la condición
dada por where_definition, y retorna el número de registros borrados.
•Si realiza un comando DELETE sin cláusula WHERE se borran todos los
registros.
•Cuando no quiere saber el número de registros borrados, se usa
TRUNCATE TABLE.
DELETE
DELETE [LOW_PRIORITY]
[LOW_PRIORITY] [QUICK]
[QUICK] [IGNORE]
[IGNORE] FROM
FROM tbl_name
tbl_name
[WHERE
[WHERE where_definition]
where_definition]
[ORDER
[ORDER BYBY ...]
...]
[LIMIT
[LIMIT row_count]
row_count]
Ejemplo:
DELETE FROM clientes
WHERE status=‘A‘
ORDER BY idcli;
Este ejemplo elimina de clientes aquellos que su status sea A y el orden
para eliminarlos es por el valor del idcli.
DML Lenguaje De Manipulación De Datos:
DELETE
Es posible borrar registros de múltiples tablas con el DELETE.
Se debe especificar las tablas en el comando DELETE y la condición
particular en múltiples tablas.
En este caso, no puede usar ORDER BY o LIMIT en un DELETE de
múltiples tablas.
Ejemplo:
DELETE t1, t2
FROM t1, t2, t3
WHERE t1.id=t2.id AND t2.id=t3.id;

DELETE FROM t1, t2


USING t1, t2, t3
WHERE t1.id=t2.id AND t2.id=t3.id;

Estos comandos usan las tres tablas al buscar registros a borrar, pero
borrar los registros coincidentes sólo para las tablas t1 y t2.
DML Lenguaje De Manipulación De Datos:
SELECT
Permite efectuar consultas sobre la BD. La operación de extraer
información de una tabla resulta sencilla. Para ello, puede utilizar el
potente comando SELECT.

SELECT
SELECT [DISTINCT]
[DISTINCT] <lista
<lista de
de campos>
campos>
FROM
FROM <lista
<lista de
de tablas>
tablas>
[WHERE
[WHERE <condiciones
<condiciones lógicas>]
lógicas>]
[ORDER
[ORDER BY
BY <lista
<lista de
de campos>]
campos>]
[GROUP
[GROUP BY
BY <lista
<lista de
de campos>]
campos>]
Ejemplo:
SELECT idcli, nombre, apellido
FROM clientes
WHERE idcli<= 10
ORDER BY apellido Desc;
DML Lenguaje De Manipulación De Datos:
SELECT
La instruccion SELECT consta de varias partes:
•La primera, inmediatamente después del comando SELECT, es la lista
de campos o el carácter comodín (*) para devolver todos los campos de
una tabla en el orden como se ven con el describe.

•La segunda, es después del FROM en esta se listan la tabla o tablas que
se emplearan para recuperar los datos.

•La tercera, es después del WHERE donde se crean las condiciones


haciendo uso de los operadores lógicos AND/OR/NOT/IN/NOT
IN/BETWEEN/NOT BETWEEN/LIKE, operadores de comparación
=,<>,>,<,>=,<= .

•La cuarta, es despues del ORDER BY esta permite establecer el orden


en que se mostraran los registros en la consulta ASC/DESC ascendente
por defecto o descendente respectivamente.
DML Lenguaje De Manipulación De Datos:
SELECT
• Forma Incondicional: consiste en pedir todas las columnas y no
especificar condiciones. Ejemplo:
SELECT * FROM gente;
• Limitar las columnas (Proyección): consiste en seleccionar
determinados atributos de una relación. Mediante la sentencia
SELECT es posible hacer una proyección de una tabla, seleccionando
las columnas de las que queremos obtener datos. Ejemplo:
SELECT clave,poblacion FROM ciudad5;
Las expresiones_select no se limitan a nombres de columnas de tablas,
pueden ser otras expresiones, incluso aunque no correspondan a
ninguna tabla.
También podemos aplicar funciones sobre columnas de tablas, y usar
esas columnas en expresiones para generar nuevas columnas.
Ejemplo:
SELECT clave,UPPER(poblacion),habitantes*1.3 FROM ciudad5;
DML Lenguaje De Manipulación De Datos:
SELECT
• Alias: es posible asignar un alias a cualquiera de las expresiones
select. Esto se puede hacer usando la palabra AS, aunque esta
palabra es opcional. Ejemplo:
SELECT clave, poblacion AS Ciudad FROM gente;
SELECT clave, poblacion ‘Ciudad’ FROM gente;
• Mostrar Filas Repetidas: se puede elegir sólo algunas de las
columnas de una tabla, es posible que se produzcan filas repetidas,
debido a que haya excluido las columnas únicas. La sentencia asume
el valor por defecto (ALL) para el grupo de opciones ALL, DISTINCT y
DISTINCTROW, estas dos ultimas son sinónimos.
SELECT DISTINCT(fecing) ‘Fecha de Ingreso’ FROM Empleados;
• Limitar las Filas (Seleccion): consiste en seleccionar filas de una
relación que cumplan determinadas condiciones. SELECT permite
usar condiciones mediante la cláusula WHERE como parte de su
sintaxis.
SELECT apellido, nombre FROM Empleados
WHERE fecing<=‘2011-03-01’;
DML Lenguaje De Manipulación De Datos:
SELECT
• Limitar las Filas (Seleccion): En una cláusula WHERE se puede usar
cualquier función disponible en MySQL, se puede aplicar lógica
booleana para crear expresiones complejas con operadores AND, OR,
XOR y NOT.
Se excluyen las de resumen, las cuales están diseñadas específicamente
para usarse en cláusulas GROUP BY.
• Agrupar Filas: Es posible agrupar filas en la salida de una sentencia
SELECT según los distintos valores de una columna, usando la
cláusula GROUP BY.
SELECT fecha FROM gente GROUP BY fecha;
El GROUP BY establece el orden de la salida según los valores de la
columna indicada. En este caso, las columnas aparecen ordenadas
por fecha y se eliminan los valores duplicados aún si la proyección no
contiene filas duplicadas, por ejemplo:
SELECT nombre,fecha FROM gente GROUP BY fecha;
DML Lenguaje De Manipulación De Datos:
SELECT
• Agrupar Filas: Pero la diferencia principal es que el uso de la cláusula
GROUP BY permite usar funciones de resumen como la función
COUNT(), que sirve para contar las filas de cada grupo. Ejemplo:

SELECT fecha, COUNT(*) AS cuenta FROM gente GROUP BY fecha;

Existen otras funciones de resumen o reunión, como MAX(), MIN(),


SUM(), AVG(), STD(), VARIANCE().

Estas funciones también se pueden usar sin la cláusula GROUP BY


siempre que no se proyecten otras columnas:

SELECT MAX(sueldo) FROM Empleado;


DML Lenguaje De Manipulación De Datos:
SELECT
• CLAUSULA HAVING: permite hacer selecciones en situaciones en las
que no es posible usar WHERE. Ejemplo:
SELECT ciudad, MAX(temperatura)
FROM muestras
GROUP BY ciudad
HAVING MAX(temperatura)>16;
• CLAUSULA ORDER BY: Además, podemos añadir una cláusula de
orden ORDER BY para obtener resultados ordenados por la columna
que queramos. Ejemplo:
SELECT *
FROM gente
ORDER BY fecha;

Se puede elegir el orden, ascendente (ASC) o Descendente (Desc). Por defecto, se


usa el orden ASC por lo que no es necesario indicarlo
DML Lenguaje De Manipulación De Datos:
SELECT
• Limitar el Numero de Filas de Salida: la cláusula LIMIT permite limitar
el número de filas devueltas. Esta cláusula se suele usar para obtener
filas por grupos, y no sobrecargar demasiado al servidor, o a la
aplicación que recibe los resultados. Para poder hacer esto la clásula
LIMIT admite dos parámetros. Cuando se usan los dos, el primero
indica el número de la primera fila a recuperar, y el segundo el número
de filas a recuperar. Podemos, por ejemplo, recuperar las filas de dos
en dos. Ejemplo:
Select * from gente limit 3;
Select * from gente limit 0,2;
DML Lenguaje De Manipulación De Datos:
Operadores en SQL
MySQL dispone de multitud de operadores diferentes para cada uno de
los tipos de columna.
•Se utilizan para construir expresiones que se usan en cláusulas ORDER
BY y HAVING de la sentencia SELECT y en las cláusulas WHERE de las
sentencias SELECT, DELETE y UPDATE.
•Además se pueden emplear en sentencias SET.
•Estos pueden categorizarse en:
 Operadores Logicos,
 Operadores de Comparacion,
 Operadores Aritmeticos

También podría gustarte