Criar ou modificar tabelas ou índices utilizando uma consulta de definição de dados

Aplica-se a
Access para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Você pode criar e modificar tabelas, restrições, índices e relações no Access escrevendo consultas de definição de dados no modo SQL. Este artigo explica consultas de definição de dados e como usá-las para criar tabelas, restrições, índices e relacionamentos. Este artigo também pode ajudá-lo a decidir quando usar uma consulta de definição de dados.

Neste artigo

Visão Geral

Ao contrário de outras consultas do Access, uma consulta de definição de dados não recupera dados. Em vez disso, uma consulta de definição de dados usa a Linguagem de Definição de Dados para criar, modificar ou excluir objetos de banco de dados.

Observação

A Linguagem de Definição de Dados (DDL) faz parte da linguagem SQL.

Consultas de definição de dados podem ser muito convenientes. Você pode excluir e recriar regularmente partes do esquema de banco de dados simplesmente executando algumas consultas. Considere usar uma consulta de definição de dados se você estiver familiarizado com instruções SQL e planeja excluir e recriar tabelas, restrições, índices ou relacionamentos específicos.

Aviso

O uso de consultas de definição de dados para modificar objetos de banco de dados pode ser arriscado, pois as ações não são acompanhadas por caixas de diálogo de confirmação. Se você cometer um erro, poderá perder dados ou alterar inadvertidamente o design de uma tabela. Tenha cuidado ao usar uma consulta de definição de dados para modificar objetos em seu banco de dados. Se você não for responsável por manter o banco de dados que está usando, consulte o administrador do banco de dados antes de executar uma consulta de definição de dados.

Importante

Faça uma cópia de backup de todas as tabelas envolvidas antes de executar uma consulta de definição de dados.

Palavras-chave DDL

Palavra-chave Usar
CREATE Criar um índice ou tabela que ainda não existe.
ALTER Modificar uma tabela ou coluna existente.
DROP Exclua uma tabela, coluna ou restrição existente.
ADD Adicionar uma coluna ou uma restrição a uma tabela.
COLUMN Usar com ADD, ALTER ou DROP
CONSTRAINT Usar com ADD, ALTER ou DROP
INDEX Use com CREATE
TABLE Usar com ALTER, CREATE ou DROP

Início da Página

Criar ou modificar uma tabela

Para criar uma tabela, use um comando CREATE TABLE. Um comando CREATE TABLE tem a seguinte sintaxe:

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

Os únicos elementos necessários de um comando CREATE TABLE são o próprio comando CREATE TABLE e o nome da tabela, mas geralmente você desejará definir alguns campos ou outros aspectos da tabela. Considere este exemplo simples.

Suponha que você queira criar uma tabela para armazenar o nome, o ano e o preço dos carros usados que está considerando comprar. Você deseja permitir até 30 caracteres para o nome e 4 caracteres para o ano. Para usar uma consulta de definição de dados para criar a tabela, faça o seguinte:

Observação

Talvez você precise primeiro habilitar o conteúdo do banco de dados para que uma consulta de definição de dados seja executada:

  • Na Barra de Mensagens, clique em Habilitar Conteúdo.

Criar uma tabela

  1. Na guia Criar , no grupo Macros & Código , clique em Design da Consulta.
  2. Na guia Design , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grade de design está oculta e a guia de objeto de exibição SQL é exibida.
  3. Digite a seguinte instrução SQL:
    CREATE TABLE Carros (Nome TEXTO(30), Ano TEXTO(4), Preço MOEDA)
  4. Na guia Design, no grupo Resultados, clique em Executar.

Modificar uma tabela

Para modificar uma tabela, use um comando ALTER TABLE. Você pode usar um comando ALTER TABLE para adicionar, modificar ou descartar (remover) colunas ou restrições. Um comando ALTER TABLE tem a seguinte sintaxe:

ALTER TABLE table_name predicate

where predicate pode ser qualquer um dos seguintes:

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

ADD CONSTRAINT multifield_constraint

ALTER COLUMN field type[(size)]

DROP COLUMN field

DROP CONSTRAINT constraint

Suponha que você queira adicionar um campo de texto de 10 caracteres para armazenar informações sobre a condição de cada carro. Você pode fazer o seguinte:

  1. Na guia Criar , no grupo Macros & Código , clique em Design da Consulta.
  2. Na guia Design , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grade de design está oculta e a guia de objeto de exibição SQL é exibida.
  3. Digite a seguinte instrução SQL:
    ALTER TABLE Carros ADICIONAR COLUNA Condição TEXTO(10)
  4. Na guia Design, no grupo Resultados, clique em Executar.

Início da Página

Criar um índice

Para criar um índice em uma tabela existente, use um comando CREATE INDEX. Um comando CREATE INDEX tem a seguinte sintaxe:

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

Os únicos elementos necessários são o comando CREATE INDEX, o nome do índice, o argumento ON, o nome da tabela que contém os campos que você deseja indexar e a lista de campos a serem incluídos no índice.

  • O argumento DESC faz com que o índice seja criado em ordem decrescente, o que pode ser útil se você executar frequentemente consultas que procuram os principais valores para o campo indexado ou que classificam o campo indexado em ordem decrescente. Por padrão, um índice é criado em ordem crescente.
  • O argumento WITH PRIMARY estabelece o campo ou campos indexados como a chave primária da tabela.
  • O argumento WITH DISALLOW NULL faz com que o índice exija que um valor seja inserido para o campo indexado — ou seja, valores nulos não são permitidos.

Suponha que você tenha uma tabela chamada Carros com campos que armazenam o nome, ano, preço e condição dos carros usados que você está considerando para compra. Suponha também que a tabela tenha se tornado grande e que você inclua frequentemente o campo ano nas consultas. Você pode criar um índice no campo Ano para ajudar suas consultas a retornar resultados mais rapidamente usando o seguinte procedimento:

  1. Na guia Criar , no grupo Macros & Código , clique em Design da Consulta.
  2. Na guia Design , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grade de design está oculta e a guia de objeto de exibição SQL é exibida.
  3. Digite a seguinte instrução SQL:
    CREATE INDEX YearIndex ON Carros (Ano)
  4. Na guia Design, no grupo Resultados, clique em Executar.

Início da Página

Criar uma restrição ou uma relação

Uma restrição estabelece uma condição lógica que um campo ou combinação de campos deve atender quando valores são inseridos. Por exemplo, uma restrição ÚNICO impede que o campo restrito aceite um valor que duplicaria um valor existente para o campo.

Uma relação é um tipo de restrição que se refere aos valores de um campo ou combinação de campos em outra tabela para determinar se um valor pode ser inserido no campo restrito ou na combinação de campos. Você não usa uma palavra-chave especial para indicar que uma restrição é uma relação.

Para criar uma restrição, use uma cláusula CONSTRAINT em um comando CREATE TABLE ou ALTER TABLE. Há dois tipos de cláusulas CONSTRAINT: uma para criar uma restrição em um único campo e outra para criar uma restrição em vários campos.

Restrições de campo único

Uma cláusula CONSTRAINT de campo único segue imediatamente a definição do campo que ela restringe e tem a seguinte sintaxe:

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

Suponha que você tenha uma tabela chamada Carros com campos que armazenam o nome, ano, preço e condição dos carros usados que você está considerando para compra. Suponha também que você se esqueça frequentemente de inserir um valor para a condição do carro e que sempre queira registrar essas informações. Você pode criar uma restrição no campo Condição que o impeça de deixá-lo vazio, usando o seguinte procedimento:

  1. Na guia Criar , no grupo Macros & Código , clique em Design da Consulta.
  2. Na guia Design , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grade de design está oculta e a guia de objeto de exibição SQL é exibida.
  3. Digite a seguinte instrução SQL:
    ALTER TABLE Carros ALTER COLUMN Condição TEXT CONSTRAINT ConditionRequired NOT NULL
  4. Na guia Design, no grupo Resultados, clique em Executar.

Agora suponha que, depois de um tempo, você perceba que há muitos valores semelhantes no campo Condição que deveriam ser os mesmos. Por exemplo, alguns dos carros têm um valor de condição de ruim e outros têm um valor de ruim.

Observação

Se você quiser seguir com os procedimentos restantes, adicione alguns dados falsos à tabela Carros que você criou nas etapas anteriores.

Depois de limpar os valores para que eles sejam mais consistentes, você pode criar uma tabela chamada CarCondition com um campo, chamado Condition, que contém todos os valores que você deseja usar para a condição de carros:

  1. Na guia Criar , no grupo Macros & Código , clique em Design da Consulta.

  2. Na guia Design , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grade de design está oculta e a guia de objeto de exibição SQL é exibida.

  3. Digite a seguinte instrução SQL:
    CREATE TABLE CarCondition (Condition TEXT(10))

  4. Na guia Design, no grupo Resultados, clique em Executar.

  5. Crie uma chave primária para a tabela usando uma instrução ALTER TABLE:
    ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY

  6. Para inserir os valores do campo Condição da tabela Carros na nova tabela CarCondition, digite o seguinte SQL na guia de objeto de exibição SQL:
    INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;

    Observação

    A instrução SQL nesta etapa é uma consulta acréscimo. Ao contrário de uma consulta de definição de dados, uma consulta acréscimo termina com um ponto e vírgula.

  7. Na guia Design, no grupo Resultados, clique em Executar.

Criar uma relação usando uma restrição

Para exigir que qualquer novo valor inserido no campo Condição da tabela Carros corresponda a um valor do campo Condição na tabela CarCondition, você pode criar uma relação entre CarCondition e Cars no campo denominado Condition, usando o seguinte procedimento:

  1. Na guia Criar , no grupo Macros & Código , clique em Design da Consulta.
  2. Na guia Design , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grade de design está oculta e a guia de objeto de exibição SQL é exibida.
  3. Digite a seguinte instrução SQL:
    ALTER TABLE Carros ALTER COLUMN Condição TEXT CONSTRAINT FKeyCondition REFERÊNCIAS CarCondition (Condition)
  4. Na guia Design, no grupo Resultados, clique em Executar.

Restrições de vários campos

Uma cláusula CONSTRAINT de vários campos só pode ser usada fora de uma cláusula de definição de campo e tem a seguinte sintaxe:

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 outro exemplo que usa a tabela Carros. Suponha que você queira certificar-se de que não há dois registros na tabela Carros com o mesmo conjunto de valores para Nome, Ano, Condição e Preço. Você pode criar uma restrição UNIQUE que se aplica a esses campos, usando o seguinte procedimento:

  1. Na guia Criar , no grupo Macros & Código , clique em Design da Consulta.
  2. Na guia Design , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grade de design está oculta e a guia de objeto de exibição SQL é exibida.
  3. Digite a seguinte instrução SQL:
    ALTER TABLE Carros ADICIONAR RESTRIÇÃO NoDupes UNIQUE (nome, ano, condição, preço)
  4. Na guia Design, no grupo Resultados, clique em Executar.

Início da Página