繁体   English   中英

无法关联两个MySQL表(外键)

[英]Unable to relate two MySQL tables (foreign keys)

这是我的USER

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL,
  `expiry` varchar(6) NOT NULL,
  `contact_id` int(11) NOT NULL,
  `email` varchar(255) NOT NULL,
  `password` varchar(100) NOT NULL,
  `level` int(3) NOT NULL,
  `active` tinyint(4) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`,`email`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

这是我的contact_info表

CREATE TABLE IF NOT EXISTS `contact_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `email_address` varchar(255) NOT NULL,
  `company_name` varchar(255) NOT NULL,
  `license_number` varchar(255) NOT NULL,
  `phone` varchar(30) NOT NULL,
  `fax` varchar(30) NOT NULL,
  `mobile` varchar(30) NOT NULL,
  `category` varchar(100) NOT NULL,
  `country` varchar(20) NOT NULL,
  `state` varchar(20) NOT NULL,
  `city` varchar(100) NOT NULL,
  `postcode` varchar(50) NOT NULL,
  PRIMARY KEY (`id`,`email_address`),
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

系统使用用户名登录用户。 我想以一种使用电子邮件登录的方式对其进行修改。 但是users表中没有email_address。

我在用户表中添加了外键 - 电子邮件(在contact_info中是email_address)。

我该如何查询数据库?

不,不,不,不。 说真的,没有。 不要让我过来那里:-)

您通过存储两次电子邮件地址来破坏第三范式。

这种关系只需要一个短的,即id 假设您不保证两个表中的ID相同(即,我的users.id不一定等于我的contact_info.id ),只需将ci_id添加到users表以充当外键的contact_info表。

然后获取用户的usernameemail的查询将是这样的:

select u.username, ci.email
from users u, contact_info ci
where u.username = 'paxdiablo'
and u.ci_id = ci.id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM