[Java Web]MySQL数据库|一文带你了解并熟悉数据库相关知识和各种操作,超6000字详细介绍(三)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: [Java Web]MySQL数据库|一文带你了解并熟悉数据库相关知识和各种操作,超6000字详细介绍(三)

10、约束

10.1、为什么要约束

在实际的数据库操作中,关于表中的数据,如若不做约束可能存在以下问题:

①id 列一般是用标示数据的唯一性的,不约束可能出现多个id重复

②存储用户年龄的数据的age列的数据可能出现四位数五位数,而人并没有这么长寿,如此有违常理

③成绩是负数,而一般情况来说成绩很少出现负数

④成绩值为null,而成绩即使没考也应该是0分

10.2、概念

针对上述数据问题,我们就可以从数据库层面在添加数据的时候进行限制,这就是约束。

10.3、约束的分类

10.3.1、非空约束

非空约束: 关键字是 NOT NULL

保证列中所有的数据不能有null值。

Ex:create table user(name varchar(10) not null);

编辑

可以看到,进行非空约束之后,再传入null,会报错。

10.3.2、唯一约束

唯一约束:关键字是 UNIQUE

保证列中所有数据各不相同。 (unique唯一)

create table user(name varchar(10),unique(name));

10.3.3、主键约束⭐

主键约束: 关键字是 PRIMARY KEY

主键是一行数据的唯一标识,要求非空且唯一。一般我们都会给每张表添加一个主键列用来唯一标识数据。

例如:id就可以作为主键,来标识每条数据。那么这样就要求数据中id的值不能重复,不能为null值。

create table user(id int,name varchar(10),primary key(id));

10.3.4、检查约束⭐⭐

检查约束: 关键字是 CHECK

保证列中的值满足某一条件。

例如:我们可以给age列添加一个范围,最低年龄可以设置为1,最大年龄就可以设置为300,这样的数据才更合理些。

SQL->create table user(age int check(age>18 and age<80));

注意:MySQL不支持检查约束。

解决办法:从数据库层面不能保证,以后可以在java代码中进行限制,一样也可以实现要求。

10.3.5、默认约束

默认约束: 关键字是 DEFAULT

保存数据时,未指定值则采用默认值。

例如:我们在给english列添加该约束,指定默认值是0,这样在添加数据时没有指定具体值时就会采用默认给定的0。

create table user(english int default 0);

10.3.6、外键约束

外键约束: 关键字是 FOREIGN KEY

外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。

比如orders表中的userId必须参考user表中的id,如果插入的userId在user表中不存在,则无法插入

编辑

SQL->create table orders(id int primary key,userId int,foreign key(userId) references user(id));

10.3.7、unique和primary key的区别⭐

unique和primary key约束都可以为一列值的唯一性提供保障,但是unique在同一个表中可以出现多次,而primary key在同个表中只能出现一次

11、数据库设计

11.1、简介

11.1.1、软件的研发步骤:

编辑

11.1.2、数据库设计概念

数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型,建立数据库中的表结构以及表与表之间的关联关系的过程。

11.1.3、数据库设计的步骤

①需求分析(数据是什么? 数据具有哪些属性? 数据与属性的特点是什么)

②逻辑分析(通过ER图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)

③物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)

④维护设计(1.对新的需求进行建表;2.表优化)

如下图就是ER(Entity/Relation)图:

编辑

11.2、表关系

表关系有三种:一对一、一对多、多对多

11.2.1、一对一

如:用户和用户详情

一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能

实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)

11.2.2、一对多

如:部门和员工

一个公司有多个部门,一个部门有多个员工,则部门表对应员工表

一个部门对应多个员工,一个员工对应一个部门

实现方式:在多的一方建立外键,指向一的一方的主键

编辑

编辑

例如:CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES tb_dept(id)

11.2.3、多对多

如:商品和订单

一个商品对应多个订单,一个订单包含多个商品

实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

编辑

12、多表查询

多表查询:从多张表中一次性的查询出我们想要的数据

12.1、内连接查询

内连接相当于查询A和B的交集数据

编辑

-- 隐式内连接

SELECT 字段列表 FROM 表1,表2… WHERE 条件;

-- 显示内连接

SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;

12.2、外连接查询

左外连接:相当于查询A表所有数据和交集部分数据

右外连接:相当于查询B表所有数据和交集部分数据

编辑

-- 左外连接

SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;

-- 右外连接

SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;

12.3、子查询

概念:查询中嵌套查询,称嵌套查询为子查询。

编辑

13、事务

数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令

事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败

事务是一个不可分割的工作逻辑单元

13.1、如何理解

一个事务就是一块命令,比如转账操作,数据在更新的时候有先后。

比如A向B转钱的过程中程序刚好出现了错误,那么有可能出现A的余额变少了但是B的余额并没有增加的情况,此时就需要事务来解决这个问题。

把转账这个操作看成一个整体,如果出了异常,便回滚事务,即A转账出错时,A的资金余额回到转账前

13.2、语法

①开启事务->START TRANSACTION; 或者 BEGIN;

②提交事务->commit;

③回滚事务->rollback;

Ex:

begin;

一系列操作

commit;

rollback;

⭐在开发中一般不这样操作,而是在java中进行操作,在java中可以抓取异常,没出现异常提交事务,出现异常回滚事务。

13.3、四大特征

事务的四大特征:

①原子性(Atomicity) : 事务是不可分割的最小操作单位,要么同时成功,要么同时失败

②一致性(Consistency) :事务完成时,必须使所有的数据都保持一致状态

③隔离性(Isolation) : 多个事务之间,操作的可见性

④持久性(Durability) : 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

编辑

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
21天前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
|
19天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
34 1
|
21天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
35 4
|
23天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
47 4
|
28天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
155 1
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
87 2
|
2月前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
1月前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
118 4
|
15天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
125 0
|
23天前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
51 0