首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表间关系

问表间关系
EN

Stack Overflow用户
提问于 2014-01-14 08:38:00
回答 6查看 73关注 0票数 1
代码语言:javascript
复制
Person Table
-------------------------------------
PersonId   |   Name   |   Surname   |
-------------------------------------
1              John       Smith
2              Sam        Rainbow


Address Table
------------------------------------------
AddressId   |   PersonId   |   Address   |
------------------------------------------
1               1              AAA
2               1              BBB

所以我想做的是,如果我执行下面的查询,

代码语言:javascript
复制
DELETE Person WHERE PersonId = 1

SQL不应允许我从Person表中删除,因为Address表中有与该Person相关的行。

我怎样才能建立这种关系?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-01-14 08:41:48

您需要定义一个外键:

代码语言:javascript
复制
ALTER TABLE Address
ADD FOREIGN KEY (PersonId)
REFERENCES Person (PersonId) 
票数 3
EN

Stack Overflow用户

发布于 2014-01-14 08:55:43

添加外键约束并限制删除:

代码语言:javascript
复制
ALTER TABLE Address
ADD CONSTRAINT Address_PersonId_fkey
FOREIGN KEY (PersonId)
REFERENCES Person (PersonId)
ON DELETE RESTRICT  -- what you asked for
ON UPDATE CASCADE;  -- maybe do something different for updates?
票数 1
EN

Stack Overflow用户

发布于 2014-01-14 08:42:30

你可以试试这个:

代码语言:javascript
复制
DELETE Address WHERE PersonId = 1

在那之后

代码语言:javascript
复制
DELETE Person WHERE PersonId = 1

也可以在地址表中引用。

代码语言:javascript
复制
ALTER TABLE Address
ADD FOREIGN KEY (PersonId)
REFERENCES Person (PersonId) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21109017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档