Crear o modificar tablas o índices mediante una consulta de definición de datos

Se aplica a
Access para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Puede crear y modificar tablas, restricciones, índices y relaciones en Access escribiendo consultas de definición de datos en la vista SQL. En este artículo se explican las consultas de definición de datos y cómo usarlas para crear tablas, restricciones, índices y relaciones. Este artículo también puede ayudarle a decidir cuándo usar una consulta de definición de datos.

En este artículo...

Información general

A diferencia de otras consultas de Access, una consulta de definición de datos no recupera datos. En su lugar, una consulta de definición de datos usa el lenguaje de definición de datos para crear, modificar o eliminar objetos de base de datos.

Nota

El lenguaje de definición de datos (DDL) forma parte del lenguaje de consulta estructurado (SQL).

Las consultas de definición de datos pueden resultar muy útiles. Puede eliminar y volver a crear regularmente partes del esquema de la base de datos simplemente ejecutando algunas consultas. Considere la posibilidad de usar una consulta de definición de datos si está familiarizado con las instrucciones SQL y tiene previsto eliminar y volver a crear tablas, restricciones, índices o relaciones particulares.

Advertencia

El uso de consultas de definición de datos para modificar objetos de base de datos puede ser arriesgado, ya que las acciones no van acompañadas de cuadros de diálogo de confirmación. Si comete un error, puede perder datos o cambiar accidentalmente el diseño de una tabla. Tenga cuidado al usar una consulta de definición de datos para modificar objetos de la base de datos. Si no es responsable del mantenimiento de la base de datos que está usando, debe consultar con el administrador de la base de datos antes de ejecutar una consulta de definición de datos.

Importante

Realice una copia de seguridad de las tablas implicadas antes de ejecutar una consulta de definición de datos.

Palabras clave de DDL

Palabra clave Usar
CREATE Cree un índice o una tabla que aún no exista.
ALTER Modificar una tabla o columna existente.
DROP Eliminar una tabla, columna o restricción existente.
ADD Agregar una columna o una restricción a una tabla.
COLUMN Usar con AGREGAR, ALTERAR o ELIMINAR
RESTRICCIÓN Usar con AGREGAR, ALTERAR o ELIMINAR
INDEX Usar con CREATE
TABLE Usar con ALTER, CREATE o DROP

Principio de página

Crear o modificar una tabla

Para crear una tabla, debe usar el comando CREATE TABLE. Un comando CREAR TABLA tiene la sintaxis siguiente:

CREATE TABLE table_name 
 (field1 type [(size)] [NOT NULL] [index1]
 [, field2 type [(size)] [NOT NULL] [index2]
 [, ...][, CONSTRAINT constraint1 [, ...]])

Los únicos elementos necesarios de un comando CREATE TABLE son el propio comando CREATE TABLE y el nombre de la tabla, pero normalmente querrá definir algunos campos u otros aspectos de la tabla. Considere este sencillo ejemplo.

Supongamos que desea crear una tabla para almacenar el nombre, el año y el precio de los coches usados que está considerando comprar. Quiere permitir un máximo de 30 caracteres para el nombre y 4 caracteres para el año. Para usar una consulta de definición de datos para crear la tabla, haga lo siguiente:

Nota

Es posible que primero necesite habilitar el contenido de la base de datos para que se ejecute una consulta de definición de datos:

  • En la Barra de mensajes, haga clic en Habilitar contenido.

Crear una tabla

  1. En la pestaña Crear , en el grupo Macros & Código , haga clic en Diseño de la consulta.
  2. En la pestaña Diseño , en el grupo Tipo de consulta , haga clic en Definición de datos.
    La cuadrícula de diseño está oculta y se muestra la pestaña de objeto de vista SQL.
  3. Escriba la siguiente instrucción SQL:
    CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)
  4. En la pestaña Diseño, en el grupo Resultados, haga clic en Ejecutar.

Modificar una tabla

Para modificar una tabla, utilice el comando ALTER TABLE. Puede utilizar un comando ALTER TABLE para añadir, modificar o eliminar (eliminar) columnas o restricciones. Un comando ALTER TABLE tiene la sintaxis siguiente:

ALTER TABLE table_name predicate

donde el predicado puede ser cualquiera de los siguientes:

ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]

ADD CONSTRAINT multifield_constraint

ALTER COLUMN field type[(size)]

DROP COLUMN field

DROP CONSTRAINT constraint

Supongamos que quieres agregar un campo de texto de 10 caracteres para almacenar información sobre el estado de cada coche. Puede hacer lo siguiente:

  1. En la pestaña Crear , en el grupo Macros & Código , haga clic en Diseño de la consulta.
  2. En la pestaña Diseño , en el grupo Tipo de consulta , haga clic en Definición de datos.
    La cuadrícula de diseño está oculta y se muestra la pestaña de objeto de vista SQL.
  3. Escriba la siguiente instrucción SQL:
    ALTER TABLE cars ADD COLUMN Texto de condición(10)
  4. En la pestaña Diseño, en el grupo Resultados, haga clic en Ejecutar.

Principio de página

Crear un índice

Para crear un índice en una tabla existente, debe usar el comando CREATE INDEX. Un comando CREAR ÍNDICE tiene la sintaxis siguiente:

CREATE [UNIQUE] INDEX index_name
 ON table (field1 [DESC][, field2 [DESC], ...])
 [WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]

Los únicos elementos necesarios son el comando CREATE INDEX, el nombre del índice, el argumento ON, el nombre de la tabla que contiene los campos que desea indexar y la lista de campos que se incluirán en el índice.

  • El argumento DESC hace que el índice se cree en orden descendente, lo que puede ser útil si se ejecutan con frecuencia consultas que buscan valores principales para el campo indexado o que ordenan el campo indexado en orden descendente. De forma predeterminada, un índice se crea en orden ascendente.
  • El argumento CON PRINCIPAL establece el campo o los campos indizados como la clave principal de la tabla.
  • El argumento WITH DISALLOW NULL hace que el índice requiera que se escriba un valor para el campo indexado, es decir, no se permiten valores nulos.

Supongamos que tiene una tabla denominada Coches con campos que almacenan el nombre, el año, el precio y el estado de los coches usados que está considerando comprar. Supongamos también que la tabla se ha vuelto grande y que incluye con frecuencia el campo año en las consultas. Puede crear un índice en el campo Año para ayudar a las consultas a devolver resultados más rápidamente mediante el procedimiento siguiente:

  1. En la pestaña Crear , en el grupo Macros & Código , haga clic en Diseño de la consulta.
  2. En la pestaña Diseño , en el grupo Tipo de consulta , haga clic en Definición de datos.
    La cuadrícula de diseño está oculta y se muestra la pestaña de objeto de vista SQL.
  3. Escriba la siguiente instrucción SQL:
    CREATE INDEX YearIndex ON Cars (Year)
  4. En la pestaña Diseño, en el grupo Resultados, haga clic en Ejecutar.

Principio de página

Crear una restricción o una relación

Una restricción establece una condición lógica que debe cumplir un campo o una combinación de campos cuando se insertan valores. Por ejemplo, una restricción UNIQUE impide que el campo restringido acepte un valor que duplique un valor existente para el campo.

Una relación es un tipo de restricción que hace referencia a los valores de un campo o una combinación de campos de otra tabla para determinar si se puede insertar un valor en el campo restringido o en una combinación de campos. No debe usar una palabra clave especial para indicar que una restricción es una relación.

Para crear una restricción, utilice una cláusula CONSTRAINT en un comando CREATE TABLE o ALTER TABLE. Hay dos tipos de cláusulas CONSTRAINT: una para crear una restricción en un solo campo y otra para crear una restricción en varios campos.

Restricciones de campo único

Una cláusula CONSTRAINT de un solo campo sigue inmediatamente la definición del campo que restringe y tiene la sintaxis siguiente:

CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
 REFERENCES foreign_table [(foreign_field)]
 [ON UPDATE {CASCADE | SET NULL}]
 [ON DELETE {CASCADE | SET NULL}]}

Supongamos que tiene una tabla denominada Coches con campos que almacenan el nombre, el año, el precio y el estado de los coches usados que está considerando comprar. También suponga que con frecuencia olvida ingresar un valor para la condición del automóvil y que siempre desea registrar esta información. Puede crear una restricción en el campo Condición que le impida dejar el campo vacío, utilizando el siguiente procedimiento:

  1. En la pestaña Crear , en el grupo Macros & Código , haga clic en Diseño de la consulta.
  2. En la pestaña Diseño , en el grupo Tipo de consulta , haga clic en Definición de datos.
    La cuadrícula de diseño está oculta y se muestra la pestaña de objeto de vista SQL.
  3. Escriba la siguiente instrucción SQL:
    ALTER TABLE Cars ALTER COLUMN Condición RESTRICCIÓN DE TEXTO ConditionRequired NOT NULL
  4. En la pestaña Diseño, en el grupo Resultados, haga clic en Ejecutar.

Ahora supongamos que, después de un tiempo, observa que hay muchos valores similares en el campo Condición que deberían ser iguales. Por ejemplo, algunos de los autos tienen un valor de condición de pobre y otros tienen un valor de malo.

Nota

Si desea seguir los procedimientos restantes, agregue algunos datos falsos a la tabla Coches que creó en los pasos anteriores.

Después de limpiar los valores para que sean más coherentes, puede crear una tabla, llamada CondiciónDeCoche, con un campo, denominado Condición, que contenga todos los valores que desea usar para la condición de los coches:

  1. En la pestaña Crear , en el grupo Macros & Código , haga clic en Diseño de la consulta.

  2. En la pestaña Diseño , en el grupo Tipo de consulta , haga clic en Definición de datos.
    La cuadrícula de diseño está oculta y se muestra la pestaña de objeto de vista SQL.

  3. Escriba la siguiente instrucción SQL:
    CREATE TABLE CarCondition (Condition TEXT(10))

  4. En la pestaña Diseño, en el grupo Resultados, haga clic en Ejecutar.

  5. Cree una clave principal para la tabla mediante una instrucción ALTER TABLE:
    MODIFICAR TABLA CarCondition MODIFICAR COLUMNA Condición RESTRICCIÓN DE TEXTO CarConditionPK CLAVE PRINCIPAL

  6. Para insertar los valores del campo Condición de la tabla Coches en la nueva tabla CarCondition, escriba el siguiente SQL en la pestaña del objeto de la vista SQL:
    INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;

    Nota

    La instrucción SQL de este paso es una consulta de datos anexados. A diferencia de una consulta de definición de datos, una consulta de datos anexados termina con un punto y coma.

  7. En la pestaña Diseño, en el grupo Resultados, haga clic en Ejecutar.

Crear una relación usando una restricción

Para requerir que cualquier valor nuevo insertado en el campo Condición de la tabla Coches coincida con un valor del campo Condición de la tabla CondiciónDeCoche, puede crear una relación entre CondiciónCoche y Coches en el campo denominado Condición, mediante el siguiente procedimiento:

  1. En la pestaña Crear , en el grupo Macros & Código , haga clic en Diseño de la consulta.
  2. En la pestaña Diseño , en el grupo Tipo de consulta , haga clic en Definición de datos.
    La cuadrícula de diseño está oculta y se muestra la pestaña de objeto de vista SQL.
  3. Escriba la siguiente instrucción SQL:
    ALTER TABLE Cars ALTER COLUMN Condición TEXT CONSTRAINT FKeyCondition REFERENCIAS CarCondition (Condición)
  4. En la pestaña Diseño, en el grupo Resultados, haga clic en Ejecutar.

Restricciones de varios campos

Una cláusula CONSTRAINT de varios campos solo se puede utilizar fuera de una cláusula de definición de campo y tiene la sintaxis siguiente:

CONSTRAINT constraint_name 
{PRIMARY KEY (pk_field1[, pk_field2[, ...]]) |
 UNIQUE (unique1[, unique2[, ...]]) |
 NOT NULL (notnull1[, notnull2[, ...]]) |
 FOREIGN KEY [NO INDEX] (ref_field1[, ref_field2[, ...]]) 
  REFERENCES foreign_table 
  [(fk_field1[, fk_field2[, ...]])] |
 [ON UPDATE {CASCADE | SET NULL}]
 [ON DELETE {CASCADE | SET NULL}]}

Considere otro ejemplo que usa la tabla Coches. Suponga que desea asegurarse de que no haya dos registros de la tabla Coches que tengan el mismo conjunto de valores para Nombre, Año, Condición y Precio. Puede crear una restricción UNIQUE que se aplique a estos campos utilizando el procedimiento siguiente:

  1. En la pestaña Crear , en el grupo Macros & Código , haga clic en Diseño de la consulta.
  2. En la pestaña Diseño , en el grupo Tipo de consulta , haga clic en Definición de datos.
    La cuadrícula de diseño está oculta y se muestra la pestaña de objeto de vista SQL.
  3. Escriba la siguiente instrucción SQL:
    ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (nombre, año, condición, precio)
  4. En la pestaña Diseño, en el grupo Resultados, haga clic en Ejecutar.

Principio de página