INSERT INTO customers (ID, NAME, AGE, ADDRESS, SALARY)
VALUES(3, 'sin', 21, 'bangalore', 10000);
INSERT INTO orders (orderid, orderno)
VALUES (3, 21);
此处ID
是customer
表中的主键,orderid
是orders
表中的主键。
我想知道是否必须在id
表中添加orders
作为外键来执行SQL连接?
答案 0 :(得分:0)
没有必要建立外键以执行客户和订单表的内部联接。然而,问题在于没有外键这种连接操作的重要性。
据推测,目标是模拟客户与订单之间的某种关系。假设列出的属性包含两个表中的所有属性,则无法按照定义表的方式在客户和订单之间建立关系。在orders表中添加customerID字段作为外键将建立该关系。然后,条件为customers.ID = orders.customerID的内部联接会将订单信息与已连接表中的相应客户信息相关联。
答案 1 :(得分:0)
我在这里的想法是,当您询问是否需要FK时,默认情况下您会接受两者都在同一个域中工作,简而言之,这不是有效的假设
内部联接用于读取(查询)数据,而 FK 可以在其他类型的操作(例如插入,更新和删除)中维护数据的完整性。
我认为正确的答案应该是 FK和内部联接都不相关。
我将使用下表解释两者之间的区别
Customers
| id | name |
|:------------|---------:|
| 1 | Gabriel |
| 2 | John |
| 3 | Smith |
Orders
| order_id |customer_id|
|:-----------|---------: |
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
内部加入,
例如,根据以上所述,在查询期间使用,假设您要查询特定客户的所有订单。
select * from customers, orders
where customer.id=orders.customer_id
and customer.id=2
根据我们的表格,您最终将为客户(John)得到一个订单号(4)
外键
在查询期间使用内部联接时,外键用于对主要DML操作(插入,更新和删除)应用策略。
下面是无法违反FK约束的操作示例
Insert into orders(order_id,customer_id) values(5,7)
此操作将失败,因为“客户”表中不存在ID为(7)的客户,更新操作将同样适用。
如果FK启用了删除级联或更新级联 这将在尝试删除或更新主表时删除或更新子行,例如删除客户Gabriel的示例将删除订单1,2和3。