如何使用sql外键

时间:2017-04-26 07:20:13

标签: mysql sql database

在谷歌搜索外键后,这就是我理解它们的方式。

如果我需要保存手机中没有人的地址,它会为一个人创建多个记录,因为他可以有多个号码。这也将在每个重复行中存储冗余地址值。因此,使用user-id作为外键,我可以将电话号码发送到另一个表,并保存地址不被重复。所以我的问题是如果用户表中的地址被删除,是否还会自动删除电话表中的所有相关值?或者必须在创建表时指定删除它将删除它?如果user-id仅在第一个表中更改,并且仅在第二个表中更改时会发生什么。

如果我有2张桌子

   table: user
+-----------------------------+
|user-id | username | address  |
+-----------------------------+

   table: phone-no
+--------------------------+
| pid | phone-no | user-id | 
+---------------------------

另外,如果它不是太多,你能告诉我用外键创建这两个的查询。

2 个答案:

答案 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。请查看上述文档中的参考操作部分。