SQL Default
SQL DEFAULT 约束
Section titled “SQL DEFAULT 约束”SQL DEFAULT 约束
Section titled “SQL DEFAULT 约束”DEFAULT 约束用于为列指定一个默认值。如果在 INSERT INTO 语句中没有为该列提供特定值,则此默认值将自动插入到该列中。
这对于确保列即使在未明确提供值时也有合理的值非常有用,例如为新帐户设置默认状态或默认注册日期。
在 CREATE TABLE 中使用 SQL DEFAULT 约束
Section titled “在 CREATE TABLE 中使用 SQL DEFAULT 约束”您可以在创建表时定义 DEFAULT 约束。以下 SQL 在创建 Customers 表时,为 City 列和 RegistrationDate 列设置了默认值:
标准 SQL 语法:
CREATE TABLE Customers ( CustomerID INT PRIMARY KEY, CustomerName VARCHAR(255) NOT NULL, ContactName VARCHAR(255), City VARCHAR(100) DEFAULT ‘Unknown’, Country VARCHAR(100) DEFAULT ‘USA’, RegistrationDate DATE DEFAULT CURRENT_DATE — Uses the current date as default );
在此示例中:
- 如果添加新客户时未指定
City,则其城市将自动设置为 ‘Unknown’。 - 如果未指定
Country,则默认设置为 ‘USA’。 - 如果未指定
RegistrationDate,则默认设置为插入时的当前日期。CURRENT_DATE是一个标准 SQL 函数。其他类似的函数包括CURRENT_TIMESTAMP(日期和时间)和NOW()(在 PostgreSQL 和 MySQL 中常见用于当前时间戳)。
注意:对于系统生成的时间戳,SQL Server 通常使用 GETDATE() 或 SYSDATETIME()。标准 SQL 函数是 CURRENT_TIMESTAMP。
在 ALTER TABLE 中使用 SQL DEFAULT 约束
Section titled “在 ALTER TABLE 中使用 SQL DEFAULT 约束”要向现有表的现有列添加 DEFAULT 约束,请使用 ALTER TABLE 语句。不同数据库系统之间的语法可能略有不同。
PostgreSQL / MySQL / SQL Server (向现有列添加默认值):
— For PostgreSQL & MySQL ALTER TABLE Customers ALTER COLUMN Country SET DEFAULT ‘Canada’;
— For SQL Server (often involves adding a named constraint) ALTER TABLE Customers ADD CONSTRAINT DF_Customers_Country DEFAULT ‘Canada’ FOR Country;
Oracle:
ALTER TABLE Customers MODIFY Country DEFAULT ‘Canada’;
重要:添加默认约束通常只影响未来的 INSERT 操作。除非明确更新,否则它通常不会更改表中现有的行。
删除 DEFAULT 约束
Section titled “删除 DEFAULT 约束”要移除 DEFAULT 约束,您也使用 ALTER TABLE。同样,语法可能有所不同。
PostgreSQL / MySQL:
ALTER TABLE Customers ALTER COLUMN Country DROP DEFAULT;
SQL Server (需要知道约束名称):
— First, find the constraint name (e.g., using SQL Server Management Studio or system stored procedures) — Let’s assume the constraint name is DF_Customers_Country ALTER TABLE Customers DROP CONSTRAINT DF_Customers_Country;
Oracle:
ALTER TABLE Customers MODIFY Country DEFAULT NULL; — Sets the default to NULL, effectively removing the previous specific default value
实际应用:
- 为新订单设置默认
OrderStatus为 ‘Pending’。 - 使用
DEFAULT CURRENT_TIMESTAMP分配CreationTimestamp用于审计追踪(audit trails)。 - 为新用户帐户提供默认
IsActive标志为TRUE。
学习难点:管理命名和未命名的默认约束可能是一个障碍,尤其是在 SQL Server 等系统中删除它们时。如果您的 RDBMS 允许轻松命名默认值,则最好命名您的约束。