Discuss / SQL / 求问

求问

Topic source

c2_邓灿x

#1 Created at ... [Delete] [Delete and Lock User]

外键既可以通过数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来保证。

外键并不是通过列名实现的,而是通过定义外键约束实现的

这两句话是什么意思?我怎么感觉矛盾了

我是小白

  1. 实现约束有两种方式
    1. 数据库约束:数据库层面将`students`表的`class_id`与`classes`表中的`id`关联。此时插入`students`时,如`class_id`对应列在`classes`表的`id`中无对应记录时,将无法插入数据。
    2. 应用程序逻辑:通过应用程序来关联外键。如查找小明的班级:先在`students`中找到小明对应的`class_id`,应用程序接着在`classes`中查找id为`1`的记录得到小明所在班级为`一班`,此为应用程序级别。
  2. 数据库约束是将一个约束绑定到一个列上。`class_id`只是一个列,实际约束需要额外定义`外键约束`实现,如示例中的
ALTER TABLE students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id)
REFERENCES classes (id); 

如果删除`fk_class_id`约束,`students`中的`class_id`这一列还是存在的。


  • 1

Reply