2

我们定义这样的外键FOREIGN KEY(name) REFERENCES User(name)或类似的东西。为什么以及何时需要使用约束?我不太明白约束的目的。

4

2 回答 2

3

对外键进行约束的目的是确保您不能删除主表中的记录,而其他表中仍有对其的引用。如果没有约束,您将在数据库中获得无效数据,并且将违反参照完整性。

于 2012-10-10T14:25:56.477 回答
3

约束(包括 PRIMARY KEYs、FOREIGN KEYs 和 CHECK 约束)的目的是指示数据库引擎强制执行有关数据的某些事实。

例如,如果您有一个表customers和一个表orders,并且两个表都有一个列,那么使用表中不存在的customer_ida 记录订单可能是非法条件。customer_idcustomers

如果是这样,您可以将customer_idin声明customers为 PRIMARY KEY 并将customer_idin声明orders为引用 PRIMARY KEY in 的 FOREIGN KEY customers。一旦您做出该声明,数据库引擎将拒绝任何会违反该关系的 SQL 语句(您不能删除customerthat has ,为不存在的orders创建一个,等等)。ordercustomer

使用约束优于简单地在应用程序级别执行逻辑,因为它保证非法数据永远不会进入您的系统,无论使用什么应用程序或用户界面访问数据库。如果您在应用程序级别强制执行关系完整性,您必须希望未来的数据库接口能够一致且正确地强制执行逻辑,并且您将无法在允许直接访问数据库表的通用应用程序中强制执行逻辑。

于 2012-10-10T14:28:23.950 回答