我们定义外键如FOREIGN KEY(name) REFERENCES User(name)
或类似的东西。为什么以及何时需要使用约束?我不太明白约束的目的。
答案 0 :(得分:3)
对外键的约束的目的是确保在其他表中仍然引用它时,不能删除主表中的记录。如果没有约束,您将在数据库中获得无效数据,并且将违反参照完整性。
答案 1 :(得分:3)
约束的目的(包括PRIMARY KEY,FOREIGN KEY和CHECK约束)是指示数据库引擎强制执行有关数据的某些事实。
例如,如果您有一个表customers
和一个表orders
,并且两个表都有一列customer_id
,那么记录订单可能是非法的条件使用customer_id
表中不存在的customers
。
如果是这样,您可以将customer_id
中的customers
声明为PRIMARY KEY,将customer_id
中的orders
声明为引用PRIMARY KEY的FOREIGN KEY customers
。一旦您做出声明,数据库引擎将拒绝任何会导致违反该关系的SQL语句(您无法删除customer
orders
,为order
创建customer
不存在{{1}},等等。)
使用约束远优于简单地在应用程序级别强制执行逻辑,因为它保证非法数据永远不会进入您的系统,无论应用程序或用户界面是什么用于访问数据库。如果在应用程序级别强制执行关系完整性,则必须希望未来的数据库接口能够一致且正确地强制执行逻辑,并且您将无法在允许直接访问数据库表的通用应用程序中强制执行逻辑。 p>