文章目录

  • 数据库入门
  • 数据库概念
  • 理解中的数据库:
  • 实际可视化中的数据表:
  • 在数据库的操作:
  • 在没有数据的情况时候我们操作数据的方式:
  • 在有数据库的时候我们操作数据的方式:
  • 数据库的组成:
  • 数据库管理系统(DBMS):
  • 实体类和数据库表的关系:
  • 传统数据库(关系型数据库):表与表之间是存在关系
  • 非关系型数据库:
  • mysql的学习
  • mysql数据库连接的方式:
  • mysql 安装:
  • 连接数据库的方式:今天主要使用shell窗口
  • 普通的shell窗口:
  • 修改mysql密码:
  • 对数据库的操作
  • sql语句分类:
  • 数据库中的数据类型:(部分)
  • DDL:对数据库表的操作
  • DML:对数据的操作,增加 删除 修改
  • DQL:查询后回形成伪表,并不会改变数据
  • sql语句的规范:
  • 分页查询原理:


数据库入门

数据库概念

存数据的一个仓库(大量的数据),其实底层还是使用文件来进行存

理解中的数据库:

数据库: 是一个文件夹 => 数据表在数据库 ==》数据由数据库进行管理,存放
数据表: 文件夹里的文件

实际可视化中的数据表:

数据表:显示就是一个二维的表格
包含三大要素: 表名 行 与列

在数据库的操作:

就是增删改查 (不需要去关键底层如何实现,只需要关注一些指令)

作用:使对数据的操作更加高效,相对于java原始的操作数据流。

在没有数据的情况时候我们操作数据的方式:

我们操作数据,都是使用java通过流的形式对数据进行操作,但是过程繁杂,代码量庞大

java读取文件和数据库的区别 javaweb读取数据库表内容_java读取文件和数据库的区别

在有数据库的时候我们操作数据的方式:

我们只需使用java代码对数据库发送相应的指令给数据,处理数据的这个过程交给数据库就可以获取我们想要的结果。

java读取文件和数据库的区别 javaweb读取数据库表内容_表名_02

数据库的组成:

数据库的组成: 一个是客户端 一个是服务器

客户端 : dos , sqlyarn , 类似于 眼睛 耳朵

作用:1.发送指令 2.接受数据,显示数据

服务器:(主要是由空间,可以连接外网,都可以当做一台服务器)电脑 或主机,类似人的大脑

作用: 1.接受指令 2.处理指令 3.返回相应的数据

java读取文件和数据库的区别 javaweb读取数据库表内容_数据库_03

数据库管理系统(DBMS):

DBMS:管理数据库的系统

1.更好的去管理数据以及数据库

2.对指令的处理

3.数据库:只需要做数据存储: 减轻数据库服务器的压力

java读取文件和数据库的区别 javaweb读取数据库表内容_java读取文件和数据库的区别_04

实体类和数据库表的关系:

实体类和数据库表的关系:实体类就是数据库表在代码中实际映射,实体类是和数据库表一一对应的

表名 =>类名

列=>属性

每一行数据对应一个对象


java读取文件和数据库的区别 javaweb读取数据库表内容_数据库_05

传统数据库(关系型数据库):表与表之间是存在关系

mysql: 1.免费 2.开源 3. 轻量级 (学习的重点)

orcle 收费的,性能非常好,保证数据安全,数据快(学习重点)

DB2 收费,性能好

sqlserver c# 微软

sqlite 移动端的数据库 存数据比较少

非关系型数据库:

hbase(列族来存) ,redis(以键值对来进行存)==>表与表之间不存在关系 ,可以存的数据量比关系型数据库更大

java读取文件和数据库的区别 javaweb读取数据库表内容_java读取文件和数据库的区别_06

mysql的学习

mysql数据库连接的方式:

1.dos(系统自带) 2.sqlyarn (可视化工具)等

mysql 安装:

注意问题:

1.要注意端口号3306

2.注意设置编码格式 utf-8

3.记住root的密码(root用户是超级用户,权限基本上都有)

连接数据库的方式:今天主要使用shell窗口

普通的shell窗口:

1.本地连接的方式 :mysql -u用户名 -p密码

2.远程连接的方式: mysql -hIP地址 -u用户名 -p密码 (公司一般远程连接)

  • 手动关闭数据库服务指令:(都必须使用管理员shell窗口)

net stop (数据库名) 如 MYSQL57

  • 手动启动数据库服务指令

net start (数据库名)如MYSQL57

注意点: 都需要开启mysql服务(mysql一般是自动开启) 快捷键:ctrl+alt+delete

java读取文件和数据库的区别 javaweb读取数据库表内容_数据库_07

修改mysql密码:

1.进入mysql中

2.切换到mysql

3.修改语句 update user set passwrod =“修改的密码” where user=“用户名”

对数据库的操作

  • 对数据库的操作:写sql语句(结构化查询语言(就类似于普通,基本数据库都能够使用))

sql语句分类:

  • DDL :对库,表结构进行操作,不会修改表里的数据 常用的关键件 alter rename …
  • DML:对数据库的操作:数据库的数据会发生变化 insert(增加) update(修改) delete(删除) 不包含查询
  • DQL : 查询数据库的数据==>数据库的数据是不会发生改变==>相当于形成了一张伪表
  • DCL : 对权限,以及用户的增加与删除的控制,(管理员)

数据库中的数据类型:(部分)

  • int(整数)
  • double(小数)
  • char(类似String)=>固定的字节
  • varchar(长度可变,类似于Stringbuffer)
  • Text(大文本) 文章
  • blob 存二进制(图片,视频) java一般图片都存的是地址
  • date : yyyy–MM-dd
  • time: HH:mm:ss
  • dateTime: yyyy–MM-dd HH:mm:ss
DDL:对数据库表的操作

创建数据库 :create database + 数据库的库名

mysql> create database student;
Query OK, 1 row affected (0.00 sec)

创建数据库的时候设置其编码格式 :create database + 数据库的库名 + character set +编码格式

mysql> create database student character set utf8;
Query OK, 1 row affected (0.00 sec)

查看数据库的编码格式: show create database+数据库的库名

mysql> show create database student;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| student  | CREATE DATABASE `student` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.03 sec)

删除数据库: drop database +数据库库名(不要把数据库默认的库删除了)

mysql> drop database student;
Query OK, 0 rows affected (0.00 sec)

查看所有的数据库:show databases;

mysql> show databases;

使用数据库:use +库名(在创建表格前要确认使用哪个数据库)

mysql> use student;
Database changed

创建表:create table +表名(
列名1 数据类型(长度),
列名2 数据类型(长度),
列名…n 数据类型(长度)
);

1.注意点:最后一个列名不需要加逗号

2.要切换到具体的库

mysql> create table user(
    -> u_id int (10),
    -> u_sex char(2),
    -> u_tel varchar(20)
    -> );
Query OK, 0 rows affected (0.02 sec)

在表中增加一列 :alter table 表名 add 列名(长度)

mysql> alter table user add u_age int(100);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

查看表结构: desc 表名

mysql> desc user;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| u_id  | int(10)     | YES  |     | NULL    |       |
| u_sex | char(2)     | YES  |     | NULL    |       |
| u_tel | varchar(20) | YES  |     | NULL    |       |
| u_age | int(100)    | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)

修改具体列的类型的约束:alter table + 表名 modify 列名(长度)

mysql> alter table user modify u_age varchar(50);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

修改整个列名: alter table +表名 change 旧的列名 新的列名(长度);

mysql> alter table user change u_age  new_age varchar(15);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

删除列: alter table 表名 drop 列名

mysql> alter table user drop new_age;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

修改表的名称:alter table 表名 rename +新的表名 || rename table +旧表名 to +新的表名

mysql> alter table user  rename new_user;
Query OK, 0 rows affected (0.01 sec)
mysql> rename table new_user to user;
Query OK, 0 rows affected (0.01 sec)

查看当前库里的所有的表: show tables

mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| user              |
+-------------------+
1 row in set (0.03 sec)

设置表的编码格式: alter table +表名 character set 编码格式

mysql> alter table user character set utf8;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

查看表的编码格式: show create table + 表名

mysql> show create table user;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                             |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| user  | CREATE TABLE `user` (
  `u_id` int(10) DEFAULT NULL,
  `u_sex` char(2) DEFAULT NULL,
  `u_tel` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.05 sec)

mysql使用总结:

  1. 创建一个库,查询所有的库
  2. 给库设置编码格式(查看库的编码格式)
  3. 切换具体库
  4. 创建一张表
  5. 新建一个字段
  6. 修改字段的约束
  7. 修改一列
  8. 删除这一列
  9. 查看表结构
  10. 修改表名
  11. 查看所有的表
  12. 给表设置编码格式
  13. 查看表的编码格式
DML:对数据的操作,增加 删除 修改

增加:

第一种写法: insert into 表名(“列名1”,“列名2”,“列名3”)values(值1,值2,值3); (写列名)

mysql> insert into user(u_id,u_sex,u_tel) values(1,"男","123456789");
Query OK, 1 row affected (0.01 sec)

第二种写法:(不用列名)insert into 表名 values(值1,值2,值3,值n); 默认插入所有的数据,从第一列开始

mysql> insert into user values(2,"女","123457777789");
Query OK, 1 row affected (0.01 sec)

插入多条数据:insert into 表名 values(值1,值2,值3,值n),(值1,值2,值3,值n),n个();

mysql> insert into user values(4,"女","123457777789"),(3,"男","1123132132");
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

注意事项: 1.列与插入值的对应上
2.插入值的范围不能超过其设置的长度
3.数字类型不用加引号,字符串类型加双引号或单引号, 时间类型加单引号

删除:

  1. delete from 表名 where 条件 ==>删除指定条件的数据
mysql> delete from user where u_id=1;
Query OK, 1 row affected (0.00 sec)
  1. delete from 表名 ==》全部删除表的内容,但是如果有自增的索引不会被重置为0
mysql> delete from user;
Query OK, 3 rows affected (0.01 sec)
  1. truncate 表名 =>删除清空数据,并且会删除表结构 ==>也就等同于先删除这张表,再重新构建一张表,如果有设置自增,则会把自增的索引重置为0

修改:update 表名 set 列名1=“值1”,列名=“值2” where 条件

mysql> update user set u_sex ="女" where u_id=1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

注意事项:

  1. 一定要指定条件,否则就回修改所有
  2. 要修改的列与值要对应
  3. 修改值的范围不能超过其长度
  4. 数字类型用加引号,字符串类型加双引号, 时间类型加单引号
DQL:查询后回形成伪表,并不会改变数据

对单表的查询操作:

#创建商品表:
CREATE TABLE product(
	pid INT PRIMARY KEY,#主键ID
	pname VARCHAR(20),#商品名称
	price DOUBLE,#商品价格
	category_name VARCHAR(32)#商品分类名称
);

INSERT INTO product(pid,pname,price,category_name) VALUES(1,'联想电脑',5000,'电脑办公');
INSERT INTO product(pid,pname,price,category_name) VALUES(2,'海尔电脑',3000,'电脑办公');
INSERT INTO product(pid,pname,price,category_name) VALUES(3,'雷神电脑',5000,'电脑办公');

INSERT INTO product(pid,pname,price,category_name) VALUES(4,'JACK JONES',800,'服装');
INSERT INTO product(pid,pname,price,category_name) VALUES(5,'真维斯',200,'服装');
INSERT INTO product(pid,pname,price,category_name) VALUES(6,'花花公子',440,'服装');
INSERT INTO product(pid,pname,price,category_name) VALUES(7,'劲霸',2000,'服装');

INSERT INTO product(pid,pname,price,category_name) VALUES(8,'香奈儿',800,'女士用品');
INSERT INTO product(pid,pname,price,category_name) VALUES(9,'相宜本草',200,'女士用品');
INSERT INTO product(pid,pname,price,category_name) VALUES(10,'面霸',5,'女士用品');

INSERT INTO product(pid,pname,price,category_name) VALUES(11,'雪碧',56,'饮料饮品');
INSERT INTO product(pid,pname,price,category_name) VALUES(12,'香飘飘奶茶',1,'饮料饮品');

INSERT INTO product(pid,pname,price,category_name) VALUES(13,'iPhone9',8000,NULL);
#查询product表中所有记录  所有的使用* 
     语法:  select *  from 表名 
     select * from   product

#查询product表中pid和pname字段
     语法:select  列名,列名   from    表名
     select pid,pname from  product;
 
#查询product表中所有的电脑办公记录
     语法:select * from  表名 where  条件
     select * from  product  where categroy_name="电脑办公";
   
#查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.
     语法:select  列名+10 from   表名
      select price+10  from  product;
 
#设置别名关键字 按as(可以不写) ==>设置别名可以给表设置,也可以给列设置别名(表与表之间存在关系,使用的比较多)
  给表设置别名  :select * from  表名 as s
  去除重复的关键字是: distinct
  去除价格重复
     select  distinct price  from  product;
   
#======================== 根据条件来进行查询=====================
 
#查询商品名称为“花花公子”的商品所有信息:
select * from   product  where pname="花花公子";

#查询价格为800商品
select * from  product  where price=800;

#查询价格不是800的所有商品
1.第一种写法:select  * from  product  where  price !=800;
2.第二种写法:select * from product where not(price=800);

#查询商品价格大于60元的所有商品信息
 select  * from    product  where price>60;

#查询商品价格在200到1000之间所有商品
1. select  * from  product  where price>=200  and   price<=1000;
2.使用的关键字是 between ... and ==> select * from  product  where price  between 200 and 1000(包头包尾)
3.select  * from  product  where price>=200  &&   price<=1000;

#查询商品价格是200或800或者2000的所有商品
1.select * from  product where price=200 || price =800||price=2000;
2.select* from  product  where  price=200 or price =800 or price=2000; ==>使用的关键字是or
3.select  * from  product where price in(200,800,2000);   ==>使用的关键字是in

#查询含有'霸'字的所有商品    模糊查询的两个符号 %==》匹配一个或者是多个 _匹配一个字符 like(像)
select * from  product  where pname like "%霸%"

#查询以'香'开头的所有商品
select * from  product  where pname like "香%";

#查询第二个字为'想'的所有商品
select * from product  where pname like "_想%";

#商品没有分类的商品   注意点  is null  ="" 不一样
select  * from  product  where category_name="";   is null 表示插入的时候,没有插入数据
select * from  product  where category_name is null

#查询有分类的商品
select * from  product  where  category_name  is not null;

#分页查询 limit?,?  ==>? 表示数据的索引这个索引是从0 开始, (当前页-1)*页量    ?每页显示的页量  ,算法分页limit的两个参数的算法:第一个参数:(当前页-1)*页量 ,第二个参数:页量 
select * from product limit0,2;


#排序:关键字order by     ASC升序 desc降序==>  淘宝店的销售量
#1.使用价格排序(降序)
 select   *  from  product   order  by   price  desc; 

#2.在价格排序(降序)的基础上
#若价格相同,相同价格的数据以pid降序排序

select * from  product  order by price desc, pid desc;

#查询出 价格(去掉重复的)     以价格进行降序排列
 
select distinct price from product order by price desc;

#聚合函数: 
#count(* 或者是 1 或者列名)==>查询出总记录数   
#MAX(列名)==>最大值  
#MIN(列名)==>最小值    
#SUM(列名)==>总和  
#AVG(列名)==>平均数
 

#1 查询商品的总条数
 select  count(1) from product;
#查看商品总价格、最大价格、最小价格、价格的平均值
select SUM(price),MAX(price),MIN(price),AVG(price)  from product;
#2 查询价格大于200商品的总条数 
 select  count(1) from product where price>200
#3 查询分类为'电脑办公'的所有商品的总记录
 select  count(1) from product where  category_name="电脑办公";
#4 查询分类为'服装'所有商品的平均价格
    select  avg(price) as "平均数" from product where  category_name="服装";

#分组:group by +分组的条件
# 统计各个分类下商品的个数
 select category_name,count(1)  from product group by   category_name;

#统计各个分类商品的个数,有且 只显示分类名称不为空值的数据
select category_name,count(1)  from  product group by  category_name having   category_name is not null;

#统计各个分类商品的个数,有且只显示分类名称不为空值的数据 降序排列  + 加分页取前两条数据

select category_name,count(1) as s  from  product group by  category_name having   category_name is not null  order by  s desc limit 0,2;


   #分组的条件关键字having    
   #where      ===相同点都是用于过滤  
  # 区别: having  是在分组的后面进行过滤(group by 一般having进行搭配使用)   
  #       where 是在分组的前面的过滤   

 #查询语句书写的规范: select  *  from  + 表名 +where 条件 +group by(分组)+having(过滤)+order by(排序)+limit(分页)

 #备份: 1.通过sql语句备份 dos 窗口 mysqldump  -u用户名 -p密码 数据库的苦命>路径(d:/aa.sql); 1.一点不要加分号  2.不能进mysql进行备份
 #还原 : 2. mysql -u用户名 -p密码  数据库<路径(d:/aa.sql); 1.数据库在存在    2.一点不要加分号  3.不能进mysql进行备份

sql语句的规范:

1.可以存在多行,每一行sql以分号结尾
2.不区别大小写(html 但是一般建议小写) 关键字一般建议大写,其它的小写
3.数据库的命名一般以db结尾 stuent_db

分页查询原理:

java读取文件和数据库的区别 javaweb读取数据库表内容_mysql_08

-- 查询练习  1------------ 

CREATE TABLE stu (
	sid	CHAR(6),
	sname		VARCHAR(50),
	age		INT,
	gender	VARCHAR(50)
);

INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');
INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male');
INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');
INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male');
INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female');
INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male');
INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female');
INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male');
INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female');
INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);




--  查询性别为女,并且年龄大于等于50的记录
SELECT * FROM stu WHERE age>=50 AND gender="female"
--  查询学号为S_1001,或者姓名为liSi的记录
SELECT * FROM stu WHERE sid="S_1001" OR sname="liSi"
--  查询学号为S_1001,S_1002,S_1003的记录
SELECT * FROM stu WHERE sid="S_1001" OR sid="S_1002" OR sid="S_1003"
--  查询学号不是S_1001,S_1002,S_1003的记录
SELECT * FROM stu WHERE sid NOT IN ("S_1001","S_1002","S_1003")
--  查询年龄为null的记录
SELECT * FROM stu WHERE age IS NULL 
--  查询年龄在20到40之间的学生记录
SELECT * FROM stu WHERE age>=20 AND age<=40
--  查询性别非男的学生记录
SELECT * FROM stu WHERE NOT gender="male"
--  查询姓名不为null的学生记录
SELECT * FROM stu WHERE  sname IS NOT NULL 
--  查询姓名由5个字母构成的学生记录
SELECT * FROM stu WHERE sname LIKE "_____"
--  查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
SELECT * FROM stu WHERE sname LIKE "____i"
--  查询姓名以“z”开头的学生记录
SELECT * FROM stu WHERE sname LIKE "z%"
--  查询姓名中第2个字母为“i”的学生记录
SELECT * FROM stu WHERE sname LIKE "_i%"
--  查询姓名中包含“a”字母的学生记录
SELECT * FROM stu WHERE sname LIKE "%a%"