Mysql 将外键用于";同步";会员信息

Mysql 将外键用于";同步";会员信息,mysql,database,web-applications,Mysql,Database,Web Applications,我现在主要是想把我的脑袋绕在外键的想法上,但是我在网上看到的东西都没有我所需要的那么有用 我有一个数据库(我们称之为user\u data)。在那个数据库中,我有一个members表和一个contact表。members表保存电子邮件、用户名和登录名的数据,其中contact info保存用户名和电话号码(是的,在讨论我是否需要电话号码之前,我需要) 所以,我有这样的想法: CREATE TABLE `members` ( `id` int(11) NOT NULL PRIMARY KE

我现在主要是想把我的脑袋绕在外键的想法上,但是我在网上看到的东西都没有我所需要的那么有用

我有一个数据库(我们称之为user\u data)。在那个数据库中,我有一个
members
表和一个
contact
表。members表保存电子邮件、用户名和登录名的数据,其中contact info保存用户名和电话号码(是的,在讨论我是否需要电话号码之前,我需要)

所以,我有这样的想法:

CREATE TABLE `members` (
    `id` int(11) NOT NULL PRIMARY KEY,
    `username` varchar(30) NOT NULL,
    `email` varchar(50) NOT NULL,
    `password` char(128) NOT NULL,
    `user_type` int(11) NOT NULL DEFAULT '0'
);

CREATE TABLE `contact_info` (
    `t_ID` int(11) NOT NULL,
    `First` varchar(50) DEFAULT NULL,
    `Last` varchar(50) DEFAULT NULL,
    `Phone` int(11) DEFAULT NULL
);
在“成员”表中,用户由
id
标识,在联系人表中,通过比较
members.id=contact\u info.t\u id

据我所知,外键在这里可以很好地工作,但我不知道我到底需要做什么才能使它工作。。。或者更确切地说,我对外键了解不够,无法理解我需要做什么。
members.id
contact\u info.t\u id
之间的关系是一对一的。。。一个用户只有一个联系人组和一个联系人组


我正在学习SQL,所以我几乎无法胜任这里的工作,我非常感谢您的帮助。

按相反顺序删除FK相关的表:

drop table if exists `contact_info`;
drop table if exists `members`;
模式:

CREATE TABLE `members` (
    `id` int(11) AUTO_INCREMENT PRIMARY KEY,
    `username` varchar(30) NOT NULL,
    `email` varchar(50) NOT NULL,
    `password` char(128) NOT NULL, -- this needs to be bigger. Hashed value.
    `user_type` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB;

CREATE TABLE `contact_info` (
 `id` int(11) AUTO_INCREMENT PRIMARY KEY,
 `m_id` int(11) NOT NULL, -- points to `members`.`id` (See Note1 *** )
  `First` varchar(50) DEFAULT NULL,
  `Last` varchar(50) DEFAULT NULL,
  `Phone` int(11) DEFAULT NULL,
  CONSTRAINT `contact_info_ibfk_1` FOREIGN KEY (`m_id`) REFERENCES `members` (`id`)
) ENGINE=InnoDB;
这应该是我在你的问题中读到的你的模式。它支持1:1和1:Many。在
成员
中插入一行后,如果要立即在插入之后插入
联系人信息
,请调用以获取键的
自动增量

注1:如果您想要1:1,那么您需要一个唯一的密钥(显然是PK)。但我觉得你还是有点困惑,1:1还是1:多

执行后的视图:

CREATE TABLE `contact_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `m_id` int(11) NOT NULL,
  `First` varchar(50) DEFAULT NULL,
  `Last` varchar(50) DEFAULT NULL,
  `Phone` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `contact_info_ibfk_1` (`m_id`), -- NOTE2 ************
  CONSTRAINT `contact_info_ibfk_1` FOREIGN KEY (`m_id`) REFERENCES `members` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果要运行
显示创建表联系人信息
,您可能会看到上面的内容。Note2键(索引)将自动创建,以支持外键关系

尽管有问题的评论,InnoDB将强制执行FK约束。如果您不这么认为,请尝试先将数据添加到
联系信息中


请参阅MySQL手册页面,标题为。

在本例中,为什么不将第一个、最后一个和电话作为成员表的一部分?如果这就是我将要拥有的全部,我会这样做。。。但是,一旦我得到了上述工作,更多的“行”将被添加到联系人表中,在我看来,这使跟踪存储在哪里变得更容易。我不是MySql的人,所以我可能会遗漏一些东西,但在我看来,无论如何,所以我根本不认为有理由在这个数据库中声明它们。我对SQL还是个新手(上个月开始断断续续地自学只是为了好玩)。。。我真正需要做的就是确保有唯一的键,并且表中的正确数据对应于正确的用户。