Skip to content

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 约束,您也使用 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 允许轻松命名默认值,则最好命名您的约束。