Lenguaje de manipulación de datos (II)

Insertar datos.

    Hasta ahora hemos visto como se almacenan los datos en una base de datos y como consultar esos datos almacenados, pero no hemos visto como almacenar dichos datos.

    Para almacenar datos en una base de datos debemos insertar filas en las tablas. Para ellos SQL pone a nuestra disposición la sentencia INSERT.

[arriba]


Inserción de filas

    El proceso de inserción de filas consiste en añadir a una tabla una o más filas y en cada fila todos o parte de sus campos.

    Podemos distinguir dos formas de insertar filas:

  • Inserción individual de filas.
  • Inserción multiple de filas.

    La sintaxis de la sentencia INSERT es diferente según cual sea nuestro proposito.

    Sólo podremos omitir un campo al efectuar una inserción cuando este acwepte valores nulos.

[arriba]


Inserción individual de filas

    Para realizar la insercción individual de filas SQL posee la instrucción INSERT INTO.La insercción individual de filas es la que más comunmente utilizaremos. Su sintaxis es la siguiente:


INSERT INTO
<nombre_tabla>
[(<campo1>[,<campo2>,...])]
values
(<valor1>,<valor2>,...);

    Como se puede observar la sentencia tiene dos partes claramente diferenciadas, por un lado la propia INSERT INTO seguida de la lista de campos en los que queremos insertar los datos, y por otro la lista de valores que queremos insertar en los campos. La mejor forma de ver esto es a través de un ejemplo.


INSERT INTO
tCoches
(matricula,
marca      ,
modelo     ,
color      ,
numero_kilometros)
values
('M1111CA',
'RENAULT',
'MEGANE TR100',
'NEGRO DIAMANTE',
78000);
Nota:Hemos utilizado el color rojo para los datos de tipo texto, entrecomillados con la comilla simple, y el azul para 
los numericos.

    Con esta sentencia INSERT creamos un registro en la tabla tCoches con los valores especificados, es decir, la matricula tendrá el valor M-1111-CA, la marca será RENAULT y así sucesivamente.

    ¿Que ocurriría si ya existiera un coche con la matricula M-1111-CA? Se producirá un error, porque hemos definido la clave primaria en el campo matricula, y como hemos visto la clave primaria debe ser única.

    Si omitimos algún par " campo-valor " en la sentencia INSERT, pueden ocurrir varias cosas:

  • Que se produzca un error , si el campo  no acepta valores nulos.
  • Que se grave el registro y se deje nulo el campo, cuando el campo acepte valores nulos.
  • Que se grave el registro y se tome el valor por defecto, cuando el campo tenga definido un valor por defecto.

    Que hacer en cada cada momento dependerá del programa.

    Por ejemplo, la siguiente sentencia creará un registro en la tabla tCoches con el campo numero_kilometros cero, ya que este es su valor por defecto.


INSERT INTO
tCoches
(matricula,
marca      ,
modelo     ,
color)
values
('M1111CA',
'RENAULT',
'MEGANE TR100',
'NEGRO DIAMANTE');

[arriba]


Inserción multiple de filas

La sentencia INSERT permite tambien insertar varios registros en una tabla. Pare ello se utiliza una combinación de la sentencia INSERT junto a una sentencia SELECT. El resultado es que se insertan todos los registros devueltos por la consulta.


INSERT INTO
<nombre_tabla>
[(<campo1>[,<campo2>,...])]
SELECT
[(<campo1>[,<campo2>,...])]
FROM
<nombre_tabla_origen>;

Para poder utilizar la inserción multiple de filas se deben cumplir las siguientes normas:

  • La lista de campos de las sentencias insert y select deben coincidir en número y tipo de datos.
  • Ninguna de las filas devueltas por la consulta debe infringir las reglas de integridad de la tabla en la que vayamos a realizar la inserción.

Pongamos un ejemplo, vamos a crear una tabla con las diferentes marcas que tenemos en la base de datos. La sentencia SQL para crear la tabla es la siguiente:


CREATE TABLE
 tMarcas
(
codigo    integer not null identity(1,1),
marca     varchar(255),
constraint PK_Marcas primary key (codigo) 
);
Nota: Hemos incluido la función identity para el campo codigo, esta función es propia de SQL Server e indica que 
el código se genera automáticamente cada vez que se inserta un registro con un valor autonumérico. Praticamente
todos los gestores de bases de datos dan la opción del campo autonumerico o incremental, si bien el modo varias.
Para SQL Server utilizaremos la funcion identity, para ORACLE las secuencias ...

Una vez que tenemos creada la tabla de marcas vamos a insetar otro par de registros en la tabla de coches, para ello utilizamos una sentencia insert into para una única fila.


INSERT INTO tCoches
(matricula,
marca      ,
modelo     ,
color)
values
('M2233FH',
'SEAT',
'LEON FR',
'ROJO');

INSERT INTO tCoches
(matricula,
marca      ,
modelo     ,
color)
values
('M1332FY',
'FORD',
'FIESTA',
'GRIS PLATA');

    Ahora tenemos tres marcas diferentes en la tabla tCoches, y queremos insertarlas en la tabla de marcas, para ello podemos realizar tres inserciones individuales, pero ¿que pasaria si no supieramos de antemano el número de marcas?¿y si fueran unas cincuenta marcas?. Nos podriamos pasar el día entero escribiendo sentencias insert into.

    Afortunadamente podemos realizar una inserción multiple del siguiente modo:


INSERT INTO
tMarcas
(marca)
SELECT DISTINCT marca FROM tCoches;
 

    Como resultado obtenemos un registro en la tabla tMarcas por cada marca de la tabla tCoches. El campo codigo se ha generado automáticamente ya que está definido como identidad.

CODIGO MARCA
1 FORD
2 RENAULT
3

SEAT

    Demonos cuenta de que el orden de generación no ha sido el mismo que el de inserción, sino que se ha aplicado el orden en el que han sido devueltos los datos por la sentencia SELECT.

    Ahora deberiamos cambiar los datos de la tabla tCoches, para guardar el código de la marca en lugar de su descripción, pero para ello necesitamos saber como modificar un dato grabado ... Es momento de pasar al siguiente punto, la actualización de datos.

[arriba]


Pedro  Herrarte  Sánchez
Insertar datos. INSERT
Pedro Herrarte Sánchez

Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación. Posee mas de diez años de experiencia trabajando para las principales empresas de España. Es especialista en tecnologías .NET, entornos Web (ASP.NET, ASP.NET MVC,jQuery, HTML5), bases de datos (SQL Server y ORACLE) e integración de sistemas. Es experto en desarrollo (C#, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE). Pedro es MCP y MAP 2012, es fundador, diseñador y programador de www.devjoker.com..
Fecha de alta:22/10/2005
Última actualizacion:22/10/2005
Visitas totales:702360
Valorar el contenido:
Últimas consultas realizadas en los foros
Últimas preguntas sin contestar en los foros de devjoker.com