使用 Access SQL 修改表设计
创建和填充了表后,您可能需要修改表的设计。 为此,请使用 ALTER TABLE 语句。 请注意,改变现有表的结构可能会导致丢失部分数据。 例如,更改字段的数据类型可能会导致数据丢失或舍入错误,具体取决于您使用的数据类型。 它还可能会损坏应用程序中可能引用已更改字段的其他部分。 在修改现有表的结构之前,应始终要加倍小心。
利用 ALTER TABLE 语句,您可以添加、删除或更改列(或字段) ,并且可以添加或删除约束。 您也可以为字段声明默认值;但一次只能更改一个字段。 假设您有一个发票数据库,并且想要向 Customers 表中添加字段。 若要使用 ALTER TABLE 语句添加字段,请使用带有该字段的名称、其数据类型以及数据类型大小(如果需要)的 ADD COLUMN 子句。
ALTER TABLE tblCustomers
ADD COLUMN Address TEXT(30)
要更改某个字段的数据类型或大小,请使用带有该字段的名称、所需的数据类型和所需的数据类型的大小(如果需要)的 ALTER COLUMN 子句。
ALTER TABLE tblCustomers
ALTER COLUMN Address TEXT(40)
如果要更改字段的名称,必须删除该字段,然后重新创建该字段。 若要删除字段,请使用只包含该字段名的 DROP COLUMN 子句。
ALTER TABLE tblCustomers
DROP COLUMN Address
请注意,使用此方法将清除字段的现有数据。 若要保留现有数据,应使用 Access 用户界面的表设计模式更改字段的名称,或者编写代码将当前数据保留在临时表中并将其重新追加到重命名的表中。 默认值为任何时候向表中添加新记录时在字段中输入的值,不会为该特殊列指定值。 若要为字段设置默认值,请在 ADD COLUMN 或 ALTER COLUMN 子句中声明字段类型之后使用 DEFAULT 关键字。
ALTER TABLE tblCustomers
ALTER COLUMN Address TEXT(40) DEFAULT Unknown
请注意,默认值未括在单引号内。 如果将其括在引号内,则引号也会被插入到记录中。 DEFAULT 关键字也可在 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)
备注
DEFAULT 语句只能通过 Access OLE DB 提供程序和 ADO 执行。 如果通过 Access SQL 视图用户界面使用,它将返回错误消息。
约束
约束可以用于建立主键和参照完整性,并且可以用于限制可插入到字段中的值。 一般来说,约束可以用于保持数据库中数据的完整性和一致性。
有两种类型的约束:单字段或字段级别约束,以及多字段或表级别约束。 这两种约束都可在 CREATE TABLE 或 ALTER TABLE 语句中使用。
声明字段和数据类型之后,使用字段本身对单字段约束(也称为列级约束)进行声明。 对于本示例,使用 Customers 表并在 CustomerID 字段上创建单字段主键。 若要添加约束,请将 CONSTRAINT 关键字与字段名称结合使用。
ALTER TABLE tblCustomers
ALTER COLUMN CustomerID INTEGER
CONSTRAINT PK_tblCustomers PRIMARY KEY
请注意,约束的名称是给定的。 可以使用快捷方式来声明完全忽略 CONSTRAINT 子句的主键。
ALTER TABLE tblCustomers
ALTER COLUMN CustomerID INTEGER PRIMARY KEY
但是,使用快捷方式会导致 Access 随机生成约束名称,这样会使在代码中引用很困难。 建议始终命名约束。
要删除约束,请将 DROP CONSTRAINT 子句与 ALTER TABLE 语句一起使用,并提供该约束的名称。
ALTER TABLE tblCustomers
DROP CONSTRAINT PK_tblCustomers
约束还可以用于限制字段的允许值。 可以将值限制为 NOT NULL 或 UNIQUE ,也可以定义检查约束,这是一种可应用于字段的业务规则。 假设您要将名字字段和姓氏字段的值限制(或约束)为唯一,这意味着表中任何两条记录的名字和姓氏组合绝不应该相同。 由于这是一种多字段约束,因此将在表级别(而非字段级别)声明。 使用 ADD CONSTRAINT 子句并定义一个多字段列表。
ALTER TABLE tblCustomers
ADD CONSTRAINT CustomerID UNIQUE
([Last Name], [First Name])
检查约束是一种强大的 SQL 功能,它允许您通过以下方式向表中添加数据验证:创建可以引用单字段的表达式,或者在一个或多个表中引用多个字段的表达式。 假设您要确保在发票记录中输入的金额始终大于 ¥0.00。 为此,请通过在 ALTER TABLE 语句的 ADD CONSTRAINT 子句中声明 CHECK 关键字和验证表达式来使用检查约束。
ALTER TABLE tblInvoices
ADD CONSTRAINT CheckAmount
CHECK (Amount > 0)
用于定义检查约束的表达式还可以引用同一个表中的多个字段,或者引用其他表中的字段,并且可以使用在 Microsoft Access SQL 中有效的任何运算,如 SELECT 语句、数学运算符及聚合函数。 用于定义检查约束的表达式的长度不能超过 64 个字符。
假设在将客户添加到 Customers 表之前要检查每个客户的信贷限额。 使用带有 ADD COLUMN 和 CONSTRAINT 子句的 ALTER TABLE 语句创建一个约束,该约束将查阅 CreditLimit 表中的值以验证客户的信贷限额。 使用以下 SQL 语句可以创建 tblCreditLimit 表、向 tblCustomers 表中添加"CustomerLimit"字段、向 tblCustomers 表中添加检查约束,以及测试该检查约束。
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
请注意,执行 UPDATE TABLE 语句时,您会收到一条消息,指出更新没有成功,因为它违反了检查约束。 如果将 CustomerLimit 字段更新为等于或小于 100 的值,则更新将成功。
级联更新和删除
还可以使用约束在数据库表之间建立引用完整性。 具有引用完整性意味着数据一致且未损坏。 举例来说,如果删除了客户记录,但该客户的发运记录仍保留在数据库中,则数据将不一致,因为现在发运表中有一条孤立记录。 当您在表之间构建关系时,会建立引用完整性。
除了建立引用完整性,您还可以通过使用级联更新和删除确保引用表中的记录保持同步。 例如,如果声明了级联更新和删除,则删除客户记录时会自动删除客户的发运记录。
若要启用级联更新和删除,请在 ALTER TABLE 语句的 CONSTRAINT 子句中使用 ON UPDATE CASCADE 和/或 ON DELETE CASCADE 关键字。 请注意,必须将它们应用于外键。
ALTER TABLE tblShipping
ADD CONSTRAINT FK_tblShipping
FOREIGN KEY (CustomerID) REFERENCES
tblCustomers (CustomerID)
ON UPDATE CASCADE
ON DELETE CASCADE
原文:https://docs.microsoft.com/zh-cn/office/vba/access/concepts/structured-query-language/modify-a-table-s-design-using-access-sql