Está en la página 1de 8

MYSQL CLASE 3

11 - CLAVE PRIMARIA.

Una clave primaria es un campo (o varios) que identifica 1 solo registro (fila) en una
tabla.

Para un valor del campo clave existe solamente 1 registro. Los valores no se repiten
ni pueden ser nulos.

Veamos un ejemplo, si tenemos una tabla con datos de personas, el número de


documento puede establecerse como clave primaria, es un valor que no se repite;
puede haber personas con igual apellido y nombre, incluso el mismo domicilio
(padre e hijo por ejemplo), pero su documento será siempre distinto.

Si tenemos la tabla "usuarios", el nombre de cada usuario puede establecerse como


clave primaria, es un valor que no se repite; puede haber usuarios con igual clave,
pero su nombre de usuario será siempre distinto.

Establecemos que un campo sea clave primaria al momento de creación de la tabla:

create table usuarios (


nombre varchar(20),
clave varchar(10),
primary key(nombre)
);

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.

Si visualizamos la estructura de la tabla con "describe" vemos que el campo


"nombre" es clave primaria y no acepta valores nulos

Ingresamos algunos registros:

insert into usuarios (nombre, clave)


values ('Leonardo','payaso');
insert into usuarios (nombre, clave)
values ('MarioPerez','Marito');
insert into usuarios (nombre, clave)
values ('Marcelo','River');
insert into usuarios (nombre, clave)
values ('Gustavo','River');

Si intentamos ingresar un valor para el campo clave que ya existe, aparece un


mensaje de error indicando que el registro no se cargó pues el dato clave existe.
Esto sucede porque los campos definidos como clave primaria no pueden repetirse.

PROFESORA | NANCY ALVAREZ CARO 27 de enero de 2019 1


MYSQL CLASE 3

Ingresamos un registro con un nombre de usuario repetido, por ejemplo:

insert into usuarios (nombre, clave)


values ('Gustavo','Boca');

Una tabla sólo puede tener una clave primaria. Cualquier campo (de cualquier tipo)
puede ser clave primaria, debe cumplir como requisito, que sus valores no se
repitan.

Al establecer una clave primaria estamos indexando la tabla, es decir, creando un


índice para dicha tabla

Problema a resolver
A) Trabaja con la tabla "libros" de una librería.

1- Elimina la tabla si existe.

2- Créala con los siguientes campos y clave: codigo (integer),


titulo (cadena de 20 caracteres de longitud), autor (cadena de 30),
editorial (cadena de 15), codigo será clave primaria:

3- Visualiza la estructura de la tabla "libros", comprueba la clave primaria.

4- Ingresa los siguientes registros:


1,El aleph,Borges,Planeta;
2,Martin Fierro,Jose Hernandez,Emece;
3,Aprenda PHP,Mario Molina,Emece;
4,Cervantes y el quijote,Borges,Paidos;
5,Matematica estas ahi, Paenza, Paidos;

5- Selecciona todos los registros.

6- Ingresa un registro con código no repetido y nombre de autor repetido.

7- Ingrese un registro con código no repetido y título y editorial repetidos.

8- Intente ingresar un registro que repita el campo clave (aparece


mensaje de error por clave repetida).

B) Una empresa almacena los datos de sus clientes en una tabla llamada
"clientes".

1- Elimina la tabla "clientes" si existe:

PROFESORA | NANCY ALVAREZ CARO 27 de enero de 2019 2


MYSQL CLASE 3

2- Créala con los siguientes campos y clave:


create table clientes(
documento varchar(8),
apellido varchar(20),
nombre varchar(20),
domicilio varchar(30),
telefono varchar (11),
primary key(documento)
);

3- Visualiza la estructura de la tabla para comprobar la clave primaria


establecida.

4- Ingresa los siguientes registros:


insert into clientes (documento,apellido,nombre,domicilio, telefono)
values('22345678','Perez','Marcos','Colon 123','4545454');
insert into clientes (documento,apellido,nombre,domicilio, telefono)
values('23222222','Garcia','Ana','Avellaneda 1345','4252652');
insert into clientes (documento,apellido,nombre,domicilio, telefono)
values('20454545','Lopez','Susana','Urquiza 344','4522525');
insert into clientes (documento,apellido,nombre,domicilio, telefono)
values('35454545','Lopez','Susana','Urquiza 344','4522525');

Nota que hay 2 registros con todos los datos iguales excepto el
documento.

6- Ingrese un cliente con código no repetido y apellido y nombre repetido.

7- Ingrese un cliente con código no repetido y domicilio repetido.

8- Intente ingresar un registro con documento repetido (aparece mensaje


de error por clave repetida).

C) Un instituto de enseñanza almacena los datos de sus estudiantes en


una tabla llamada "alumnos".

1- Elimina la tabla "alumnos" si existe.

2- Crea la tabla con la siguiente estructura:


create table alumnos(
matricula varchar(4) not null,
documento varchar(8) not null,

PROFESORA | NANCY ALVAREZ CARO 27 de enero de 2019 3


MYSQL CLASE 3

apellido varchar(30),
nombre varchar(30),
domicilio varchar(30),
primary key (matricula)
);

3- Ingresa los siguientes registros:


insert into alumnos (matricula,documento,apellido,nombre,domicilio)
values('A233','22345345','Perez','Mariana','Colon 234');
insert into alumnos (matricula,documento,apellido,nombre,domicilio)
values('A567','23545345','Morales','Marcos','Avellaneda 348');
insert into alumnos (matricula,documento,apellido,nombre,domicilio)
values('B654','24356345','Gonzalez','Analia','Caseros 444');
insert into alumnos (matricula,documento,apellido,nombre,domicilio)
values('A642','20254125','Torres','Ramiro','Dinamarca 209');
insert into alumnos (matricula,documento,apellido,nombre,domicilio)
values('B509','20445778','Miranda','Carmen','Uspallata 999');
insert into alumnos (matricula,documento,apellido,nombre,domicilio)
values('C777','28111444','Figueroa','Natalia','Sarmiento 856');

4- Selecciona todos los registros.

5- Ingresa 2 alumnos con igual nombre y apellido pero distinta matricula.

6- Intenta ingresar un registro que repita el campo clave ("matricula").


Aparece mensaje de error por clave repetida).

12 - CAMPO ENTERO CON AUTOINCREMENTO.

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 (o estar
indexado).

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,

PROFESORA | NANCY ALVAREZ CARO 27 de enero de 2019 4


MYSQL CLASE 3

titulo varchar(50),
autor varchar(50),
editorial varchar(25),
primary key (codigo)
);

Para definir un campo autoincrementable colocamos "auto_increment" luego de la


definición del campo al crear la tabla.

Cuando un campo tiene el atributo "auto_increment" no es necesario ingresar valor


para él, porque se inserta automáticamente tomando el último valor como
referencia, o 1 si es el primero.

Para ingresar registros omitimos el campo definido como "auto_increment", por


ejemplo:

insert into libros (titulo,autor,editorial)


values('El aleph','Borges','Planeta');

Este primer registro ingresado guardará el valor 1 en el campo correspondiente al


código.

Si continuamos ingresando registros, el código (dato que no ingresamos) se cargará


automáticamente siguiendo la secuencia de autoincremento.

Un campo "auto_increment" funciona correctamente sólo cuando contiene


únicamente valores positivos.

Está permitido ingresar el valor correspondiente al campo "auto_increment", por


ejemplo:

insert into libros (codigo,titulo,autor,editorial)


values(6,'Martin Fierro','Jose Hernandez','Paidos');

Pero debemos tener cuidado con la inserción de un dato en campos


"auto_increment". Debemos tener en cuenta que:

- si el valor está repetido aparecerá un mensaje de error y el


registro no se
ingresará.
- si el valor dado saltea la secuencia, lo toma igualmente y
en las siguientes
inserciones, continuará la secuencia tomando el valor más
alto.
- si el valor ingresado es 0, no lo toma y guarda el registro
continuando la
secuencia.

PROFESORA | NANCY ALVAREZ CARO 27 de enero de 2019 5


MYSQL CLASE 3

- si el valor ingresado es negativo (y el campo no está definido


para aceptar sólo
valores positivos), lo ingresa.

Para que este atributo funcione correctamente, el campo debe contener solamente
valores positivos

Problema a resolver
A) Una farmacia guarda información referente a sus medicamentos en
una tabla llamada "medicamentos".

1- Elimina la tabla, si existe:

2- Crea la tabla con la siguiente estructura:


create table medicamentos(
codigo integer auto_increment,
nombre varchar(20),
laboratorio varchar(20),
precio float,
cantidad integer,
primary key (codigo)
);

3- Visualiza la estructura de la tabla "medicamentos" (describe).

4- Ingresa los siguientes registros:


insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Sertal','Roche',5.2,100);
insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Buscapina','Roche',4.10,200);
insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Amoxidal 500','Bayer',15.60,100);

5- Verifica que el campo "código" generó los valores de modo automático:


select codigo,nombre,laboratorio,precio,cantidad
from medicamentos;

6- Intenta ingresar un registro con un valor de clave primaria repetido.

7- Ingresa un registro con un valor de clave primaria no repetido


salteando la secuencia:
insert into medicamentos (codigo,nombre, laboratorio,precio,cantidad)
values(12,'Paracetamol 500','Bago',1.90,200);

PROFESORA | NANCY ALVAREZ CARO 27 de enero de 2019 6


MYSQL CLASE 3

8- Ingresa el siguiente registro:


insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Bayaspirina','Bayer',2.10,150);

Nota que sigue la secuencia.

B) Un videoclub almacena información sobre sus películas en una tabla


llamada "peliculas".

1- Elimina la tabla si existe.

2- Créala con la siguiente estructura:


-codigo (entero), autoincremento,
-titulo (cadena de 30),
-actor (cadena de 20),
-duracion (entero),
-clave primaria: codigo.

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

4- Ingresa 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- Selecciona todos los registros y verifica la carga automática de los


códigos.

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

7- Elimina la película 'La vida es bella'.

8- Elimina todas las películas cuya duración sea igual a 120 minutos.

9- Visualiza los registros.

PROFESORA | NANCY ALVAREZ CARO 27 de enero de 2019 7


MYSQL CLASE 3

10- Ingresa el siguiente registro, sin valor para la clave primaria:


insert into peliculas (titulo,actor,duracion)
values('Mujer bonita','Richard Gere',120);
Nota que sigue la secuencia tomando el último valor generado, aunque
ya no esté.

11- Ingresa 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- Intenta ingresar un registro con valor de clave repetida.

13- Ingresa el siguiente registro, sin valor para la clave primaria:


insert into peliculas (titulo,actor,duracion)
values('Un oso rojo','Julio Chavez',100);

Nota que sigue la secuencia.

PROFESORA | NANCY ALVAREZ CARO 27 de enero de 2019 8

También podría gustarte