MySQL之关系映射

摘要:
数据库关系通常用于描述多个表之间的关系。父表:CREATETABLEparentCHARSET=UTF8;子表:CREATETABLEchildCHARSET=UTF8;3、 多对多关系多对多的关系意味着一个表中的多条数据对应于另一个表的多个数据。例如,以下专业和课程:专业表:CREATETABLEmajorCHARSET=UTF8;课程:CREATETABLEcourseCHARSET=UTF8;关系表:CREATETABLEm_cCHARSET=UTF8;4、 在创建表之间的关系映射时,外键约束是一个重要的约束字段。SHOWCREATABLE表名G;在MySQL数据库中,G表示格式化和输出结果。

数据库的关系一般是用于描述多张表之间的关系。

主要分为:

  • 一对一
  • 一对多
  • 多对多

而不管表与表之间是哪种关系,在创建关联时都需要通过外键(FOREIGN KEY)进行约束,以保证数据的统一性。外键通常都是与另一张表的主键进行关联的。

一、一对一关系

一对一关系是指一张表中的一条数据对应另一张表中的唯一一条数据。

例如下面的用户与用户详情表。

用户表:

CREATE TABLE user(
id INT UNSIGNED PRIMARY KEY,
name VARCHAR(12),
phone CHAR(15)
)CHARSET=UTF8;

用户详情表:

CREATE TABLE userinfo(
id INT UNSIGNED PRIMARY KEY,
address VARCHAR(255),
uid INT UNSIGNED UNIQUE,
FOREIGN KEY(uid) REFERENCES user(id)
)CHARSET=UTF8;

一般而言,一个用户对应一个用户详情。所以在创建用户详情表时,添加外键的字段需要设置唯一(UNIQUE)约束。

二、一对多关系

与上面的一对一关系类似,一对多关系是指一张表中的一条数据,对应另一张表中的多条数据。

例如下面的父子表。

父亲表:

CREATE TABLE father(
id INT UNSIGNED PRIMARY KEY,
name VARCHAR(12),
phone CHAR(15)
)CHARSET=UTF8;

子女表:

CREATE TABLE child(
id INT UNSIGNED PRIMARY KEY,
name VARCHAR(12),
gender CHAR(10),
pid INT UNSIGNED,
FOREIGN KEY(pid) REFERENCES father(id)
)CHARSET=UTF8;
三、多对多关系

多对多关系是指一张表中的多条数据对应另一张表中的多条数据。

与上面一对一关系和一对多关系不同的是多对多需要一张关系表来描述两张表的关系,主表和从表没有直接关系,主表和关系表是一对多关系,从表和关系表也是一对多的关系。

例如下面的专业与课程:

专业表:

CREATE TABLE major(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name CHAR(10),
)CHARSET=UTF8;

课程表:

CREATE TABLE course(
id INT UNSIGNED AUTO_INCREMENT PEIMARY KEY,
name CHAR(10)
)CHARSET=UTF8;

关系表:

CREATE TABLE m_c(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
mid INT UNSIGNED,
cid INT UNSIGNED,
FOREIGN KEY(mid) REFERENCES major(id),
FOREIGN KEY(cid) REFERENCES course(id)
)CHARSET=UTF8;
四、外键约束

在创建表与表之间的关系映射时,外键是必不可少的约束字段。通过上面的例子可以总结出外键的语法是:

FOREIGN KEY(当前表的外键字段) REFERENCES 关联表名(关联表字段)

一般而言关联表字段通常都是关联表的主键字段。

在创建外键约束时,要注意的是必须要先有外键字段,之后才能添加约束,而且外键字段的类型必须要和关联字段的类型保持一致。添加外键只是添加了一个约束,并不是添加新的字段。

查看表的字段以及字段类型的相关信息时。可以使用下面的语法:

DESC 表名;

MySQL之关系映射第1张

外键约束也可以给已经存在的表添加。

语法:

ALTER TABLE 表名 ADD FOREIGN KEY(外键字段) REFERENCES 关联表名(关联表主键字段);

外键约束也是可以删除的。

语法:

ALTER TABLE 表名 DROP FOREIGN KEY 外键的名字;

外键的名字再添加外键约束时,系统会自动命名。可以通过查看建表语句进行查看。

SHOW CREATE TABLE 表名G;

在MySQL数据库中,G指的是将结果格式化输出。

MySQL之关系映射第2张

免责声明:文章转载自《MySQL之关系映射》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Springboot中静态资源和拦截器处理(踩了坑)Docker 基本部署下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

windows版influxDB安装与配置

最近实习的公司在做一个工业监控系统,虽然数据采集点并不算多但是数据量积累下来也非常大,使用mysql数据库进行数据存储和查询时很慢,所以让我调研一下时序数据库,通过调研和了解时序数据库在海量数据的读取和写出都比关系型数据库和NoSql快很多,有人做过mysql和influxDB对比,存储1000万条数据mysql要7分多钟,influxDB只需2分多钟,从...

Ubuntu 16.04 LTS 安装 Nginx/PHP 5.6/MySQL 5.7 (LNMP) 与Laravel

Ubuntu 16.04 LTS 安装 Nginx/PHP 5.6/MySQL 5.7 (LNMP) 与Laravel 1、MySQL安装【安装 MariaDB】MariaDB是MySQL的一个分支首先,更新升级系统$ sudo apt update$ sudo apt upgrade安装MariaDB:$ sudo apt install mariadb...

mysql——导入文本文件——用mysqlimport命令

CMD进入DOS窗口执行: mysqldump -u root -p123 -T C:\Users\del\Desktop see cr01 --fields-terminated-by=',' --lines-terminated-by='\r\n' mysqlimport -u root -p123 see C:\Users\del\Deskto...

[转]MySQL源码:Range和Ref优化的成本评估

MySQL源码:Range和Ref优化的成本评估 原文链接:http://www.orczhou.com/index.php/2012/12/mysql-source-code-optimizer-range-and-ref/ 在开始介绍index merge/ROR优化之前,打算先介绍MySQL是如何对range/ref做成本评估的。MySQL是基于成...

navicat查看MySQL数据库、表容量大小

 1. 查看所有数据库容量大小 select table_schema as '数据库', sum(table_rows) as '记录数', sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)', sum(truncate(index_length/1024/...

MySQL5.6 新特性之GTID

1.mysql5.6在复制方面的新特性: (1).支持多线程复制:事实上是针对每个database开启相应的独立线程,即每个库有一个单独的(sql thread).针对这样的改进,如果我们想实现多线程复制,无疑要对现存的数据库结构进行重新设计,分库分表.对于压力都集中在个别database的,多线程并发复制特性就没有意义. (2).支持启用GTID,在配置...