SQL默认约束
SQL默认约束
我有一个表格,有两列dateRecieved和dateDue。我知道如何通过使用DEFAULT GETDATE()来让dateNow列默认显示今天的日期。然后用户可以修改dateRecieved列为任何他们想要的日期。当用户修改了dateRecieved列后,我该如何设置dateDue列,以便它默认显示距离dateRecieved日期x天的日期?我看了这个答案,但我需要参考另一列。
是否有一种方法可以在dateRecieved更改时自动修改其值?用户应该能够覆盖这两列的默认值。我正在使用W3 schools的SQL教程,但它没有答案,我在stackoverflow上也找不到答案。
http://www.w3schools.com/sql/sql_default.asp
谢谢
(SQL Default Constraint)问题的出现原因是希望在更新完成后,自动更新日期字段。解决方法是使用触发器来实现这一功能。
触发器是一种特殊的存储过程,它在特定的数据库操作(如插入、更新或删除)发生时自动执行。在这种场景下,可以创建一个触发器,当更新操作完成后,自动更新日期字段。
以下是一个示例解决方案,可以指导解决该问题的具体实现步骤:
1. 首先,确保数据库中已经创建了一个日期字段,例如"dateDue"。
2. 使用下面的代码创建一个触发器:
CREATE TRIGGER updateDateDue
ON yourTableName
AFTER UPDATE
AS
BEGIN
UPDATE yourTableName
SET dateDue = GETDATE()
FROM yourTableName
INNER JOIN inserted ON yourTableName.yourPrimaryKey = inserted.yourPrimaryKey
END
在上面的代码中,"yourTableName"是包含日期字段的表名,"yourPrimaryKey"是表的主键名。
3. 运行上述代码后,触发器将在每次更新操作后自动更新"dateDue"字段。每当更新操作完成时,触发器将使用当前日期和时间来更新"dateDue"字段的值。
通过以上步骤,我们可以创建一个触发器来实现在更新操作完成后自动更新日期字段的功能。这样,无论何时进行更新操作,日期字段都会自动更新为当前日期和时间。
默认约束的问题出现的原因是,DEFAULT值只在INSERT语句中起作用,而不适用于UPDATE语句。虽然可以通过触发器实现自动更新,但对于初学者来说,我建议尽量避免使用触发器。触发器很少被正确实现,并且会增加当出现问题时理解问题的难度。
解决方法是先执行INSERT语句,允许默认值自动填充,然后再执行UPDATE语句,将行的值更新为预期值。
以下是示例代码:
-- 创建表并设置默认约束 CREATE TABLE myTable ( id INT PRIMARY KEY, name VARCHAR(50) DEFAULT 'John' ); -- 执行INSERT语句,允许默认值填充 INSERT INTO myTable (id) VALUES (1); -- 执行UPDATE语句,更新行的值为预期值 UPDATE myTable SET name = 'Jane' WHERE id = 1;
在上述示例中,创建了一个名为myTable的表,并在name列上设置了默认约束为'John'。首先使用INSERT语句插入一行数据,只提供id值,让默认值自动填充name列。然后使用UPDATE语句将该行的name值更新为'Jane'。
通过这种方式,可以先使用默认值插入行,然后再根据需要使用UPDATE语句更新行的值,以实现预期的结果。