**

构建两张表的多对多关系:清洗数据表(clean_data表)与用户表(user表)建立多对多的关系。如下图图0所示

图0 多对多之间关系

1 创建表

.打开navicat,创建三张表,clean_data表与user表,以及两个表之间的关系表(clean_data_user表)。

表结构分别如下:

图1 clean_data设计表

图2 user设计表

图3 clean_data_user设计表

2.建立外键

2.1首先设置clean_data_user表中将要关联的cln_dt_id和user_id两个字段为主键。如下图图4所示。

图4 设置两字段cln_td_id和user_id为主键

2.2点击外键按钮,建立外键关系。根据字段的命名可想而知,cln_dt_id将与clean_data表中的id建立关联,user_id与user表中的id关联。如下图图5所示。

图5 建立外键关系

注意事项:

1.数据库表多对多建立关系时,一定要首先建立主键。如果不首先建立外键,会出现1215的错误,如下图图6所示。在这个问题上浪费了近两个小时。实在不该啊。

**

后面才发现,没必要建主键啊,给cln_td_id和user_id建立索引即可!

**

图6 1215错误

那么,我们来整理出现1215错误的原因:

MySQL中创建外键的错误:1215 Cannot add the foreign key constraint

1.两个字段的类型或者大小不严格匹配。 其中,两个字短分别是int(6)与int(7)也算不匹配。一个是unsigned(无符号),一个是signed也是不匹配的。

2.试图设置外键的字段没有建立起索引,或者不是一个primary key(主键)。如果其中一个不是primary key的话,你必须先为它创建一个索引。

3.其中一个或者两个表是MyISAM引擎的表。若想要使用外键约束,表必须是InnoDB引擎(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键,只会建立索引)你需要检查表的引擎类型。

4.外键的名字不能重复。

5.你可能设置了ON DELETE SET NULL,但是相关的键的字段又设置成了NOTS NULL值。你可能通过修改cascade的属性值或者把字段属性设置成allow null来解决。

6.请确定你的Charset和Collate选项在表级和字段级上的一致。

7.你可能设置为外键设置了一个默认值,如default=0。

8.ALTER声明中有语法错误.

---------------------

作者:梧桐林木

来源:CSDN

原文:https://blog.csdn.net/wu18663419760/article/details/71700304?utm_source=copy

版权声明:本文为博主原创文章,转载请附上博文链接!

navicat 8 mysql生成关系_MySQL数据库通过navicat建立多对多关系相关推荐

  1. 数据库设计中,多对多关系使用使用逗号分割关联讨论

    进公司一个月,发现公司很多人喜欢用逗号分割,去存储其它表的主键,做多对多关联,但存在很多乱用现象.这里对这种方式做了下总结. 在传统数据库设计中,多对多关系存储通常都是用一张中间表来简历两张表的关系. ...

  2. java中mysql分组查询_ES对应mysql的group by分组查询javaApi,多对多关系的分组查询...

    ES对应mysql的group by分组查询javaApi,多对多关系的分组查询 比如我这边有个下列订单索引数据,现在的需求是按用户(fmerchantId)和支付方式(fchannelId)进行分组 ...

  3. mysql映射关系_mysql数据库对象关系映射_MySQL

    bitsCN.com mysql数据库对象关系映射 1.对"对象关系映射"的理解 a.对象:可以理解为java中的类 b.关系:可以理解为数据库的表 c.映射:这是因为java中的 ...

  4. mysql授予权限和撤销权限的关系_MySQL数据库常用的授予权限和撤销权限的命令讲解...

    MySQL 赋予用户权限命令的简单格式可概括为: 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利 1 2 3 4grant select on testdb.* to ...

  5. mysql数据库和表的关系_MySQL数据库学习【第六篇】表与表之间的关系

    表1 foreign key 表2 则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 ...

  6. mysql删除原则_MySQL数据库的增删选查

    数据库是专门存储数据对象的容器,这里的数据对象包括表.视图.触发器.存储过程等,其中表是最基本的数据对象. 创建数据库 在 MySQL 数据库中存储数据对象之前,先要创建好数据库. 语法: creat ...

  7. centos72安装mysql配置密码_MySQL数据库之170419、Centos7下完美安装并配置mysql5.6

    本文主要向大家介绍了MySQL数据库之170419.Centos7下完美安装并配置mysql5.6 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. linxu环境: centos ...

  8. mysql 进阶方向_mysql数据库入门、进阶和提升(续二)

    第十章 创建计算字段 将表中不同列中的数据字段通过拼接.加减乘除运算计算出结果并单独显示出来. 10.2拼接字段 将不同字段的值连接在一起并构成单个值.使用函数concat(),如果要将此值独立出来需 ...

  9. mysql 乱码 越南_mysql数据库乱码之保存越南文乱码解决方法

    我自己测试一下,很多字符变成了 '?'. 数据库连接已经是使用了 utf8 字符集: 复制代码 代码如下:define("MYSQL_ENCODE", "UTF8&quo ...

最新文章

  1. 《机器学习》周志华-CH2 模型评估与选择
  2. 中石油训练赛 - 姓氏(思维+水题)
  3. python画猪头_使用Python画小猪佩奇 社会人标配
  4. 浅谈面向对象编程与面向过程编程
  5. 荣耀手表gspro会用鸿蒙,真实使用荣耀手表GS Pro功能用2个月评测反馈!一定看看如何!...
  6. 中调用view_在 View 上使用挂起函数
  7. php数据库单循环显示,单循环赛制的PHP实现
  8. Python:火山小视频-无水印视频-多线程-批量采集实现和完整代码
  9. 能玩游戏的计算机推荐,电脑玩啥端游合适 适合长期玩的游戏有哪些
  10. 深度相机原理及坐标系转换
  11. 微信文件管理更改文件夹移动报错
  12. 【JZOJ 4623】搬运干草捆
  13. 购物网站的html5页面,网购商城(html5页面设计)
  14. 公司注册的企业邮箱竟然有邮件撤回的功能?!
  15. 深入解析String intern
  16. 如何将修改Tomcat的默认端口(8080)到80端口
  17. 物联网笔记,基于华为云IOT
  18. 射频无源器件测试方法介绍
  19. 计算机图像双曲线的代码,计算机图形学(二)输出图元_6_OpenGL曲线函数_5_其他曲线...
  20. mysql怎么把只读改为读写

热门文章

  1. 干货:如何利用机器学习实现有噪声标签样本分类模型?
  2. 亲戚再也看不见我一个人食吉野家了
  3. linux 压缩文件小,技术|在 Linux 上压缩文件的 5 种方法
  4. php mysql全能权威指南 pdf_《PHP+MySQL全能权威指南(配光盘)》怎么样_目录_pdf在线阅读 - 课课家教育...
  5. 对抗canary保护技术的几种方式
  6. pwntools解题脚本模板
  7. python基础:try...except...的详细用法
  8. Python必备知识点:对Json的基本使用方法
  9. Python 编码风格指南
  10. linux 环境变量 export PATH和PATH有什么区别?