13 - Clave primaria (primary key)


Primer problema:

Trabaje con la tabla "libros" de una librería.

1- Elimine la tabla:

  drop table libros;

2- Créela con los siguientes campos, estableciendo como clave primaria el campo "codigo":

 create table libros(
  codigo number(4) not null,
  titulo varchar2(40) not null,
  autor varchar2(20),
  editorial varchar2(15),
  primary key (codigo)
 );

3- Ingrese los siguientes registros:

 insert into libros (codigo,titulo,autor,editorial)
  values (1,'El aleph','Borges','Emece');
 insert into libros (codigo,titulo,autor,editorial)
  values (2,'Martin Fierro','Jose Hernandez','Planeta');
 insert into libros (codigo,titulo,autor,editorial)
  values (3,'Aprenda PHP','Mario Molina','Nuevo Siglo');

4- Ingrese un registro con código repetido (aparece un mensaje de error)

5- Intente ingresar el valor "null" en el campo "codigo"

6- Intente actualizar el código del libro "Martin Fierro" a "1" (mensaje de error)

7- Actualice el código del libro "Martin Fierro" a "10"

8- Vea qué campo de la tabla "LIBROS" fue establecido como clave primaria

9- Vea qué campo de la tabla "libros" (en minúsculas) fue establecido como clave primaria

La tabla aparece vacía porque Oracle no encuentra la tabla "libros", ya que almacena los nombres de las tablas con mayúsculas.

Ver solución

  drop table libros;

 create table libros(
  codigo number(4) not null,
  titulo varchar2(40) not null,
  autor varchar2(20),
  editorial varchar2(15),
  primary key (codigo)
 );

 insert into libros (codigo,titulo,autor,editorial)
  values (1,'El aleph','Borges','Emece');
 insert into libros (codigo,titulo,autor,editorial)
  values (2,'Martin Fierro','Jose Hernandez','Planeta');
 insert into libros (codigo,titulo,autor,editorial)
  values (3,'Aprenda PHP','Mario Molina','Nuevo Siglo');

 insert into libros (codigo,titulo,autor,editorial)
  values (2,'Alicia en el pais de las maravillas','Lewis Carroll','Planeta');

 insert into libros (codigo,titulo,autor,editorial)
  values (null,'Alicia en el pais de las maravillas','Lewis Carroll','Planeta');

 update libros set codigo=1
  where titulo='Martin Fierro';

 update libros set codigo=10
  where titulo='Martin Fierro';

 select uc.table_name, column_name from user_cons_columns ucc
  join user_constraints uc
  on ucc.constraint_name=uc.constraint_name
  where uc.constraint_type='P' and
  uc.table_name='LIBROS';

 select uc.table_name, column_name from user_cons_columns ucc
  join user_constraints uc
  on ucc.constraint_name=uc.constraint_name
  where uc.constraint_type='P' and
  uc.table_name='libros';

 

Segundo problema:

Un instituto de enseñanza almacena los datos de sus estudiantes en una tabla llamada "alumnos".

1- Elimine la tabla "alumnos":

  drop table alumnos;

2- Cree la tabla con la siguiente estructura intentando establecer 2 campos como clave primaria, el campo "documento" y "legajo":

 create table alumnos(
  legajo varchar2(4) not null,
  documento varchar2(8),
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(codigo),
  primary key(documento)
 );

Un mensaje indica la tabla solamente puede tener UNA clave primaria.

3- Cree la tabla estableciendo como clave primaria el campo "documento":

 create table alumnos(
  legajo varchar2(4) not null,
  documento varchar2(8),
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(documento)
 );

4- Verifique que el campo "documento" no admite valores nulos

5- Ingrese los siguientes registros:

 insert into alumnos (legajo,documento,nombre,domicilio)
  values('A233','22345345','Perez Mariana','Colon 234');
 insert into alumnos (legajo,documento,nombre,domicilio)
  values('A567','23545345','Morales Marcos','Avellaneda 348');

6- Intente ingresar un alumno con número de documento existente (no lo permite)

7- Intente ingresar un alumno con documento nulo (no lo permite)

8- Vea el campo clave primaria de "ALUMNOS".


Ver solución
  drop table alumnos;

 create table alumnos(
  legajo varchar2(4) not null,
  documento varchar2(8),
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(codigo),
  primary key(documento)
 );

 create table alumnos(
  legajo varchar2(4) not null,
  documento varchar2(8),
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key(documento)
 );

 describe alumnos;

 insert into alumnos (legajo,documento,nombre,domicilio)
  values('A233','22345345','Perez Mariana','Colon 234');
 insert into alumnos (legajo,documento,nombre,domicilio)
  values('A567','23545345','Morales Marcos','Avellaneda 348');

 insert into alumnos (legajo,documento,nombre,domicilio)
  values('A642','23545345','Gonzalez Analia','Caseros 444');

 insert into alumnos (legajo,documento,nombre,domicilio)
  values('A685',null,'Miranda Carmen','Uspallata 999');

 select uc.table_name, column_name from user_cons_columns ucc
  join user_constraints uc
  on ucc.constraint_name=uc.constraint_name
  where uc.constraint_type='P' and
  uc.table_name='ALUMNOS';

Retornar