Compartir a través de


Modificación del diseño de una tabla mediante Access SQL

Después de crear y rellenar una tabla, es posible que deba modificar el diseño de la tabla. Para ello, use la instrucción ALTER TABLE . Tenga en cuenta que alterar la estructura de una tabla existente puede provocar la pérdida de algunos datos. Por ejemplo, cambiar el tipo de datos de un campo puede provocar pérdida de datos o errores de redondeo, dependiendo de los tipos de datos que use. También puede afectar a otras partes de la aplicación que hagan referencia al campo cambiado. Debe usar siempre precaución adicional antes de modificar la estructura de una tabla existente.

La instrucción ALTER TABLE le permite agregar, quitar o cambiar una columna (o campo), así como agregar o quitar una restricción. También le permite declarar un valor predeterminado para un campo; sin embargo, sólo podrá alterar los campos de uno en uno. Suponga que tiene una base de datos de facturación y que desea agregar un campo a la tabla Customers (Clientes). Para agregar un campo con la instrucción ALTER TABLE, utilice la cláusula ADD COLUMN con el nombre del campo, su tipo de datos y el tamaño de éste, si es necesario.

ALTER TABLE tblCustomers 
   ADD COLUMN Address TEXT(30) 

Para cambiar el tipo de datos o el tamaño de un campo, utilice la cláusula ALTER COLUMN con el nombre del campo, el tipo de datos y el tamaño del tipo de datos deseados, si es necesario.

ALTER TABLE tblCustomers 
   ALTER COLUMN Address TEXT(40) 

Si desea cambiar el nombre de un campo, tendrá que quitar el campo y volver a crearlo. Para quitar un campo, utilice la cláusula DROP COLUMN con el nombre del campo únicamente.

ALTER TABLE tblCustomers 
   DROP COLUMN Address 

Tenga en cuenta que usar este método eliminará los datos existentes del campo. Para conservar los datos existentes, debe cambiar el nombre del campo con el modo de diseño de la tabla de la interfaz de usuario de Access, o escribir código para conservar los datos actuales en una tabla temporal y anexarlos de nuevo a la tabla cuyo nombre ha cambiado. Un valor predeterminado es el valor que se introduce en un campo cada vez que se agrega un nuevo registro a una tabla y no se especifica ningún valor para esa columna en particular. Si desea establecer un valor predeterminado para un campo, utilice la palabra clave DEFAULT después de declarar el tipo del campo en una cláusula ADD COLUMN o ALTER COLUMN.

ALTER TABLE tblCustomers 
   ALTER COLUMN Address TEXT(40) DEFAULT Unknown 

Tenga en cuenta que el valor predeterminado no se encuentra entre comillas simples. Si fuera así, también se insertarían las comillas en el registro. La palabra clave DEFAULT también se puede usar en una instrucción CREATE TABLE .

CREATE TABLE tblCustomers ( 
   CustomerID INTEGER CONSTRAINT PK_tblCustomers 
      PRIMARY KEY, 
   [Last Name] TEXT(50) NOT NULL, 
   [First Name] TEXT(50) NOT NULL, 
   Phone TEXT(10), 
   Email TEXT(50), 
   Address TEXT(40) DEFAULT Unknown) 

Nota:

La instrucción DEFAULT sólo se puede ejecutar mediante el proveedor OLE DB de Access y ADO. Devolverá un mensaje de error si se utiliza mediante la interfaz de usuario de la vista SQL de Access.

Restricciones

Las restricciones pueden usarse para establecer claves principales y la integridad referencial, así como para restringir los valores que pueden insertarse en un campo. En general, las restricciones pueden emplearse para preservar la integridad y la coherencia de los datos de la base de datos.

Hay dos tipos de restricciones: restricciones de un solo campo o de nivel de campo, y restricciones de varios campos o de nivel de tabla. Ambos tipos se pueden utilizar en las instrucciones CREATE TABLE y ALTER TABLE.

Las restricciones de un solo campo, también denominadas restricciones del nivel de columna, se declaran con el propio campo tras haberse declarado el campo y el tipo de datos. En este ejemplo, utilice la tabla Customers (Clientes) y cree una clave principal de un solo campo en el campo CustomerID (IdCliente). Para agregar la restricción, utilice la palabra clave CONSTRAINT con el nombre del campo.

ALTER TABLE tblCustomers 
   ALTER COLUMN CustomerID INTEGER 
   CONSTRAINT PK_tblCustomers PRIMARY KEY 

Tenga en cuenta que se da el nombre de la restricción. Podría utilizar un acceso directo para declarar la clave principal que omita totalmente la cláusula CONSTRAINT.

ALTER TABLE tblCustomers 
   ALTER COLUMN CustomerID INTEGER PRIMARY KEY 

Sin embargo, el uso del método del acceso directo hará que Access genere al azar un nombre para la restricción, lo que dificultará las referencias que se le hagan en el código. Siempre es una buena idea asignar un nombre a las restricciones.

Para anular una restricción, use la cláusula DROP CONSTRAINT con la instrucción ALTER TABLE y proporcione el nombre de la restricción.

ALTER TABLE tblCustomers 
   DROP CONSTRAINT PK_tblCustomers 

Las restricciones también se pueden usar para restringir los valores que se permiten para un campo. Puede restringir los valores a NOT NULL o UNIQUE, o puede definir una restricción Check, que es un tipo de regla de negocio que se puede aplicar a un campo. Suponga que desea restringir los valores de los campos del nombre y de los apellidos para que sean únicos, lo que significa que nunca debería existir una combinación de nombre y apellidos que fuera igual en dos registros de la tabla. Dado que se trata de una restricción de varios campos, ésta se declara en el nivel de tabla, no en el nivel de campo. Use la cláusula ADD CONSTRAINT y defina una lista de varios campos.

ALTER TABLE tblCustomers 
   ADD CONSTRAINT CustomerID UNIQUE 
   ([Last Name], [First Name]) 

Una restricción CHECK es una característica avanzada de SQL que le permite agregar validación de datos a una tabla mediante la creación de una expresión que puede hacer referencia a un único campo o a varios de una o más tablas. Supongamos que quiere asegurarse de que los importes especificados en el registro de una factura sean siempre superiores a 0,00 €. Para ello, use una restricción CHECK declarando la palabra clave CHECK y su expresión de validación en la cláusula ADD CONSTRAINT de una instrucción ALTER TABLE.

ALTER TABLE tblInvoices 
   ADD CONSTRAINT CheckAmount 
   CHECK (Amount > 0) 

La expresión utilizada para definir una restricción check también puede hacer referencia a más de un campo de la misma tabla, o a campos de otras tablas, y puede usar cualquier operación válida en Microsoft Access SQL, como instrucciones SELECT , operadores matemáticos y funciones de agregado. La expresión que define la restricción Check no puede tener más de 64 caracteres de largo.

Suponga que desea comprobar el límite de crédito de cada cliente antes de agregarlo a la tabla Customers (Clientes). Mediante el uso de una instrucción ALTER TABLE con las cláusulas ADD COLUMN y CONSTRAINT, se crea una restricción que buscará el valor en la tabla CreditLimit para comprobar el límite de crédito del cliente. Use las siguientes instrucciones SQL para crear la tabla tblCreditLimit, agregue el campo CustomerLimit a la tabla tblCustomers, agregue la restricción CHECK a la tabla tblCustomers y pruebe la restricción CHECK.

CREATE TABLE tblCreditLimit ( 
   Limit DOUBLE) 
 
INSERT INTO tblCreditLimit 
   VALUES (100) 
 
ALTER TABLE tblCustomers 
   ADD COLUMN CustomerLimit DOUBLE 
 
ALTER TABLE tblCustomers 
   ADD CONSTRAINT LimitRule 
   CHECK (CustomerLimit <= (SELECT Limit 
      FROM tblCreditLimit)) 
 
UPDATE TABLE tblCustomers 
   SET CustomerLimit = 200 
   WHERE CustomerID = 1 

Tenga en cuenta que al ejecutar la instrucción UPDATE TABLE , recibirá un mensaje que indica que la actualización no se realizó correctamente porque infringió la restricción check. Si actualiza el campo CustomerLimit a un valor igual o menor que 100, la actualización será correcta.

Actualizaciones y eliminaciones en cascada

Las restricciones también se pueden utilizar para establecer la integridad referencial entre tablas de bases de datos. Esta característica de integridad referencial significa que los datos son coherentes y no están dañados. Por ejemplo, si ha eliminado un registro de un cliente pero el registro de envío de dicho cliente permanece en la base de datos, los datos no serían coherentes, ya que existiría un registro huérfano en la tabla de envíos. La integridad referencial se establece al generar una relación entre tablas.

Además del establecimiento de la integridad referencial, también puede asegurarse de que los registros de las tablas a las que se hace referencia permanecen sincronizados mediante el uso de actualizaciones y eliminaciones en cascada. Por ejemplo, una vez que se han declarado las actualizaciones y las eliminaciones en cascada, si se elimina el registro del cliente, el registro de envío de éste se elimina automáticamente.

Para habilitar las actualizaciones y eliminaciones en cascada, use las palabras clave ON UPDATE CASCADE o ON DELETE CASCADE de la cláusula CONSTRAINT de una instrucción ALTER TABLE. Tenga en cuenta que se deben aplicar a la clave externa.

ALTER TABLE tblShipping 
   ADD CONSTRAINT FK_tblShipping 
   FOREIGN KEY (CustomerID) REFERENCES 
      tblCustomers (CustomerID) 
   ON UPDATE CASCADE 
   ON DELETE CASCADE 

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.