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

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

Pode criar e modificar tabelas, restrições, índices e relações no Access ao escrever consultas de definição de dados na vista SQL. Este artigo explica consultas de definição de dados e como utilizá-las para criar tabelas, restrições, índices e relações. Este artigo também pode ajudá-lo a decidir quando deve utilizar uma consulta definição de dados.

Neste artigo

Descrição geral

Ao contrário de outras consultas do Access, uma consulta de definição de dados não obtém dados. Em vez disso, uma consulta de definição de dados usa linguagem de definição de dados para criar, modificar ou excluir objetos de banco de dados.

Nota

A linguagem DDL (Data Definition Language) faz parte do linguagem SQL (Structured Query Language) (SQL).

As consultas de definição de dados podem ser bastante convenientes. Pode eliminar e recriar regularmente partes do seu esquema de base de dados apenas executando algumas consultas. Considere utilizar uma consulta de definição de dados se estiver familiarizado com instruções SQL e planear eliminar e voltar a criar tabelas, restrições, índices ou relações específicas.

Aviso

Usar consultas de definição de dados para modificar objetos de banco de dados pode ser arriscado, porque as ações não são acompanhadas por caixas de diálogo de confirmação. Caso se engane, pode perder dados ou alterar inadvertidamente a estrutura de uma tabela. Tenha atenção ao utilizar uma consulta de definição de dados para modificar objetos na sua base de dados. Se não for responsável pela manutenção da base de dados que está a utilizar, deve consultar o administrador da base 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 Utilize
CREATE Crie um índice ou tabela que ainda não exista.
ALTER Modificar uma tabela ou coluna existente.
DROP Eliminar uma tabela, coluna ou constrangimento existente.
ADD Adicione uma coluna ou restrição a uma tabela.
COLUMN Utilizar com ADD, ALTER ou DROP
CONSTRAINT Utilizar com ADD, ALTER ou DROP
INDEX Utilizar com a função CREATE
TABLE Utilizar com ALTER, CREATE ou DROP

Início da Página

Criar ou modificar uma tabela

Para criar uma tabela, utilize o comando CREATE TABLE. Um comando Criar Tabela 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 normalmente pretenderá definir alguns campos ou outros aspetos da tabela. Considere este exemplo simples.

Suponha que pretende criar uma tabela para armazenar o nome, o ano e o preço dos carros usados que está a considerar comprar. Pretende permitir um máximo de 30 carateres para o nome e 4 carateres para o ano. Para utilizar uma consulta de definição de dados para criar a tabela, faça o seguinte:

Nota

Primeiro poderá ter de ativar os conteúdos da base de dados para que uma consulta de definição de dados seja executada:

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

Criar uma tabela

  1. No separador Criar , no grupo Macros & Código , clique em Estrutura da Consulta.
  2. No separador Estrutura , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grelha de estrutura fica oculta e o separador objeto da vista SQL é apresentado.
  3. Escreva a seguinte instrução SQL:
    CREATE TABLE Carros (Nome TEXTO(30), Ano TEXTO(4), Preço MOEDA)
  4. No separador Estrutura, no grupo Resultados, clique em Executar.

Modificar uma tabela

Para modificar uma tabela, utilize um comando ALTER TABLE. Pode utilizar um comando ALTER TABLE para adicionar, modificar ou largar colunas ou restrições. Um comando ALTER TABLE tem a seguinte sintaxe:

ALTER TABLE table_name predicate

onde predicado 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 pretende adicionar um campo de texto de 10 carateres para armazenar informações sobre o estado de cada automóvel. Pode fazer o seguinte:

  1. No separador Criar , no grupo Macros & Código , clique em Estrutura da Consulta.
  2. No separador Estrutura , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grelha de estrutura fica oculta e o separador objeto da vista SQL é apresentado.
  3. Escreva a seguinte instrução SQL:
    ALTER TABLE Carros ADICIONAR COLUNA TEXTO DE CONDIÇÃO(10)
  4. No separador Estrutura, no grupo Resultados, clique em Executar.

Início da Página

Criar um índice remissivo

Para criar um índice numa tabela existente, utilize um comando CREATE INDEX. Um comando Criar Índice 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 pretende indexar e a lista de campos a incluir no índice.

  • O argumento DESC faz com que o índice seja criado por ordem descendente, o que pode ser útil se executar frequentemente consultas que procurem os valores mais altos para o campo indexado ou que ordenem o campo indexado por ordem descendente. Por predefinição, é criado um índice por ordem ascendente.
  • 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 introduzido para o campo indexado, ou seja, não são permitidos valores nulos.

Suponhamos que tem uma tabela com o nome Automóveis com campos que armazenam o nome, ano, preço e estado dos carros usados que está a considerar para compra. Suponha também que a tabela se tornou grande e que inclui frequentemente o campo ano nas consultas. Pode criar um índice no campo Ano para ajudar as consultas a devolver resultados mais rapidamente através do seguinte procedimento:

  1. No separador Criar , no grupo Macros & Código , clique em Estrutura da Consulta.
  2. No separador Estrutura , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grelha de estrutura fica oculta e o separador objeto da vista SQL é apresentado.
  3. Escreva a seguinte instrução SQL:
    CREATE INDEX YearIndex ON Cars (Ano)
  4. No separador Estrutura, no grupo Resultados, clique em Executar.

Início da Página

Criar um constrangimento ou uma relação

Uma restrição estabelece uma condição lógica que um campo ou combinação de campos tem de cumprir quando são inseridos valores. Por exemplo, uma restrição UNIQUE impede o campo restrito de aceitar 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 noutra tabela para determinar se um valor pode ser inserido no campo restrito ou combinação de campos. Não utilize uma palavra-chave especial para indicar que uma restrição é uma relação.

Para criar uma restrição, utilize uma cláusula CONSTRAINT num comando CREATE TABLE ou ALTER TABLE. Existem dois tipos de cláusulas CONSTRAINT: uma para criar uma restrição num campo único e outra para criar uma restrição em múltiplos campos.

Restrições de campo único

Uma cláusula CONSTRAINT de campo único segue imediatamente a definição do campo que 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}]}

Suponhamos que tem uma tabela com o nome Automóveis com campos que armazenam o nome, ano, preço e estado dos carros usados que está a considerar para compra. Suponha também que frequentemente se esquece de introduzir um valor para o estado do carro e que pretende registar sempre esta informação. Pode criar uma restrição no campo Condição que o impeça de deixar o campo vazio utilizando o seguinte procedimento:

  1. No separador Criar , no grupo Macros & Código , clique em Estrutura da Consulta.
  2. No separador Estrutura , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grelha de estrutura fica oculta e o separador objeto da vista SQL é apresentado.
  3. Escreva a seguinte instrução SQL:
    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
  4. No separador Estrutura, no grupo Resultados, clique em Executar.

Agora suponha que, passado algum tempo, nota que existem muitos valores semelhantes no campo Condição que devem 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.

Nota

Se quiser seguir os procedimentos restantes, adicione alguns dados falsos à tabela Automóveis que criou nos passos anteriores.

Depois de limpar os valores para que sejam mais consistentes, pode criar uma tabela, com o nome CarCondition, com um campo com o nome Condição, que contém todos os valores que pretende utilizar para o estado dos automóveis:

  1. No separador Criar , no grupo Macros & Código , clique em Estrutura da Consulta.

  2. No separador Estrutura , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grelha de estrutura fica oculta e o separador objeto da vista SQL é apresentado.

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

  4. No separador Estrutura, no grupo Resultados, clique em Executar.

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

  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;

    Nota

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

  7. No separador Estrutura, no grupo Resultados, clique em Executar.

Criar uma relação através de 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 CondiçãoCarros, você poderá criar uma relação entre CondiçãoCarros e Carros no campo chamado Condição, usando o seguinte procedimento:

  1. No separador Criar , no grupo Macros & Código , clique em Estrutura da Consulta.
  2. No separador Estrutura , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grelha de estrutura fica oculta e o separador objeto da vista SQL é apresentado.
  3. Escreva a seguinte instrução SQL:
    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Condição)
  4. No separador Estrutura, no grupo Resultados, clique em Executar.

Restrições de múltiplos campos

Uma cláusula CONSTRAINT de múltiplos campos só pode ser utilizada 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 utiliza a tabela Carros. Imagine que pretende certificar-se de que não existem dois registos na tabela Automóveis com o mesmo conjunto de valores para Nome, Ano, Condição e Preço. Pode criar uma restrição UNIQUE que se aplica a estes campos através do seguinte procedimento:

  1. No separador Criar , no grupo Macros & Código , clique em Estrutura da Consulta.
  2. No separador Estrutura , no grupo Tipo de Consulta , clique em Definição de Dados.
    A grelha de estrutura fica oculta e o separador objeto da vista SQL é apresentado.
  3. Escreva a seguinte instrução SQL:
    ALTER TABLE Carros ADD CONSTRAINT NoDupes UNIQUE (nome, ano, condição, preço)
  4. No separador Estrutura, no grupo Resultados, clique em Executar.

Início da Página