廖雪峰Java15JDBC编程-1关系数据库基础-1关系数据库简介
1.数据库
1.1 定义
数据库是按照数据结构来组合、存储和管理数据的软件。
1.2 数据库模型
数据库有层次模型、网状模型、关系模型三种模型。
2 关系数据库
关系数据库是建立在关系模型上的数据库,也是应用最广泛的主流数据库。
主流的关系数据库:
- 商业:Oracle,SQL Server,DB2,Sybase
- 开源:MySQL,PostgreSQL
- 桌面:Access
3 关系模型
关系数据库所使用的模式是关系模型。
一个关系表就是一个二维的表格,每一行为一条记录。
如班级信息用classes表来存储,学生信息用students表来存储,每一条记录都要通过唯一的id(主键)来表示唯一性。
主键只在一个表中保证唯一就可以了。
表和表之间用关系模型关联起来。
3.1 一对多

一个班包含多个学生。students通过class_id(对应classes的id)查找班级。
查找一班的学生,获取class的id为1,获取students表中class_id为1的学生即可。
查找小明的班级,获取其class_id,再去classes表中查找id为1的记录。
students中class_id为外键:作用是关联其他表的主键,实现一对多的关系。
3.2 一对一

一对一的关系也是由外键实现的。classes表增加teacher_id的字段。要查找二班班主任,就通过teacher_id找到teachers表中的记录。
3.3 多对多

一个学生有多门课程的成绩,而一门课程有多个学生的成绩。学生表students和课程表courses就是多对多的关系。多对多是2个一对多的关系组合起来的。在成绩表中有外键student_id关联到学生表,外键course_id关联到课程表
既可以查询某个学生全部课程的成绩,也可以查询某个课程全部学生的成绩,或某个学生某门课程的成绩
4 总结:
关系数据库是目前使用最广泛的数据库
- 建立在关系模型上
- 基本结构是表
- 主键用于唯一标识记录
- 外间用于引用其他表的主键
- 通过外键关联实现一对多/一对一/多对多的关系
5安装mysql
略
廖雪峰Java15JDBC编程-1关系数据库基础-1关系数据库简介的更多相关文章
- 廖雪峰Java15JDBC编程-2SQL入门-1SQL介绍
1.SQL:结构化查询语言 Structured Query Language 针对关系数据库设计 各种数据库基本一致 允许用户通过SQL查询数据而不关心数据库底层存储结构 1.1 SQL使用: 可以 ...
- 廖雪峰Java15JDBC编程-3JDBC接口-5JDBC连接池
1. JDBC连接池 1.1 JDBC连接池简介 线程池可以复用一个线程,这样大量的小任务通过线程池的线程执行,就可以避免反复创建线程带来的开销. 同样JDBC可以复用一个JDBC连接 JDBC的连接 ...
- 廖雪峰Java15JDBC编程-3JDBC接口-4JDBC事务
1 数据库事务:Transaction 1.1 定义 若干SQL语句构成的一个操作序列 要么全部执行成功 要么全部执行不成功 1.2 数据库事务具有ACID特性: Atomicity:原子性 一个事务 ...
- 廖雪峰Java15JDBC编程-3JDBC接口-3JDBC更新
使用update语句的时候,需要通过JDBC实现update语句的执行,这个时候仍然通过PreparedStatement对象来使用,直接传入update语句,然后通过setObject传入占位符的值 ...
- 廖雪峰Java15JDBC编程-3JDBC接口-2JDBC查询
我们可以使用JDBC查询来执行select语句. 1. Statement try(Connection conn = DriverManager.getConnection(JDBC_URL, JD ...
- 廖雪峰Java15JDBC编程-3JDBC接口-1JDBC简介
JDBC:Java DataBase Connectivity Java程序访问数据库的标准接口 使用Java程序访问数据库的时候,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接 ...
- 廖雪峰Java15JDBC编程-2SQL入门-2insert/select/update/delete
1. INSERT用于向数据库的表中插入1条记录 insert into 表名 (字段1,字段2,...) values (数据1,数据2,数据3...) 示例 -- 如果表存在,就删除 drop t ...
- 廖雪峰Java6IO编程-1IO基础-1IO简介
1.IO简介 IO是指Input/Output,即输入和输出: Input指从外部读取数据到内存,例如从磁盘读取,从网络读取. * 为什么要把数据读到内存才能处理这些数据呢? * 因为代码是在内存中运 ...
- 廖雪峰JavaScript学习笔记(基础及数据类型、变量)
先睹为快 alert('我要学JavaScript!'); Run: 基本语法: 1.每个语句以;结束,不强制 2.语句块用{...} 3.//单行注释,/*...*/ 多行注释 数据类型: 1.不区 ...
随机推荐
- ionic:ionic 教程
ylbtech-ionic:ionic 教程 1.返回顶部 1. ionic 教程 ionic 是一个强大的 HTML5 应用程序开发框架(HTML5 Hybrid Mobile App Framew ...
- PAT_A1053#Path of Equal Weight
Source: PAT A1053 Path of Equal Weight (30 分) Description: Given a non-empty tree with root R, and w ...
- canvas前端压缩图片和视频首屏缩略图并上传到服务器
图片: var img = document.createElement('img') img.src = window.URL.createObjectURL(fileObj.file) // 加载 ...
- delphi 实现最小化系统托盘(rz控件最简单 评论)
1.new -->application 2.在form1中加入一个tPopMenu 命名为pm1 3.uses ShellAPI; 4.定义一个常量在 const WM_TRAYMSG = W ...
- MZ头里面的东西。真他妈多
最后一个字段,也就是e_lfanew,的值表示PE头相对于文件首部的偏移,也就是说,在它的值所对应的位置,就是PE头的地址, 数据结构名称 值 e_magic: 0x5A4D->‘MZ’ e_c ...
- 2019-5-8-WPF-绑定命令在-MVVM-的-CanExecute-和-Execute-在按钮点击都没触发可能的原因...
title author date CreateTime categories WPF 绑定命令在 MVVM 的 CanExecute 和 Execute 在按钮点击都没触发可能的原因 lindexi ...
- arm-linux-ar 和 arm-linux-ranlib 的使用
静态库是在编译时需要的库. 1. 建立一个静态库 [arm@localhost gcc]#armlinuxar r libhello.a h1.o h2.o 2. 为静态库建立索引 [arm@l ...
- vim 底行模式 操作命令
1. 当前设置行号: set nonu 取消行号显示: 2. :set number 显示行号 (下次使用就没有了,要设置脚本 vim ~/ . ...
- 威布尔weibull distribution
data = wblrnd(0.5,0.8,100,1); 生成威布尔随机函数,尺寸参数为0.5,形状参数为0.8,生成数列100行,一列: parmhat = wblfit(data) 对data的 ...
- 数据库MySQL--常见基础命令
基础命令: 查看所有数据库:show databases; 打开指定的数据库:use 库名: 查看当前库的所有表:show tables; 查看数据库其他库中的表:show tables from 库 ...