我正在尝试在MySQL数据库中实现一对一关系。 例如,假设我有“用户”表和“帐户”表。 并且我想确保有一个用户只能拥有一个帐户。 每个用户只能有一个帐户。

我找到了两个解决方案,但是不知道该使用什么,还有其他选择。

第一个解决方案:

DROP DATABASE IF EXISTS test;

CREATE DATABASE test CHARSET = utf8 COLLATE = utf8_general_ci;

USE test;

CREATE TABLE users(

id INT NOT NULL AUTO_INCREMENT,

user_name VARCHAR(45) NOT NULL,

PRIMARY KEY(id)

) ENGINE = InnoDB DEFAULT CHARSET = utf8;

CREATE TABLE accounts(

id INT NOT NULL AUTO_INCREMENT,

account_name VARCHAR(45) NOT NULL,

user_id INT UNIQUE,

PRIMARY KEY(id),

FOREIGN KEY(user_id) REFERENCES users(id)

) ENGINE = InnoDB DEFAULT CHARSET = utf8;

在此示例中,我在指向用户主键的帐户中定义外键。然后,我使外键成为UNIQUE,因此帐户中不能有两个相同的用户。要联接表,我将使用以下查询:

SELECT * FROM users JOIN accounts ON users.id = accounts.user_id;

第二种解决方案:

DROP DATABASE IF EXISTS test;

CREATE DATABASE test CHARSET = utf8 COLLATE = utf8_general_ci;

USE test;

CREATE TABLE users(

id INT NOT NULL AUTO_INCREMENT,

user_name VARCHAR(45) NOT NULL,

PRIMARY KEY(id)

) ENGINE = InnoDB DEFAULT CHARSET = utf8;

CREATE TABLE accounts(

id INT NOT NULL AUTO_INCREMENT,

account_name VARCHAR(45) NOT NULL,

PRIMARY KEY(id),

FOREIGN KEY(id) REFERENCES users(id)

) ENGINE = InnoDB DEFAULT CHARSET = utf8;

在此示例中,我创建了一个外键,该外键从主键指向另一个表中的主键。 由于默认情况下主键是UNIQUE,因此使此关系一对一。要联接表,我可以使用以下方法:

SELECT * FROM users JOIN accounts ON users.id = accounts.id;

现在的问题:

在MySQL中创建一对一关系的最佳方法是什么?

除了这两个以外,还有其他解决方案吗?

我正在使用MySQL Workbench,当我在EER图中设计一对一关系并让MySQL Workbench生成SQL代码时,我得到了一对多关系:S那就是让我感到困惑的:S

而且,如果我将这些解决方案中的任何一个导入到MySQL Workbench EER图中,它就会将关系识别为一对多:S,这也很令人困惑。

因此,在MySQL DDL中定义一对一关系的最佳方法是什么。 有什么选择可以实现这一目标?

mysql一对一关系_sql-MySQL-一对一关系?相关推荐

  1. 多表关系介绍 mysql

    多表关系介绍 mysql 关注表与表之间的关系 一对一关系 一个人只有一个身份证 一个身份证只对应一个人 一对多关系(或者说 多对一关系) 一个部门有多个员工 一个员工只能对应一个部门 多对多关系 一 ...

  2. SQLAlchemy_定义(一对一/一对多/多对多)关系

    SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...

  3. Java初学者疑难杂症之:一对一和一对多的关系

    2019独角兽企业重金招聘Python工程师标准>>> [威哥说]作为一个程序员,我们每天都在"搞"对象,额,"用"对象,感觉那个词都不太好, ...

  4. mysql 实体关系表_实体关系图

    解释 实体关系图:简记E-R图是指以实体.关系.属性三个基本概念概括数据的基本结构,从而描述静态数据结构的概念模式.E-R图为实体-联系图,提供了表示实体型.属性和联系的方法,用来描述现实世界的概念模 ...

  5. java一对一关系_Java初学者疑难杂症之:一对一和一对多的关系

    [威哥说]作为一个程序员,我们每天都在"搞"对象,额,"用"对象,感觉那个词都不太好,还是继续向下说,对象之间的关系有的是一对一的,也有一对多的(现实中有才好) ...

  6. MySQL Workbench构建ER图(实体关系图)

    MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具,它是著名的数据库设计工具DBDesigne4的继任者,可以通过MySQL Workbench设计和创建新的数据库图示,管理 ...

  7. mysql _外键、实体关系与ER图

    外键约束概念: A实体的某个字段指向 B实体的主键, 则称A实体的那个字段为该实体的外键, 一个表里可以有多个外键drop table if exists class;create table cla ...

  8. Mybatis xml中配置一对一关系association一对多关系collection

    Mybatis xml中配置一对一关系association&一对多关系collection 今天在配置一对一关系映射以及一对多关系映射的时候,把collection中应该使用的ofType配 ...

  9. [MySql]实现多表查询-一对一,一对多

    目录 多表关联关系的分类 mybatis中的多表查询: 数据库准备 项目目录 一对一查询(多对一) 方式一:(xml文件映射) 查询结果: 方式二:(注解映射) 一对多查询(一对多) 方式一:(xml ...

  10. Mysql快速备份_sql备份

    Mysql快速备份_sql备份 1.备份表结构和数据(先完整备份表结构,再插入数据)create table 新表 like 需要备份的表;insert into 新表 (select * from ...

最新文章

  1. HTML5中的websocket图片直播
  2. python3 爬取西祠代理IP数据
  3. C++ ,leetcode 43. 字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式
  4. SpringBoot中使用@Mapper注解需要哪个包
  5. 一个多功能蓝色漂亮的搜索条
  6. BDD框架之Cucumber研究
  7. 了解一下Elasticsearch的基本概念
  8. python 生成pdf_如何使用Python生成PDF?
  9. 现在每月五千块钱的收入,相当于七八十年代的多少钱?
  10. 点这里安装Alexa工具条
  11. python:文件处理之TXT
  12. matlab菲涅尔衍射光强分布,求助!!!用颜色表示的菲涅尔衍射的光强分布图
  13. 卓岚APP远程采集正泰单相电子式电能表 ZLAN5144J的应用分享
  14. C4D插件X-Particles粒子特效(三)
  15. 基于anbox的云游戏技术简介
  16. UI设计师如何通过兼职月入过万?
  17. 在企业中TPM管理如何开展?
  18. Tkinter登陆界面设计
  19. python123凯撒密码_凯撒密码和反密码
  20. 计算机听课与评课活动记录表,听课 评课记录表参考

热门文章

  1. 设置浏览器为【默认浏览器】的两种方式
  2. L1-017 到底有多二 (15 分) — 团体程序设计天梯赛
  3. Android GridLayout 网格布局
  4. lintcode-397-最长上升连续子序列
  5. 《一个操作系统的实现》 ubuntu系统环境配置
  6. oracle出现关键字该如何处理
  7. 引擎设计跟踪(九.2) 3DS MAX 导出插件 继续
  8. thinkphp页面请求时间超过40S报404错误解决办法
  9. H3C 路由备份与IP聚合
  10. 计算机网络管理员技师题库那个好,计算机网络管理员高级技师题库.docx