Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)

Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(中):https://developer.aliyun.com/article/1580543

12 表的操作

12.1 查看表 show

-- 查看当前数据库下所有的表
show tables;

12.2 查看表结构 desc

-- 查看表结构
-- desc 表名
desc emp

12.3 表的创建 【重要】

CREATE TABLE 表名(

列名 数据类型 [约束] ,

列名 数据类型 [约束] ,

列名 数据类型 [约束]

);

-- 建表
create table user(
    username varchar(50),
    password varchar(50),
    age int,
    phone_num varchar(20),
    birthday date,
    money double
)

12.4 删除表

drop table 表名;删除表

-- 删除表
-- drop table 表名;
-- drop table if exists 表名;
drop table if exists user;

12.5 修改表【了解】alter

添加列

  • alter table 表名 add 添加的字段 数据类型;
-- 在user表中添加一个address字段
alter table user add address varchar(100);

修改列的数据类型

  • alter table 表名 modify 修改的字段 数据类型;
-- 在user表中修改birthday字段的类型为datetime类型
alter table user modify birthday datetime;

删除列

  • alter table 表名 drop 字段名;
-- 在user表中删除一个phone_num字段
alter table user drop phone_num;

修改列名

  • alter table 表名 change 旧列名 新列名 数据类型;
-- 在user表中将username改为name
alter table user change username name varchar(50)

13 表的约束【理解】

13.1 约束

约束:

  • 用于限制加入到表中的数据的类型和规范

13.2 约束的分类

  • 实体完整性
  • 域完整性
  • 引用完整性

13.3 实体完整性

  1. 主键约束
  • 主键的特点:非空+唯一
  1. 主键的语法:字段名 数据类型 primary key
  1. 唯一约束
  1. 唯一特点:某个字段在一列数据中是唯一的(可以为多个null)
  1. 唯一语法:字段名 数据类型 unique
  1. 自增长约束
  1. 自增长特点:一般与主键一起使用,每添加一条数据,主键自动生成,在原有的基础上加1
  2. 自增长语法: 字段名 数据类型 primary key auto_increment
  1. 联合主键约束
  • 联合主键特点:与主键的作用含义一样,只不过由多个字段一起组成主键
  • 应用场景:中间表
  • 自增长语法: primary key(字段1,字段2)


/*
  约束:
    实体完整性约束
      主键约束
        主键:指的是一行数据唯一标识的那一列
          自然主键:主键字段就是这个表的某个属性
          代理主键:使用一个与表无关字段来作为表的主键
        主键的特点:非空+唯一
                主键的语法:字段名 数据类型 primary key

            唯一约束
         唯一特点:某个字段在一列数据中是唯一的
                  唯一语法:字段名 数据类型 unique

            自增长约束
         自增长特点:一般与主键一起使用,每添加一条数据,主键自动生成,在原有的基础上加1   
         自增长语法: 字段名 数据类型 primary key auto_increment

             联合主键约束
        联合主键特点:与主键的作用含义一样,只不过由多个字段一起组成主键
                应用场景:中间表
        自增长语法: primary key(字段1,字段2)
*/
drop table if exists user;
create table user(
  id int primary key,
  name varchar(20),
  age int
)
insert into user values(1,'jack',30); 

insert into user (name,age) values('jack',30); -- 错误,违反主键约束
insert into user values(null,'jack',30); -- 错误,违反主键约束(非空)
insert into user values(1,'rose',30); -- 错误,违反主键约束(唯一)


drop table if exists user;
create table user(
  id int primary key,
  name varchar(20) unique,
  age int
)
insert into user values(1,'jack',30);


insert into user values(2,'jack',31);  -- 错误,违反唯一约束
insert into user values(3,null,33); 
insert into user values(4,null,34); 



drop table if exists user;
create table user(
  id int primary key auto_increment,
  name varchar(20) unique,
  age int
)


insert into user (name,age) values ('jack',33);
insert into user (name,age) values ('rose',33);
insert into user  values (null,'马冬梅',34);



drop table if exists user;
create table user(
  name varchar(20),
  age int,
  primary key(name,age)
)
insert into user values('jack',30);
insert into user values('jack',31);
insert into user values('rose',31);
insert into user values('jack',30); -- 错误,违反联合主键约束

13.4 域完整性

/*
    域完整性约束
      数据类型约束(必填)

      非空约束
         非空特点:添加数据的时候,不能为null
         非空语法:字段名 数据类型 not null

      默认值约束
         默认值特点:这一列数据如果不添加,则默认值生效
         默认值语法: 字段名 数据类型 default '默认值'

*/
drop table if exists user;
create table user(
  id int primary key auto_increment,
  name varchar(20) not null,
  age int
)
insert into user (name,age) values (null,33); -- 错误,违反非空约束
drop table if exists user;
create table user(
  id int primary key auto_increment,
  name varchar(20) default '宋小宝',
  age int
) 
insert into user (name,age) values (null,33); -- 注意:默认值不生效
insert into user (age) values (33); -- 默认值生效

13.5 引用完整性

引用完整性约束:

  • 外键约束
  • 语法:foreign key
  • 特点
  • 主表中有的从表中可以没有
  • 主表中没有的从表中不能有(从表中修改、增加)
  • 删除主表数据要保证从表中没有(主表中删除)
  • 总结:在实战开发中,如果能不使用外键的尽量就不使用外键。使用逻辑外键
/*
  引用完整性约束(在实际开发,如果能够不使用外键约束就不使用,我们可以使用逻辑外键)
    引用完整性约束:指的是多张表之间的引用约束
    主表(dept:主键)    从表(emp:外键)
        外键约束
       特点:
         1、主表中有的从表中可以没有,但是主表没有的从表一定不能有
         2、删除主表中的数据的时候,要保证从表没有与之关联的数据
         3、修改从表中数据的时候。要保证主表中存在
            
            语法:
        constraint 外键约束的名称 foreign key(外键字段) references 关联表(关联字段)

*/


drop table if exists tb_dept;
create table tb_dept(
  deptno int primary key,
  dname varchar(30),
  location varchar(30)
);

drop table if exists tb_emp;
create table tb_emp(
  empno int primary key,
  ename varchar(30),
  job varchar(30),
  deptno int,
  constraint fk_dept_emp foreign key(deptno) references tb_dept(deptno)
)
insert into tb_dept values(100,'开发部','金融港');
insert into tb_dept values(101,'人事部','光谷广场');
insert into tb_emp values(6666, 'jack','java开发',20000); -- 错误,违反了外键约束

insert into tb_emp values(6666, 'jack','java开发',100);
delete from tb_dept where deptno = 100; -- 错误,违反了外键约束
update tb_emp set deptno = 102 where empno = 6666;

14 权限管理【了解】

  • 创建用户
  • 语法:create user 用户名 identified by 用户密码
  • 用户授权
  • 语法:grant 权限名称(select、update、insert、alter、create…) on 数据库.数据表 to 用户
  • 回收权限
  • 语法:revoke 权限名称(select、update、insert、alter、create…) on 数据库.数据表 from 用户
  • 删除用户
  • 语法: drop user 用户名
-- 创建用户
create user 'cxk' identified by '123456';

-- 授权
-- grant all(select、delete、update、select、create、drop..) on *.* to 用户
-- *.* 所有表
grant select on java2108.emp to 'cxk'

-- 回收权限
-- revoke all on *.* from 用户
revoke select on java2108.emp from 'cxk';

-- 删除
-- drop user if exists 用户
drop user if exists 'cxk'

15 视图【了解】

15.1 概念

视图,虚拟表,从一个表或多个表中查询出来的表,作用和真实表一样,包含一系列带有行和列的数据。视图中,用户可以使用SELECT语句查询数据,也可以使用INSERT,UPDATE,DELETE修改记录,视图可以使用户操作方便,并保障数据库系统安全。

15.2 视图特点

  • 优点
  • 简单化,数据所见即所得。
  • 安全性,用户只能查询或修改他们所能见到得到的数据。
  • 逻辑独立性,可以屏蔽真实表结构变化带来的影响。
  • 缺点
  • 性能相对较差,简单的查询也会变得稍显复杂。
  • 修改不方便,特变是复杂的聚合视图基本无法修改。

15.3 视图的创建

语法:CREATE VIEW 视图名 AS 查询数据源表语句;

15.3.1 创建视图

-- 创建视图
create view myView as (select empno,ename,job,mgr,hiredate,deptno from emp)


15.3.2 使用视图

-- 查询视图
select * from myView;

15.4 视图的修改

  • 方式一:CREATE OR REPLACE VIEW 视图名 AS 查询语句
  • 方式二:ALTER VIEW 视图名 AS 查询语句

15.4.1 修改视图

-- 修改视图
-- 方式1:
create or replace view myView as((select empno,ename,job,hiredate,deptno from emp))
-- 方式2:
alter view myView as ((select empno,ename,hiredate,deptno from emp))

15.5 视图的删除

DROP VIEW 视图名

15.5.1 删除视图

-- 删除视图
drop view if exists myView;


  • 注意:删除视图不会影响原表

15.6 视图的注意事项

  • 注意:
  • 视图不会独立存储数据,原表发生改变,视图也发生改变。没有优化任何查询性能。
  • 如果视图包含以下结构中的一种,则视图不可更新
  • 聚合函数的结果
  • DISTINCT 去重后的结果
  • GROUP BY 分组后的结果
  • HAVING 筛选过滤后的结果
  • UNION、UNION ALL 联合后的结果

16 事务【理解】

16.1 事务的概念

**事务(transaction)**是一个原子操作。是一个最小执行单元。可以由一个或多个SQL语句组成,在同一个事务当中,所有的SQL语句都成功执行时,整个事务成功,有一个SQL语句执行失败,整个事务都执行失败。

16.2 事务的边界

  • 开始:连接到数据库,执行一条DML语句。 上一个事务结束后,又输入了一条DML语句,即事务的开始
  • 结束:
    1). 提交:
    a. 显示提交:commit;

b. 隐式提交:一条创建、删除的语句,正常退出(客户端退出连接);

2). 回滚:

a. 显示回滚:rollback;

b. 隐式回滚:非正常退出(断电、宕机),执行了创建、删除的语句,但是失败了,会为这个无效的语句执行回滚。

16.3 事务的原理

数据库会为每一个客户端都维护一个空间独立的缓存区(回滚段),一个事务中所有的增删改语句的执行结果都会缓存在回滚段中,只有当事务中所有SQL 语句均正常结束(commit),才会将回滚段中的数据同步到数据库。否则无论因为哪种原因失败,整个事务将回滚(rollback)。

16.4 事务的特性

  • Atomicity(原子性)

一个事务不可分割,要么一起执行成功,要么一起失败

  • Consistency(一致性)

事务操作的前后要保证的数据的一致

  • Isolation(隔离性)

一个事务的操作不能影响到另一个事务的执行

  • Durability(持久性)

一个事务操作完成对数据库的影响是永久

16.5 事务应用

应用环境:基于增删改语句的操作结果(均返回操作后受影响的行数),可通过程序逻辑手动控制事务提交或回滚

  • 事务完成转账
#A 账户给 B 账户转账。
#1.开启事务
set autocommit=0;  #禁止自动提交 set autocommit=1;#开启自动提交
#2.事务内数据操作语句
UPDATE ACCOUNT SET MONEY = MONEY-1000 WHERE ID = 1;
UPDATE ACCOUNT SET MONEY = MONEY+1000 WHERE ID = 2;
#3.事务内语句都成功了,执行 COMMIT;
COMMIT;
#4.事务内如果出现错误,执行 ROLLBACK;
ROLLBACK;
  • 注意:开启事务后,执行的语句均属于当前事务,成功再执行 COMIIT,失败要进行 ROLLBACK

16.6 事务的并发问题

  • 1、脏读:事务A读到事务B没有提交的数据
  • 2、不可重复读:事务A在同一个事务中,因为事务B修改了数据并提交,造成两次读取到的数据不一致
  • 3、幻读:事务A在同一个事务中,因为事务B新增了数据并提交,如果事务A修改数据,会出现多修改了一条数据,出现幻觉

16.7 如何解决事务并发问题

通过设置事务隔离级别可以解决以上问题

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)—Oracle默认的隔离级别
可重复读(repeatable-read)—MySQL默认隔离级别,幻读一般是可以接受的
串行化(serializable)–效率低

16.8 演示问题

  • 查看当前数据库的隔离级别
  • select @@tx_isolation;
  • 修改当前数据库的隔离级别
  • set session transaction isolation level 隔离级别
  • eg: set session transaction isolation level repeatable read;

17 SQL语言的分类

17.1 SQL语言分类

  • 数据查询语言DQL(Data Query Language):select、where、order by、group by、having 。【重要】
  • 数据定义语言DDL(Data Definition Language):create、alter、drop。
  • 数据操作语言DML(Data Manipulation Language):insert、update、delete 。 【重要】
  • 事务处理语言TPL(Transaction Process Language):commit、rollback 。 【重要】
  • 数据控制语言DCL(Data Control Language):grant、revoke。

补充 :

T,失败要进行 ROLLBACK**

16.6 事务的并发问题

  • 1、脏读:事务A读到事务B没有提交的数据
  • 2、不可重复读:事务A在同一个事务中,因为事务B修改了数据并提交,造成两次读取到的数据不一致
  • 3、幻读:事务A在同一个事务中,因为事务B新增了数据并提交,如果事务A修改数据,会出现多修改了一条数据,出现幻觉

16.7 如何解决事务并发问题

通过设置事务隔离级别可以解决以上问题

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)—Oracle默认的隔离级别
可重复读(repeatable-read)—MySQL默认隔离级别,幻读一般是可以接受的
串行化(serializable)–效率低

16.8 演示问题

  • 查看当前数据库的隔离级别
  • select @@tx_isolation;
  • 修改当前数据库的隔离级别
  • set session transaction isolation level 隔离级别
  • eg: set session transaction isolation level repeatable read;

17 SQL语言的分类

17.1 SQL语言分类

  • 数据查询语言DQL(Data Query Language):select、where、order by、group by、having 。【重要】
  • 数据定义语言DDL(Data Definition Language):create、alter、drop。
  • 数据操作语言DML(Data Manipulation Language):insert、update、delete 。 【重要】
  • 事务处理语言TPL(Transaction Process Language):commit、rollback 。 【重要】
  • 数据控制语言DCL(Data Control Language):grant、revoke。

补充 :

    相关实践学习
    如何快速连接云数据库RDS MySQL
    本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
    全面了解阿里云能为你做什么
    阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
    目录
    相关文章
    |
    2月前
    |
    XML Java 数据库连接
    性能提升秘籍:如何高效使用Java连接池管理数据库连接
    在Java应用中,数据库连接管理至关重要。随着访问量增加,频繁创建和关闭连接会影响性能。为此,Java连接池技术应运而生,如HikariCP。本文通过代码示例介绍如何引入HikariCP依赖、配置连接池参数及使用连接池高效管理数据库连接,提升系统性能。
    68 5
    |
    24天前
    |
    NoSQL Java 关系型数据库
    Liunx部署java项目Tomcat、Redis、Mysql教程
    本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
    116 26
    |
    2月前
    |
    JSON Java 关系型数据库
    Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
    在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
    112 4
    Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
    |
    28天前
    |
    JavaScript 安全 Java
    java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
    基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
    |
    2月前
    |
    关系型数据库 MySQL Java
    MySQL索引优化与Java应用实践
    【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
    55 2
    |
    2月前
    |
    监控 前端开发 Java
    【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
    该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
    |
    2月前
    |
    Java 数据库连接 数据库
    深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
    在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
    50 1
    |
    11天前
    |
    存储 Oracle 关系型数据库
    数据库传奇:MySQL创世之父的两千金My、Maria
    《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
    39 3
    |
    11天前
    |
    安全 关系型数据库 MySQL
    MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
    《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
    41 3
    |
    11天前
    |
    SQL 关系型数据库 MySQL
    数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
    《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
    53 2