Mysql 将外键用于";同步";会员信息
我现在主要是想把我的脑袋绕在外键的想法上,但是我在网上看到的东西都没有我所需要的那么有用 我有一个数据库(我们称之为user\u data)。在那个数据库中,我有一个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
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还是个新手(上个月开始断断续续地自学只是为了好玩)。。。我真正需要做的就是确保有唯一的键,并且表中的正确数据对应于正确的用户。