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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: [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) : 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

编辑

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
5月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
572 1
|
5月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
640 0
|
9月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
8月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
1406 1
|
6月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
474 1
|
10月前
|
NoSQL Java API
在Java环境下如何进行Redis数据库的操作
总的来说,使用Jedis在Java环境下进行Redis数据库的操作,是一种简单而高效的方法。只需要几行代码,就可以实现复杂的数据操作。同时,Jedis的API设计得非常直观,即使是初学者,也可以快速上手。
422 94
|
10月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
10月前
|
Java 关系型数据库 MySQL
Java汽车租赁系统源码(含数据库脚本)
Java汽车租赁系统源码(含数据库脚本)
301 4
|
10月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
469 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战

推荐镜像

更多