《疯狂Java讲义》读书笔记7

news2025/1/15 22:40:52

Navicat快捷键

刷新:Fn+F5

表内容页面打开表设计页面:Ctrl+D

打开 MYSQL 命令行窗口:Fn+F6

MYSQL 增减查改

create table student(
	stuid int not null auto_increment primary key,
	stuname varchar(200),
	stustatus varchar(100)
);
create table grade(
	gradeid int not null auto_increment primary key,
	stuid int not null,
	gradecourse varchar(100),
	gradescore varchar(100)
);
#增加
insert into student(stuname,stustatus)values('Han Li','Normal');
insert into student(stuname,stustatus)values('Gura kench','Normal'),('yiying Zhang','Normal'),('Saburner Wang','Normal');

insert into grade(stuid,gradecourse,gradescore)values(2,'Econ 101','A');


#删除
delete from student where stuid=1;
delete from student;


#修改
update  student set stuname='Dae Hung',stustatus ='Dropped' where stuid=5;


#查询
#从student中查询所有的列和行
select * from student;
#查询某一个ID
select * from student where stuid=5;
#查询某一个字段
select stuname,stustatus from student where stuid=5;
#查询学生个数
select count(*)from student;
#从两个表中查
select stuname,student.stuid,gradecourse,gradescore from student,grade where student.stuid=5;
#去除表格列中的重复元素的查询
select distinct grade from student;


#清空表内的数据,并且重置自增列
truncate table student;
#清楚表内的数据,不会重置自增列
delete from student;
#直接把表删除,连带里面的数据
drop table student;


JDBC基础

全称是 Java Database Connectivity,即 Java 数据库连接,是一种可以执行 SQL 语句(SQL 是数据库标准查询语言)的 Java API。程序通过 JDBC API 连接到关系数据库,并使用结构化查询语言来完成结构化查询语言。

通过使用 JDBC,就可以使用同一种 API 访问不同的数据库系统

标准的 API 它们只是接口,没有提供实现类(驱动程序)。

程序员使用 JDBC 是只要面向标准的 JDBC API 编程即可,当需要再数据库之间切换时,只需要更换不同的实现类。

JDBC 比 ODBC 安全性更高,更容易部署。

 JDBC 可以完成以下的三个操作:

  • 建立与数据库的连接
  • 执行 SQL 语句
  • 获得 SQL 语句的执行结果

SQL语法

SQL 语句是对所有关系库都通用的命令语句,而 JDBC API 是执行 SQL 语句的工具,JDBC 允许对不同的平台、不同的数据库采用相同的编程接口来执行 SQL 语句。

除标准的 SQL 语句之外,所有数据库都会在标准 SQL 语句基础上进行扩展,增加一些额外的功能,这些额外的功能属于特定的数据库系统,不能在所有的数据库系统上通用。 

关系数据库的基本概念和 MYSQL 基本命令

常把数据库和数据管理系统(DBMS)统称为数据库,它既包括存储用户数据的部分,也包括管理数据库的管理系统。

DBMS 是所有数据的知识库,负责管理数据的存储、安全、一致性、并发、恢复和访问等操作。它有一个数据字典(系统表)用于存储它拥有的每个事务的相关信息,例如名字、结构、位置和类型,这种关于数据的数据被称为元数据。

  • 网状型数据库
  • 层次型数据库
  • 关系数据库
  • 面向对象数据库

用的最广泛的是关系数据库,关系数据库最基本存储单元室数据表,可以把数据库想象成大量数据表的集合(当时没有这么简单)。

数据表是存储数据的逻辑单元,可以把数据表想象成由行和列组成的表格,每一行被称为一条记录,每一列被称为一个字段。

数据库建表时,需要指定该表包含多少列,每列的数据类型信息,无须指定多少行(每行用于保存一个用户的数据)。

还应该为每个数据表指定一个特殊列,,可以唯一地标识此行的记录,该特殊列被称为主键列。 

MYSQL 数据库的一个实例可以同时包含多个数据库,可以用这个命令来查看当前实例下包含多少个数据库:

show databasses; 

如果用户创建新的数据库,可以用:

create database [ IF NOT EXISTS ] 数据库名;

如果用户需要删除指定数据库,可以用:

 drop database 数据库名;

建立数据库后,要操作该数据库(例如为该数据库建表,在该数据库中执行查询等操作),进入指定数据库可以用:

use 数据库名; 

进入指定数据库后,要查询该数据库下包含多少个数据表,可以用:

show tables; 

如果要查看指定数据表的表结构(有多少列,每列的数据类型等信息),可以用:

desc 表名; 

注意:MYSQL 默认以分号作为每条命令的结束符,每条 MYSQL 命令结束后都应该输一个分号。

执行上面的命令可以连接远程主机的 MYSQL 服务,可以先省略 -p后面的密码,后面会提示要输出密码。

通常无须指定数据表的存储机制,因为系统默认使用 InnoDB 存储机制。如果需要在建表时显式指定存储机制,可以在标准建表语法后添加下面的语句:

  • ENGINE=MYISAM——强制使用 MYISAM 存储机制
  • ENGINE=InnoDB——强制使用 InnoDB 存储机制

SQL 语句基础

标准的 SQL 语句可以操作任何关系的数据库,如下:

  • 在数据库中检索信息
  • 对数据库的信息进行更新
  • 改变数据库的结构
  • 更改系统的安全设置
  • 增加或回收用户对数据库、表的许可权限
  • 查询语句:主要由 select 关键字完成
  • DML 语句:主要由 insert、update 和 delete 三个关键字完成
  • DDL 语句:主要由 create、alter、drop 和 truncate 四个关键字完成
  • DCL 语句:主要由 grant 和 revoke 两个关键字完成
  • 事务控制语句:主要由 commit、rollback 和 savepoint 三个关键词完成

SQL 语句不区分大小写。

可能用到标识符:定义表名、列名,也可以用于定义变量等。

标识符的命名规则:

  • 通常必须以字母开头
  • 包括字母、数字和桑特殊字符(#_$)
  • 不要使用当前数据库系统中的关键字、保留字,通常使用多个单词连缀而成,单词之间以_分隔
  • 同一个外模式下的对象不应该同名

DDL 语句

DDL 语句是操作数据库对象的语句,包括创建(create)、删除(drop)和修改(alter)数据库对象。

因为存在上面几种数据库对象,所以 create 之后可以紧跟不同的关键字。

例如:建表应使用 create table,建索引应使用 create index,建视图应使用 create view……drop 和 alter 后也需要添加类似的关键字来表示删除、修改那种数据库对象。

创建表的语法

 create table [ 模式名. ] 表名

{

        #可以定义多个列定义

        colunmName1 datatype [default expr ],

        ...

}

花括号{}里可以包含多个列定义,每个列定义之间用英文逗号隔开,最后一个列定义以括号结束。

列定义由列名、列类型和可选默认值组成。将列名放在前面,列类型放在后面。如果要指定列的默认值,要使用 default 关键字,而不是用等号(=)。

create table test

{

        #整型常用 int

        test_id int,

        #小数点数

       test_price decimal,

        #普通长度文本,使用 default 指定默认值

        test_name varchar(255) default 'xxx',

        #大文本类型

        test_desc text,

        #test_desc text,

        #图片

        test_img blob,

        test_data datetime

;

上面的建表语句只是创建一个空表,没有任何数据,如果使用子查询建表语句,则可以在建表的同时插入数据。

子查询建表语句的语法:

create table [模式名.] 表名 [column[,column...]]

as subquery;

MYSQL 的一个 modify 命令不支持一次修改多个列定义。但是可以用圆括号把多个列定义括起来,可以在 alter table 后使用多个 modify 命令。

  • 从数据表中删除列的语法:(需要比较长的时间,因为删除后还需要回收空间)

#删除 hehe 表中的 aaa字段

alter table hehe

drop aaa;

删除列,在 drop 后面紧跟需要删除的列名:

#删除 hehe 表中的 aaa 字段

alter table hehe

drop aaa;

重命名数据表的语法格式:

alter table 表名

rename to wawa;

改变列名:

alter table 表名

修改列名使用 change 选项:

# 将wawa 数据表中的 bbb 字段重命名为 ddd

alter table wawa

change bbb ddd int;

删除表:

drop table 表名;

删除已有的 wawa 数据表删除:

drop table 表名;

  • 表结构被删除,表对象也不存在
  • 表里的所有数据被删除
  • 该表所有的相关引用、约束也被删除

用 truncate 表删除表的记录,但保留表结构:

truncate 表名

数据库约束

  1. 建表的同时为相应的数据列指定约束
  2. 建表后创建,以修改表的方式来增加约束

所有数据类型的值都可以是 null,包括 int、float、boolean 等数据类型

空字符串不为 null,0也不等于 null

  • NOT NULL 约束

确保指定列不为空。

  • UNIQUE 约束

用于保证指定列或指定组合不允许出现重复值,但是可以出现多个 null 值(可以放在 create table 语句中与列定义并列,也可以房子 alter table 语句中使用 add 关键字来添加约束定义)

create table unique_test
{
    #建立了非空约束,test_id不可以为 null
    test_id int not null,
    #unique就是唯一约束,使用劣迹约束语法建立唯一约束
    test_name varchar(255) unique;
};

[constraint 约束名] 约束定义 

为多行组合建立唯一约束,或者想自行指定约束名,就要用表级约束语法:(为 test_name 和 test_pass 分别建立唯一约束,这两列都不能出现重复值) 

#建表时创建唯一约束,使用表级约束语法建立约束
create table unique_teat2
{
    #建立了非空约束
    test_id int not null,
    test_name varchar(255),
    teat_pass varchar(255),
    #使用表级约束语法建立唯一约束
    unique (test_name),
    #使用表级约束语法建立唯一约束,而且指定约束名
    constraint test2_uk unique(test_pass)
};

这两列的组合不能重复: 

#建表时创建唯一约束,使用标记约束语法建立越是
create table unique_teat3
{
    #建立了非空约束
    test_id int not null,
    test_name varchar(255),
    test_pass varchar(255),
    #使用表级约束语法建立唯一约束,指定两列组合不能重复
    constraint test3_uk unique(test_name,test_pass)
};

也可以在修改表是使用 add 关键字增加唯一约束:

 #alter table unique_test3

add unique(test_name,test_pass);

在修改表是使用 modify 关键字,为单列采用列级约束语法增加唯一约束:

#unique test3表的 test_name列添加唯一约束

atler table unique_test3

modify test_test_name varchar(255) unique;

drop index test_uk;

 删除约束是在 alter table 语句后使用 “drop constraint 约束名”语法来完成,但 MYSQL 不使用这种方式:用 “drop index 约束名”的方式来删除约束

#删除 unique_test3表上的 test3_uk唯一约束

alter table unique_test3

drop index test3_uk;

  • PRIMARY KEY 约束

每一个表中最多运行有一个主键,这个主键约束可以有多个数据列组合,主键值表中能唯一确定一行记录的字段或字段组合。

同一个表中最多只能有一个主键约束。

  • FOREIGN KEY 约束

外键约束只要用于保证一个或两个数据表之间的参照晚自习,外键列的值必须在主键参照列的值的范围之内,或者为空。

当主表中的记录被从表参照时,主表记录不允许被删除,不行包从表参照该表的所有记录全部删除后才可以删除主表的该记录。

  • CHECK 约束

要求 emp_salary 大于0,但是这个要求实际上不会起作用。

索引

索引是存放模式中的一个数据库对象,总是从属于数据表,但是他也和数据表一样属于数据库对象,它的作用是加速对表的查询,减少了磁盘的I/O。

在数据字典中独立存放,但不能独立存在,必须属于某个表。

视图

  • 可以限制对视图的访问
  • 使复杂的查询变简单
  • 提供数据独立性
  • 提供对相同数据的不同显示

视图的本质是被命名的SQL查询语句。

创建视图:

create or replace view 视图名

as

subquery

删除视图:

drop view 视图名 

DML语句语法

DML 可以完成如下三个任务:

  1. 插入新数据
  2. 修改已有数据
  3. 删除不需要的数据
  • insert into 语句

用于向指定数据表中插入值的列名,value 后用括号列出对应要插入的值.

insert into table_name[(column[,colmn...])]

values(value [,value...]);

  • updata 语句

用于修改数据表的记录,每次可以修改多条记录,通过使用 where 自居限定修改哪些记录。

where 子句是一个条件表达式,相当与 if,只有符合条件才会被修改。

没有 where 子句意味着 where 表达式的值总是 true,该表所有记录都会被修改。

updata table_name

set column=value1[,column2=value2]...

[WHERE condition];

  • delete from 语句

用于删除指定数据表的记录,不需要指定列名,是整行删除。

只删除满足 where 条件的记录,没有 where 子句限定会将表里的全部记录删除

delete from table_name

[WHRER condition];

单表查询

select 语句是查询数据,可以执行单表和多表查询,还可以执行子查询。

它用于从一个或多个数据表选出特定行、特定列的交集。

select column1,column2...

from 数据库

[where condiion]

使用 distinct 取出重复行时,distinct 紧跟 select 关键字,它的作用是取出后面字段组合的重复值,而不管对应记录在数据库里是否重复。

SQL 中判断两个值相等的标记运算符是单等号,判断不相等的运算符是<>,赋值运算符不是等号,是冒号等号(:=)。

多表查询

可能会出现两个或者多个数据具有相同的列名,所以在这些同名的列名之前使用表面前缀作为限制。

JDBC 

常用接口

DriveManager:用于管理JDBC驱动的服务类

Connection:代表数据库连接对象

ResultSet:结果集对象

编程步骤

  1. 加载数据库驱动
  2. 获取数据库连接
  3. 通过Connection对象创建Statement对象
  4. 使用Statement执行SQL语句
  5. 操作结果集
  6. 回收数据库资源

管理结果集

JDBC使用ResultSet来封装查询到的结果,然后移动ResultSet的记录来取出结果集的内容。

可更新的结果集要满足:

  • 所有数据都来自于一个表
  • 选出的数据集不行包含主键列

使用连接池管理连接

一个数据库连接对象对应一个物理数据库连接,每次操作到打开一个物理连接,使用后立即关闭连接,频繁地打开关闭将造成系统性能地下。

一个数据库连接池的解决方案是:当程序启动时,系统主动建立足够的数据库连接,并将这些连接组成一个连接池。每次应用程序请求数据库连接时,不用重新打开连接,直接从连接池中取出已有的连接使用,使用完也不用关闭数据库连接,而是直接归还给连接池。

数据库连接池常用参数:

  • 数据库初始连接数
  • 连接池最大连接数
  • 连接池最小连接数
  • 连接池每次增加的容量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/428646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP/IP协议工作原理与工作流程

一、TCP/IP协议工作原理 1、OSI模型 使用OSI模型来描述一个网络中的各个协议层&#xff0c;如下&#xff1a; 2、理解TCP/IP协议 TCP/IP协议&#xff0c;英文全称Transmission Control Protocol/Internet Protocol&#xff0c;包含了一系列构成互联网基础的网络协议&#xff0…

本地部署ChatGLM-6B模型(使用JittorLLMs大模型推理库)

简介 网上冲浪时发现的这两个国产模型&#xff0c;重点是对硬件的要求并不高&#xff0c;有2GB内存就可以跑&#xff0c;觉得有趣就弄来玩了下。 https://github.com/Jittor/JittorLLMs https://github.com/THUDM/ChatGLM-6B 简单介绍下用到的仓库 ChatGLM-6B ChatGLM-6B 是…

有偏估计的发展及其在球谐函数拟合中的应用研究

有偏估计的发展及其在球谐函数拟合中的应用研究 阚昊宇 专业&#xff1a;大地测量与测量工程 学号&#xff1a;XXX 邮箱&#xff1a;XXX 电话&#xff1a;XXX 摘要&#xff1a;球谐函数在大地测量等领域具有重要意义&#xff0c;然而在观测量不多或空间分布不均匀时进行高阶…

视频编解码(一)之virtio-gpu环境搭建

一、基础概念 VA-API Video Acceleration API 是一组开源应用API接口&#xff0c;赋能应用&#xff08;比如VLC播放器、GStreamer等&#xff09;使用hardware video acceleration&#xff08;一般是GPU提供硬件视频加速功能&#xff09;&#xff0c;VA-API主要由开源库libva和…

机器学习算法系列(三)

机器学习算法之–对数几率回归&#xff08;逻辑斯蒂回归&#xff09;算法 上个算法&#xff08;算法系列二&#xff09;介绍了如何使用线性模型进行回归学习&#xff0c;但若要做的是分类任务&#xff0c;则需要找一个单调可微函数将分类任务的真实标记y与线性回归模型的预测值…

Scons自动大型系统构建工具

1、先了解一下make 在Linux系统上做过c/c++开发的同学们都知道一个项目工程管理工具:make和Makefile。 make 这个工具自上个世纪 70 年代 Stuart Feldman 在贝尔实验室开发出以来,就一直是类 UNIX 程序员的最爱之一。 通过检查文件的修改时间,make 工具可以知道编译目标文…

关于原子服务的思考

在我们以往的工作中经常会遇到“原子服务”或“原子化服务”的概念&#xff0c;如果没有一个清晰的概念边界&#xff0c;会使大家的沟通和讨论无法在同一个共识上展开&#xff0c;大家不在同一频道上&#xff0c;割裂于不同的领域空间&#xff0c;难以产生一致性的进展。那么&a…

SAR ADC系列26:系统设计

目录 串一下知识点&#xff1a; 设计一个高速异步SAR ADC 设计目标&#xff1a; 电路架构&#xff1a;&#xff08;具体电路看前文&#xff09; 采样网络&#xff1a; 采样电容&#xff1a; CDAC开关切换策略&#xff1a; CDAC阵列冗余设计&#xff1a; SAR 逻辑 比…

谈谈内存模型happen-before讲的什么?

大家好我是易安&#xff01; 今天我要讲述的是Java内存模型中的happen-before。 Java语言在设计之初就引入了线程的概念&#xff0c;以充分利用现代处理器的计算能力。多线程机制既带来了强大、灵活的优势&#xff0c;也带来了线程安全等令人混淆的问题。在这种情况下&#xff…

二叉查找树

目录 一、二叉查找树概念 二、结点内部类代码实现&#xff1a; 三、二叉查找树的插入原理​编辑 四、遍历的方式&#xff08;中序遍历&#xff09;&#xff1a; 五、二叉查找树实现指定值删除对应的结点 六、main方法测试 一、二叉查找树概念 二、结点内部类代码实现&…

聚类问题的算法总结

目录 一、K-means算法 1、算法原理 2、如何确定K值 3、算法优缺点 二、DBScan聚类 1、算法原理 2、处理步骤 3、算法优缺点 聚类代码实现 聚类算法属于无监督学习&#xff0c;与分类算法这种有监督学习不同的是&#xff0c;聚类算法事先并不需要知道数据的类别标签&am…

高效释放数据价值,数智融合平台有门道

在数字经济时代&#xff0c;数据上升为新的关键生产要素&#xff0c;逐渐超越土地、资本等传统要素&#xff0c;成为社会经济发展和企业创新更加重要的驱动力。 但如何充分释放数据价值在当下依然是一个世界性难题。一方面&#xff0c;企业与组织逐渐拥有海量数据规模和丰富应…

基于CBC、ECB、CTR、OCF、CFB模式的AES加密算法

1、什么是AES加密算法 什么是加密算法&#xff1f;我在文章《从个人角度看什么是加密算法》中描述了我对加密算法的一些浅薄的理解。我不是信息安全领域的大神&#xff0c;只求有一个入门罢了&#xff01; 这篇文章是文章《从个人角度看什么是加密算法》的延伸&#xff0c;所…

【C++初阶】:缺省函数和函数重载

c入门一.缺省函数二.函数重载1.参数类型不同2.参数个数不同3.参数顺序不同一.缺省函数 缺省函数&#xff0c;顾名思义就是可以在传参时不传或者少传参数的函数。这里举个例子&#xff1a; 完全缺省 上面的就属于全缺省&#xff0c;可以不传任何参数&#xff0c;当然也可以传参…

Codeforces Round 862 (Div. 2) -- D. A Wide, Wide Graph(树的直径 贪心 简单的树形dp)

题目如下&#xff1a; 题意简说&#xff1a; 树上两点 u,vu, vu,v&#xff0c;如果 u,vu, vu,v 的距离大于等于 kkk 则在图 GkG_kGk​ 上 u,vu, vu,v 有一条无向边。 求当 kkk 等于 [1, n] 的时候&#xff0c;图 GkG_kGk​ 的连通块数量。 思路 or 题解&#xff1a; 我们可以…

【服务器】Dell PowerEdge R750 安装GPU

各种教程 官方教程 https://www.dell.com/support/manuals/zh-cn/poweredge-r750/per750_ism_pub/%E5%AE%89%E8%A3%85-gpu?guidguid-6bb1c301-7595-4c6d-b631-b6a5761c6052&langzh-cn 手册PDF版&#xff1a; https://dl.dell.com/content/manual16153190-dell-emc-powe…

OKR与敏捷开发的结合

当你想达成某件事情时&#xff0c;你在内心会有一个设想的期望结果。这是一个非常简单、基本的概念&#xff0c;并且是从很多人小时候就培养起来的。我们可以将这种现象总结一句话&#xff1a; 通过 ________ 来衡量__________ 。 这就是 John Doerr 在其著作《Measure what Ma…

JavaWeb开发 —— Maven

目录 一、概述 1. 介绍 2. 安装 二、maven-idea 集成 1. 配置及创建Maven项目 2. IDEA 创建Maven项目 3. IDEA导入 Maven 项目 三、依赖管理 1. 依赖配置 2. 依赖传递 3. 依赖范围 4. 生命周期 一、概述 1. 介绍 ① Apache Maven 是一个项目管理和构建工…

【UDP报文和TCP协议特性】

目录1.UDP报文1.1报文长度1.2校验和2.TCP协议特性2.1确认应答2.2超时重传2.3连接管理2.3.1三次握手2.3.2四次挥手2.4滑动窗口2.5流量控制2.6拥塞控制2.7延时应答2.8捎带应答2.9面向字节流2.10异常情况3.小结3.1tcp小结3.2tcp和UDp应用场景的差异4.寄语1.UDP报文 udp是传输层最…

【Android】之【内存管理】

一、Android内存运行是如何运行的&#xff1f; 物理内存即移动设备上的ram&#xff0c;当启动一个android程序时&#xff0c;会启动一个dalvik vm进程&#xff0c;系统会给它分配固定的内存空间【16m,32m,64m,不定&#xff0c;没有统一标准&#xff0c;每个虚拟机会有堆内存阈…