在谷歌搜索外键后,这就是我理解它们的方式。
如果我需要保存手机中没有人的地址,它会为一个人创建多个记录,因为他可以有多个号码。这也将在每个重复行中存储冗余地址值。因此,使用user-id作为外键,我可以将电话号码发送到另一个表,并保存地址不被重复。所以我的问题是如果用户表中的地址被删除,是否还会自动删除电话表中的所有相关值?或者必须在创建表时指定删除它将删除它?如果user-id仅在第一个表中更改,并且仅在第二个表中更改时会发生什么。
如果我有2张桌子
table: user
+-----------------------------+
|user-id | username | address |
+-----------------------------+
table: phone-no
+--------------------------+
| pid | phone-no | user-id |
+---------------------------
另外,如果它不是太多,你能告诉我用外键创建这两个的查询。
答案 0 :(得分:0)
表用户的user-id是主键,table phone-no中的user-id是引用用户表中user-id的foregin键。
create table user(
userid int identity(1,1) not null primary key,
username varchar(50) not null,
adress varchar(200) not null,
);
create table phone-no(
pid int identity(1,1) not null primary key,
phone-no int not null,
user-id int not null foreign key (userid) references user(userid) on delete cascade,
);
关于删除级联选项是可选的,希望你理解我的意思。
答案 1 :(得分:0)
您的设计是正确的。 Here's关于外键语法的MySQL文档,对于你的表,它看起来像这样:
CONSTRAINT fk_user_id FOREIGN KEY (user-id)
REFERENCES user(user-id)
ON DELETE CASCADE
此处,ON DELETE CASCADE
将确保删除用户时删除电话记录。如果您要执行其他操作(例如,将user-id
设置为null并且不删除记录),则可以使用SET NULL
。请查看上述文档中的参考操作部分。