Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Base de Datos

No description
by

oscar flores

on 18 August 2016

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Base de Datos

Bases de Datos

Introducción
SQL, Structure Query Language (Lenguaje de Consulta Estructurado) es un lenguaje de programacion para trabajar con base de datos relacionales como MySQL, Oracle, etc.

MySQL es un interpretador de SQL, es un servidor de base de datos.

MySQL permite crear base de datos y tablas, insertar datos, modificarlos, eliminarlos, ordenarlos, hacer consultas y realizar muchas operaciones, etc., resumiendo: administrar bases de datos.

Ingresando instrucciones en la linea de comandos o embebidas en un lenguaje como PHP, Java, C#, entre otros, nos comunicamos con el servidor. Cada sentencia debe acabar con punto y coma (;).
Atributos especiales
Comandos especiales
Comandos especiales
Bases de datos
Una base de datos es un conjunto de tablas.

Una base de datos tiene un nombre con el cual accederemos a ella.
Tablas
Alter table
Para modificar la estructura de una tabla existente, usamos "alter table".

"alter table" se usa para: agregar nuevos campos, eliminar campos existentes, modificar el tipo de dato de un campo, agregar o quitar modificadores como "null", "unsigned", "auto_increment", cambiar el nombre de un campo, agregar o eliminar la clave primaria, renombrar una tabla.

"alter table" hace una copia temporal de la tabla original, realiza los cambios en la copia, luego borra la tabla original y renombra la copia.
Llaves foraneas
En el ejemplo de la librería en que utilizamos las tablas "libros" y "editoriales" con los campos:

libros: codigo (clave primaria), titulo, autor, codigoeditorial, precio, cantidad y
editoriales: codigo (clave primaria), nombre.

el campo "codigoeditorial" de "libros" es una clave foránea, se emplea para enlazar la tabla "libros" con "editoriales" y es clave primaria en "editoriales" con el nombre "codigo".

Cuando alteramos una tabla, debemos tener cuidado con las claves foráneas. Si modificamos el tipo, longitud o atributos de una clave foránea, ésta puede quedar inhabilitada para hacer los enlaces.

Las claves foráneas y las claves primarias deben ser del mismo tipo para poder enlazarse. Si modificamos una, debemos modificar la otra para que los valores se correspondan.

create table editoriales(
codigo int unsigned auto_increment,
nombre varchar (100),
primary key(codigo)
);
create table libros(
codigo int unsigned auto_increment,
titulo varchar (100),
autor varchar (100),
codigoeditorial int unsigned not null,
precio int,
cantidad int,
primary key (codigo),
constraint foreign key fkey_editorial (codigoeditorial) references editoriales (codigo)
);
Acceder a la consola de MySQL
C:/appserv/mysql/bin>
C:/wamp/bin/mysql/mysql5.5.24/bin>

local--> mysql -u nombre_usuario -p

remoto--> mysql -h nombre_host -u nombre_usuario -p
Crear nuevos usuarios
grant all on nombre_BD.* to nombre_usuario@nombre_host identified by 'contraseña';
Mostrar las BD
show databases;
Crear una BD
create database nombreBD;
Eliminar una BD
drop database nombre_BD;
Mostrar las tablas de una BD
show tables;

Crear tablas
create table nombre_tabla (
campo1 tipo_de_dato,
campo2 tipo_de_dato,
...
campon tipo_de_dato
);
Mostrar la descripción de una tabla
describe nombre_tabla;
Clave primaria
Una clave primaria es un campo que identifica 1 solo registro en una tabla. Los valores no se repiten ni pueden ser nulos. Para definir un campo como clave primaria agregamos "primary key" luego de la definición de todos los campos y entre paréntesis colocamos el nombre del campo que queremos como clave.
Campo entero auto incrementable
Un campo de tipo entero puede tener otro atributo extra 'auto_increment'. Los valores de un campo 'auto_increment', se inician en 1 y se incrementan en 1 automáticamente.

Se utiliza generalmente en campos correspondientes a códigos de identificación para generar valores únicos para cada nuevo registro que se inserta.

Sólo puede haber un campo "auto_increment" y debe ser clave primaria.
Para establecer que un campo autoincremente sus valores automáticamente, éste debe ser entero (integer) y debe ser clave primaria.

create table libros(
codigo int auto_increment,
titulo varchar(20),
autor varchar(30),
editorial varchar(15),
primary key (codigo)
);
truncate
Aprendimos que para borrar todos los registro de una tabla se usa "delete" sin condición "where".

También podemos eliminar todos los registros de una tabla con "truncate table". Por ejemplo, queremos vaciar la tabla "libros", usamos:

truncate table libros;

La sentencia "truncate table" vacía la tabla (elimina todos los registros) y vuelve a crear la tabla con la misma estructura.

La diferencia con "drop table" es que esta sentencia borra la tabla, "truncate table" la vacía.

La diferencia con "delete" es la velocidad, es más rápido "truncate table" que "delete" (se nota cuando la cantidad de registros es muy grande) ya que éste borra los registros uno a uno.
valores null
"null' significa "dato desconocido" o "valor inexistente". No es lo mismo que un valor 0, una cadena vacía o una cadena literal "null".

Los campos establecidos como clave primaria no aceptan valores nulos. Nuestro campo clave primaria, está definido "auto_increment"; si intentamos ingresar el valor "null" para este campo, no lo tomará y seguirá la secuencia de incremento.

El campo "titulo", no debería aceptar valores nulos, para establecer este atributo debemos crear la tabla con la siguiente sentencia:

create table libros(
codigo int auto_increment,
titulo varchar(20) not null
autor varchar(30),
editorial varchar(15),
precio float,
primary key (codigo) );

Between in
Like - not like
Los operadores relacionales nos permiten comparar valores numéricos y cadenas de caracteres. Pero al realizar la comparación de cadenas, busca coincidencias de cadenas completas.

Imaginemos que tenemos registrados estos 2 libros:

El Aleph de Borges;
Antologia poetica de J.L. Borges;

Si queremos recuperar todos los libros cuyo autor sea "Borges", y especificamos la siguiente condición:

select * from libros
where autor='Borges';

sólo aparecerá el primer registro, ya que la cadena "Borges" no es igual a la cadena "J.L. Borges".

Esto sucede porque el operador "=" (igual), también el operador "<>" (distinto) comparan cadenas de caracteres completas. Para comparar porciones de cadenas utilizamos los operadores "like" y "not like".

select * from libros
where autor like "%Borges%";
alter table - add
Necesitamos agregar el campo "cantidad", de tipo smallint unsigned not null, tipeamos:

alter table libros
add cantidad smallint unsigned not null;


alter table libros
add cantidad tinyint unsigned after autor;

alter table - drop
"alter table" nos permite alterar la estructura de la tabla, podemos usarla para eliminar un campo.

Continuamos con nuestra tabla "libros".

Para eliminar el campo "edicion" tipeamos:

alter table libros
drop edicion;


alter table libros
drop editorial, drop cantidad;
Based on Jim Harvey's speech structures
Usar una BD
use nombre_BD
Borrar una tabla
drop table nombre_tabla;
Práctica 1
A) Queremos almacenar información referente a una biblioteca.

1- Elimine la tabla "libros" si existe:
drop table if exists libros;

2- Cree una tabla llamada "libros", debe tener los siguientes campos:
titulo varchar(20), autor varchar(30), y editorial varchar(15).

3- Intente crearla nuevamente. Aparece mensaje de error.

4- Visualice las tablas existentes.

5- Visualice la estructura de la tabla "libros".

6- Elimine la tabla, si existe.

7- Intente eliminar la tabla sin la clausula if exists.


Creación de una tabla y mostrar sus datos
Una base de datos almacena sus datos en tablas.

Una tabla es una estructura de datos que organiza los datos en columnas y filas; cada columna es un campo (o atributo) y cada fila, un registro. La intersección de una columna con una fila, contiene un dato específico, un solo valor.
Insertar registros en una tabla
insert into nombre_tabla(campo1, campo2, ..., campo_n) values (valor1, valor2, ..., valor_n);

Mostrar datos de una tabla
select * from nombre_tabla;
Práctica 2
A) Trabajemos con la tabla "libros".

1- Visualice las tablas existentes.

2- Visualice la estructura de la tabla "libros".

3- Ingrese los siguientes registros:
'Fundamentos de bases de datos','Abraham S.','McGrawHill';
'Introducción a los sistemas de BD','Olga Pons','Paraninfo';
'SQL y Álgebra relacional','Gabillaud J.','ENI Ediciones';

4- Muestre todos los registros.
Cargar registros a una tabla y recuperar su información
Un registro es una fila de la tabla que contiene los datos propiamente dichos. Cada registro tiene un dato por cada columna.

Al ingresar los datos de cada registro debe tenerse en cuenta la cantidad y el orden de los campos.
Práctica 3
A) Recuperación de algunos campos.
Un comercio que vende artículos de computación registra la información de sus productos en la tabla llamada "articulos".

1- Crear na base de datos llamada tienda

2- Cree la tabla "articulos" con los campos necesarios para almacenar los siguientes datos:
- código del artículo: entero,
- nombre del artículo: 20 caracteres de longitud,
- descripción: 30 caracteres de longitud,
- precio: float.

3- Vea la estructura de la tabla (describe).

4- Ingrese algunos registros:
insert into articulos (codigo, nombre, descripcion, precio)
values (1,'impresora','Epson Stylus C45',400.80);
insert into articulos (codigo, nombre, descripcion, precio)
values (2,'impresora','Epson Stylus C85',500);
insert into articulos (codigo, nombre, descripcion, precio)
values (3,'monitor','Samsung 14',800);

5- Muestre todos los campos de todos los registros.

6- Muestre sólo el nombre, descripción y precio.

Seleccionar datos que cumplan con cierta(s) condición(es)
select nombre_campos
from nombre_tabla
where campo='condición'

Práctica 4 a
Un comercio que vende artículos de computación registra los datos de sus artículos en una tabla con ese nombre.

1- Cree la tabla, con la siguiente estructura:
create table articulos2(
codigo integer,
nombre varchar(20),
descripcion varchar(30),
precio float,
cantidad integer
);

2- Ingrese algunos registros:
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (1,'impresora','Epson Stylus C45',400,80);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (2,'impresora','Epson Stylus C85',500,30);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (3,'monitor','Samsung 14',800,10);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (4,'teclado','ingles Biswal',100,50);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (5,'teclado','español Biswal',90,50);


Recuperación de registros específicos
El comando "select" recupera los registros de una tabla. Detallando los nombres de los campos separados por comas, indicamos que seleccione todos los campos de la tabla que nombramos.

Existe una cláusula, "where" que es opcional, con ella podemos especificar condiciones para la consulta "select". Es decir, podemos recuperar algunos registros, sólo los que cumplan con ciertas condiciones indicadas con la cláusula "where".
Práctica 4 b
3- Seleccione todos los registros de la tabla. (select).

4- Muestre los datos de las impresoras.

5- Seleccione los artículos cuyo precio sea mayor o igual a 500:
select * from articulos
where precio>=500;

6- Seleccione los artículos cuya cantidad sea menor a 30:


7- Selecciones el nombre y descripción de los artículos que no cuesten $100:


Práctica 5
Trabajando con la BD Tienda

1- Seleccione todos los registros de la tabla.

2- Elimine los artículos cuyo precio sea mayor o igual a 500.

3- Elimine todas las impresoras.

4- Elimine todos los artículos cuyo código sea diferente a 4.


Borrar registros de una tabla
Para eliminar los registros de una tabla usamos el comando "delete".

delete from usuarios;

delete from usuarios where nombre='oscar';
Práctica 6
Trabajando con la BD Tienda

1- Ingrese algunos registros:
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (1,'impresora','Epson Stylus C45',400.80,20);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (2,'impresora','Epson Stylus C85',500,30);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (3,'monitor','Samsung 14',800,10);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (4,'teclado','ingles Biswal',100,50);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (5,'teclado','español Biswal',90,50);

5- Actualice el precio a "400" del artículo cuya descripción sea "Epson Stylus C45":
update articulos set precio=400
where descripcion='Epson Stylus C45';

6- Actualice la cantidad a 100 de todas los teclados:
update articulos set cantidad=100
where nombre='teclado';

7- Actualice la cantidad a 50 y el precio a 550 del artículo con código 2:
update articulos set cantidad=50, precio=550
where codigo=2;

8- Actualice la cantidad a 100 de todos los registros con cantidad=1000
(no hay registros que cumplan la condición, ningún registro afectado):
update articulos set cantidad=100
where cantidad=1000;


Modificar registros de una tabla
Para modificar uno o varios datos de uno o varios registros utilizamos "update" (actualizar).

update usuarios set nombre='oscar';

update usuarios set nombre='oscar' where id=1;
Práctica 6
Un videoclub almacena información sobre sus películas en una tabla llamada "peliculas".

1- Elimine la tabla si existe.

2- Créela con la siguiente estructura:
-codigo (entero), autoincremento,
-titulo (cadena de 30),
-actor (cadena de 20),
-duracion (entero),
-clave primaria: codigo.

3- Visualice la estructura de la tabla "peliculas".



4- Ingrese los siguientes registros:

insert into peliculas (titulo,actor,duracion)
values('Mision imposible','Tom Cruise',120);

insert into peliculas (titulo,actor,duracion)
values('Harry Potter y la piedra filosofal','xxx',180);

insert into peliculas (titulo,actor,duracion)
values('Harry Potter y la camara secreta','xxx',190);

insert into peliculas (titulo,actor,duracion)
values('Mision imposible 2','Tom Cruise',120);

insert into peliculas (titulo,actor,duracion)
values('La vida es bella','zzz',220);

5- Seleccione todos los registros y verifique la carga automática de los códigos.

6- Actualice las películas cuyo código es 3 colocando en "actor" 'Daniel R.'

7- Elimine la película 'La vida es bella'.
8- Elimine todas las películas cuya duración sea igual a 120 minutos.

9- Visualice los registros.

10- Ingrese el siguiente registro, sin valor para la clave primaria:
insert into peliculas (titulo,actor,duracion)
values('Mujer bonita','Richard Gere',120);
Note que sigue la secuencia tomando el último valor generado, aunque ya no esté.

11- Ingrese el siguiente registro, con valor para la clave primaria:
insert into peliculas (codigo,titulo,actor,duracion)
values(1,'Tootsie','D. Hoffman',90);
Lo acepta porque la clave no está repetida.

12- Intente ingresar un registro con valor de clave repetida.

13- Ingrese el siguiente registro, sin valor para la clave primaria:
insert into peliculas (titulo,actor,duracion)
values('Un oso rojo','Julio Chavez',100);
Note que sigue la secuencia.
valores sin signo
Los campos de tipo entero pueden tener el atributo "auto_increment", que incrementa automáticamente el valor del campo en 1.

Los campos de cualquier tipo aceptan el atributo "null" y "not null" con lo cual permiten o no valores nulos.

Otro atributo que permiten los campos de tipo numérico es "unsigned".

El atributo "unsigned" (sin signo) permite sólo valores positivos.

Si necesitamos almacenar edades, por ejemplo, nunca guardaremos valores negativos, entonces sería adecuado definir un campo "edad" de tipo entero sin signo:

edad integer unsigned;

valores por default
Podemos establecer valores por defecto para los campos cuando creamos la tabla. Para ello utilizamos "default" al definir el campo. Por ejemplo, queremos que el valor por defecto del campo "precio" sea 1.11 y el valor por defecto del campo "autor" sea "Desconocido":

create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30) default 'Desconocido',
precio decimal(5,2) unsigned default 1.11,
cantidad int unsigned not null,
primary key (codigo)
);

Los campos definidos "auto_increment" no pueden explicitar un valor con "default", tampoco los de tipo "blob" y "text".
Una pequeña biblioteca registra los préstamos de sus libros en una tabla llamada "prestamos". En ella almacena la siguiente información: título del libro, documento de identidad del socio a quien se le presta el libro, fecha de préstamo, fecha en que tiene que devolver el libro y si el libro ha sido o no devuelto.

1- Elimine la tabla "prestamos" si existe.

2- Cree la tabla:
create table prestamos(
id int unsigned auto_increment,
titulo varchar(40) not null,
documento char(8) not null,
fechaprestamo date not null,
fechadevolucion date,
devuelto char(1) default 'n' ,
primary key (id));

3- Ingrese algunos registros:
insert into prestamos (titulo,documento,fechaprestamo,fechadevolucion)
values ('Manual de 1 grado','23456789','2006-08-10','2006-08-12');
insert into prestamos (titulo,documento,fechaprestamo,fechadevolucion)
values ('Alicia en el pais de las maravillas','23456789','2006-08-12','2006-08-14');
insert into prestamos (titulo,documento,fechaprestamo,fechadevolucion)
values ('El aleph','22543987','2006-08-15','2006-08-17');
insert into prestamos (titulo,documento,fechaprestamo,fechadevolucion)
values ('Manual de geografia 5 grado','25555666','2006-08-30','2006-09-01');

4- Seleccione todos los registros para ver qué se guardó en el campo "devuelto" para el cual no
ingresamos datos.

5-Borra todos los registros de la tabla prestamo con el comando delete.
6-Ingresa un nuevo registro.
7-Vacía la tabla prestamos con el comando truncate.
8-Ingresa un nuevo registro.
Columnas calculadas
Es posible obtener salidas en las cuales una columna sea el resultado de un cálculo y no un campo de una tabla.

Si queremos ver los títulos, precio y cantidad de cada libro escribimos la siguiente sentencia:

select titulo,precio,cantidad
from libros;

Si queremos saber el monto total en dinero de un título podemos multiplicar el precio por la cantidad por cada título, pero también podemos hacer que MySQL realice el cálculo y lo incluya en una columna extra en la salida:


select titulo, precio,cantidad,precio*cantidad
from libros;

Clausula "order by"
Podemos ordenar el resultado de un "select" para que los registros se muestren ordenados por algún campo, para ello usamos la cláusula "order by

or ejemplo, recuperamos los registros de la tabla "libros" ordenados por el título:

select codigo,titulo,autor,editorial,precio from libros order by titulo;


Por defecto, si no aclaramos en la sentencia, los ordena de manera ascendente (de menor a mayor). Podemos ordenarlos de mayor a menor, para ello agregamos la palabra clave "desc":

select codigo,titulo,autor,editorial,precio from libros order by editorial desc;

Operadores lógicos
Hasta el momento, hemos aprendido a establer una condición con "where" utilizando operadores relacionales. Podemos establecer más de una condición con la cláusula "where", para ello aprenderemos los operadores lógicos.

Son los siguientes:

- and, significa "y",
- or, significa "y/o",
- xor, significa "o",
- not, significa "no", invierte el resultado
- (), paréntesis

Los operadores lógicos se usan para combinar condiciones.

Queremos recuperar todos los registros cuyo autor sea igual a "Borges" y cuyo precio no supere los 20 pesos, para ello necesitamos 2 condiciones:

select * from libros
where (autor='Borges') and
(precio<=20);



Existen otros que simplifican algunas consultas:
Para recuperar de nuestra tabla "libros" los registros que tienen precio mayor o igual a 20 y menor o igual a 40, usamos 2 condiciones unidas por el operador lógico "and":
select * from libros
where precio>=20 and precio<=40;

Podemos usar "between":
select * from libros
where precio between 20 and 40;

Para recuperar los libros cuyo autor sea 'Paenza' o 'Borges' usamos 2 condiciones:

select * from libros
where autor='Borges' or autor='Paenza';

Podemos usar "in":

select * from libros
where autor in('Borges','Paenza');


Comando "count"
Existen en MySQL funciones que nos permiten contar registros, calcular sumas, promedios, obtener valores máximos y mínimos. Veamos algunas de ellas.

Imaginemos que nuestra tabla "libros" contiene muchos registros. Para averiguar la cantidad sin necesidad de contarlos manualmente usamos la función "count()":

select count(*) from libros;

Funciones de agrupamiento



Existen en MySQL funciones que nos permiten contar registros, calcular sumas, promedios, obtener valores máximos y mínimos. Ya hemos aprendido "count()", veamos otras.

La función "sum()" retorna la suma de los valores que contiene el campo especificado. Por ejemplo, queremos saber la cantidad de libros que tenemos disponibles para la venta:

select sum(cantidad) from libros;

Para averiguar el valor máximo o mínimo de un campo usamos las funciones "max()" y "min()" respectivamente. Ejemplo, queremos saber cuál es el mayor precio de todos los libros:

select max(precio) from libros;

Queremos saber cuál es el valor mínimo de los libros de "Rowling":

select min(precio) from libros
where autor like '%Rowling%';

La función avg() retorna el valor promedio de los valores del campo especificado. Por ejemplo, queremos saber el promedio del precio de los libros referentes a "PHP":

select avg(precio) from libros
where titulo like '%PHP%';

Indice único
Veamos el otro tipo de índice, único. Un índice único se crea con "unique", los valores deben ser únicos y diferentes, aparece un mensaje de error si intentamos agregar un registro con un valor ya existente. Permite valores nulos y pueden definirse varios por tabla. Podemos darle un nombre, si no se lo damos, se coloca uno por defecto.

Vamos a trabajar con nuestra tabla "libros".

Crearemos dos índices únicos, uno por un solo campo y otro multicolumna:

create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
unique i_codigo(codigo),
unique i_tituloeditorial (titulo,editorial)
);

Reemplazar registros
"replace" reemplaza un registro por otro.

Cuando intentamos ingresar con "insert" un registro que repite el valor de un campo clave o indexado con índice único, aparece un mensaje de error indicando que el valor está duplicado. Si empleamos "replace" en lugar de "insert", el registro existente se borra y se ingresa el nuevo, de esta manera no se duplica el valor único.

Intentamos insertar un registro con valor de clave repetida (código 23):

insert into libros values(23,'Java en 10 minutos','Mario Molina','Emece',25.5);

Aparece un mensaje de error indicando que hay registros duplicados.

Si empleamos "replace":

replace into libros values(23,'Java en 10 minutos','Mario Molina','Emece',25.5);


alter table - change
Con "alter table" podemos cambiar el nombre de los campos de una tabla.


Queremos cambiar el nombre del campo "costo" por "precio", escribimos:

alter table libros
change costo precio decimal (5,2);

alter table - rename
Podemos cambiar el nombre de una tabla con "alter table".

Para cambiar el nombre de una tabla llamada "amigos" por "contactos" usamos esta sintaxis:

alter table amigos rename contactos;

Tipos de datos "enum"
El tipo de dato "enum" representa una enumeración. Puede tener un máximo de 65535 valores distintos. Es una cadena cuyo valor se elige de una lista enumerada de valores permitidos que se especifica al definir el campo. Puede ser una cadena vacía, incluso "null".

Los valores presentados como permitidos tienen un valor de índice que comienza en 1.

create table postulantes(
numero int unsigned auto_increment,
documento char(8),
nombre varchar(30),
estudios enum('ninguno','primario','secundario', 'terciario','universitario'),
primary key(numero)
);


insert into postulantes (documento,nombre,estudios)
values('22255265','Juana Pereyra',5);
Tipos de datos "set"
El tipo de dato "set" representa un conjunto de cadenas.

Puede tener 1 ó más valores que se eligen de una lista de valores permitidos que se especifican al definir el campo y se separan con comas. Puede tener un máximo de 64 miembros. Ejemplo: un campo definido como set ('a', 'b') not null, permite los valores 'a', 'b' y 'a,b'. Si carga un valor no incluido en el conjunto "set", se ignora y almacena cadena vacía.

Es similar al tipo "enum" excepto que puede almacenar más de un valor en el campo.

create table postulantes(
numero int unsigned auto_increment,
documento char(8),
nombre varchar(30),
idioma set('ingles','italiano','portuges'),
primary key(numero)
);

Ingresamos un registro:

insert into postulantes (documento,nombre,idioma)
values('22555444','Ana Acosta','ingles');

Full transcript