1.前言

在开发中,针对一对多的关系,一方称之为主表或一表,多方称之为多表或从表。

为了表示一对多的关系,一般会在多表的一方添加一个字段,字段名称自定义(建议:主表的名称_id)

字段类型一般和主表的主键的类型保持一致,该字段称之为外键。

【外键约束不是必须的,可以通过Java程序来控制】

2. 一对多

用户表和订单表

----用户表

create table user(

id int primary key auto_increatement,

username varchar(20)

);

----订单表

create table orders(

id int primary key auto_increatement,

totaleprice double,

user_id int

);

----为了保证数据的有效性和完整性,在多表的一方添加约束(外键约束)。

格式:

alter table 多表名称 add foreign key (外键名称) references 主表名称(主键);

alter table orders add foreign key(user_id) references user(id);

注意:添加了外键约束后有如下特点:

1.主表中不能删除从表中已引用的数据;

2.从表中不能添加主表不存在的数据;

3.外键约束常用于项目上线时。

主表:

从表:

主表--从表的对象模型:

从上图来看,可以成功的在从表中插入主表存在的数据(id),当插入主表不存在的id(id=8)这条数据时,将爆外键异常。

3. 小结

开发中处理一对多:

在从表(多表)中添加一个外键(foreign key),名称一般主表的名称,且字段类型必须和主表的主键字段类型保持一致。

为保证数据的有效性和完整性,在多表的外键上添加外键约束即可。


人的一生中,最光辉的一天并非是功成名就那天,而是从悲叹与绝望中产生对人生的挑战,以勇敢迈向意志那天。愿你就像早晨八九点钟的太阳,活力十足,永远年轻。

MySQL(10)-----多表创建及描述表关系(一对多的分析和实现)相关推荐

  1. mysql按照时间自动创建分区表_mysql 表分区、按时间函数分区、删除分区、自动添加表分区...

    mysql 表分区的几种方式: RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区. LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进 ...

  2. 【mysql学习】2.创建数据库和表,学会使用 select,delete,update ,insert,where等指令

    首先先来简单说明下mysql的结构,存储数据我们是在数据库中完成的,也就是database.在database中又有很多表,这个表里面就存有我们想要存储的数据.对于存储数据的表我们一般称为xxx表,比 ...

  3. mysql 用sql语句创建数据库和表

    1.使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; +----------+ | Database | +----------+ | mysql ...

  4. cmd(命令行)操作或连接mysql数据库,以及创建数据库与表

    1.相关指令 1.按下键盘上的windows+R键输入cmd,或在搜索框直接输入cmd 2.进入mysql: 在命令行输入mysql -uroot -p,然后输入你的mysql密码,成功后进入mysq ...

  5. 哈希表创建哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构.typedef enum{ HASH_OK-icoding-数据结构-C

    哈希表创建 typedef enum{HASH_OK,HASH_ERROR,HASH_ADDED,HASH_REPLACED_VALUE,HASH_ALREADY_ADDED,HASH_DELETED ...

  6. oracle给一个表创建序列,oracle表中怎么创建序列

    oracle序列的创建: create sequence seq_newsId increment by 1 start with 1 maxvalue 999999999; 获得oracle序列的S ...

  7. 单链表的整表创建以及整表删除

    一条链表是由很多个结点元素构成,所以,我们想要创建一个链表,只需要循环创建结点就可以完成这个任务了.按道理讲,我们可以只创建带有数据的结点就可以了,不过,为了更方便的操控链表以及更方便的创建结点,我们 ...

  8. MySql基础篇---003 SQL之DDL、DML、DCL使用篇:创建和管理表 ,数据处理之增删改,MySQL数据类型精讲 ,约束:联合主键

    第10章_创建和管理表 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数据的第一步.只有正确地 ...

  9. mysql用命令行创建表_mysql命令行创建表

    命令来查看表中的数据的变化: mysql>select*from students; 7.用文本方式将数据装入一个数据库表: 创建一个文本文件"student.sql",每行 ...

  10. ClickHouse 创建数据库/建表/视图/字典 SQL

    1.1. ClickHouse SQL之数据定义语言 DDL  本节介绍 ClickHouse 中进行数据库.表结构的定义和管理. 1.1.1. 概述 在SQL中,数据定义语言( DDL ) 用来创建 ...

最新文章

  1. 集合-ArrayList
  2. 朴素贝叶斯网络进行邮件分类
  3. flex布局怎么设置子元素大小_48张小图带你领略Flex 布局之美
  4. Studio启动的时候报错 Could not install Gradle distribution from
  5. How to make .dmg install for Mac
  6. 2016百度之星资格赛总结
  7. Lua 函数参数 默认实参
  8. pygame 文字输入交互_如何在pygame中创建交互式对象?
  9. Oracle 字符集
  10. eclipse下maven打包是出现如下错误com.sun.istack.internal不存在
  11. ubunut18.04 pycharm创建快捷方式和右键创建空白文件夹
  12. 深度解析国内主流离线编程软件
  13. 阿里云无影云桌面分配用户是什么?
  14. 什么叫机械硬盘_企业级机械硬盘和普通机械硬盘有什么区别
  15. c盘扩容提示簇被标记_电脑C盘爆满飘红?系统卡?试试这两种解决办法
  16. python 身份证实名认证
  17. 蒙特卡洛模拟最牛的地方在哪里呢?
  18. 反射-获取信息详细(转)
  19. Google实时文字翻译背后的技术
  20. Linux下的回收站trash

热门文章

  1. mybatis查询树形数据的两种方法
  2. 控制层SpringMVC和Struts2的区别
  3. BZOJ 1934 善意的投票
  4. MySql 5.6 Packet for query is too large
  5. /etc/init.crs enable\disable 状态
  6. 分支程序设计03 - 零基础入门学习C语言12
  7. 如何避免内存泄漏?(C++)
  8. 【android自定义控件】自定义View属性
  9. 敏捷开发之极限编程过程
  10. BZOJ3091 城市旅行