目录

01.回顾

Linux相关命令

目录切换

目录操作

查看目录

文件操作

压缩包命令

其他命令

02.数据库概述和常见的数据存储方式

数据库概述

常见的存储数据方式

03.数据库管理系统,数据库和表的关系

**没完成**04. MySQL数据库安装-Linux版

在Linux服务器上安装MySQL软件

05.MySQL数据库安装-windows版

服务器

1. 下载

2. 安装

3. mysql多实例安装

客户端

06.windows版mysql启动关闭和连接

三种方式连上MySQL

sqlyog

07.sql概述和分类

sql作用和分类

sql语法

08. DDL操作数据库结构

操作数据库语法

09.操作表结构 创建和查看表

操作表语法

10.上午总结

11. DDL操作表结构-修改表(了解)和删除表

12. DDL字段类型

13. DML-添加数据信息

14.DML-修改和删除数据信息

15.小结和逻辑删除

16.DQL简单查询

17.DQL条件查询

准备数据

比较运算符

逻辑运算符

in关键字

范围

like模糊查询

匹配格式

其他

作业


01.回顾

  1. Linux:基于Unix的,直接运行在硬件之上的操作系统
  2. 安装与卸载:
  1. 虚拟机:Windows平台之上的一款软件,可以虚拟出多个独立空间
  1. 挂载:如果Linux系统需要装很多软件,自己操作比较麻烦的话,可以直接拷贝别人的Linux文件过来,然后点击里面的后缀名为vmx的文件双击,就可以将别人的操作系统挂载到自己的VMware。
  2. Linux目录系统:
  1. /:根,root用户的家目录
  2. home:普通用户的家目录(支持多用户登录和使用)
  3. usr:多用户共享目录
  4. etc:存放系统的配置文件

Linux相关命令

目录切换

cd ../ :上一级目录,进入上一层目录

cd.. :当前目录,运行可执行文件的时候需要

cd 目录: 相对于当前所在的目录,在当前目录下找子目录

cd /目录 :绝对定位,直接从根目录下找对应的目录

cd~:可以省略,切换到用户主目录 如果是管理员:切换到root目录, 如果是普通用户:切换到home/用户名

cd-:切换到上一个目录,相当于后退

目录操作

创建目录:

单层目录: mkdir 目录名

多个目录: mkdir 目录名A 目录名B

多层目录: mkdir -p A/B/C

修改目录名:mv 目录名 新名称

剪切目录:mv 目录名 新位置

删除目录:rm -rf 目录名 拷贝目录:cp -r 目录名 新位置

查看目录

命令: ls //查看文件

命令: ls -l //可以看到该目录下的所有目录和文件的详细信息===>简写ll

命令: ls -a //可以看到该目录下的所有文件和目录,包括隐藏的

文件操作

创建文件:touch 文件名

查看文件:cat/more/less/tail/head 文件名

打开文件:vim 文件名

进入文件编辑模式:按i/a/o

退出编辑模式:按esc

进入低行模式(最下面那行):按:

按wq(写入并退出)或q!(强制退出不保存)或wq!(强制写入并退出)

改名,拷贝与目录操作一致

压缩包命令

打包:tar -zcvf 压缩包名.tar.gz 被压缩的文件1......

解压:tar -xvf 压缩包名.tar.gz

解压到指定目录:tar -xvf 压缩包名.tar.gz -C 目标目录

其他命令

查看所有进程:ps -ef

管道查询:ps -ef | grep xxx

展示所在位置:pwd

查看端口使用情况:netstat -an

02.数据库概述和常见的数据存储方式

先学数据库,再学前端,然后学服务器

数据库概述

存储数据的仓库。

浏览器:即我们所说的前端,作用是展示。

服务器:即后台,作用是存储页面,存放执行业务逻辑的java代码。

数据库:java程序是否可以存储数据?

可以说不能:当程序停止后,内存会被释放,数据消失不见。

也可以说能:java程序中有序列化和反序列化的功能。

在java程序中有序列化,作用是把java的一个类序列化到硬盘进行永久保存。缺点是java程序序列化后的文件只有java程序能够读取和使用。不方便增删改查。

常见的存储数据方式

硬盘存储(关系型数据库)

优点:不会导致数据丢失

缺点:执行效率低(CPU加载数据来自内存,内存数据来自硬盘)

普通文件txt,excel...存储没有特定的数据格式,操作起来不方便。

MySQL数据库是硬盘数据库:将数据按照特定的格式存放,方便后期的使用(增删改查)

内存存储(非关系型数据库)

优点:存储速度快

缺点:当程序停止运行后,数据会丢失。

redis是内存数据库。

03数据库管理系统,数据库和表的关系

  1. 数据库管理系统(DBMS):MySQL软件
  2. database:本质是文件夹
  3. table:表,本质上是按照特定格式存储数据的文件
  4. 行:一行数据,描述一个对象的数据信息,一条记录对应一个Java类对象
  5. 列(字段):描述本列存放的数据信息。由字段名+字段类型组成。

**没完成**04 MySQL数据库安装-Linux版

注意:MySQL是数据库管理系统,真正的数据库是database

在Linux服务器上安装MySQL软件

05MySQL数据库安装-windows版

服务器

1. 下载

MySQL :: Download MySQL Installer

2. 安装

我们采用自定义安装模式:选择32位或64位

默认即可:

说明,如果没有该页面就上一步,选择高级选项:

安装完成

开始配置mysql

配置:

3. mysql多实例安装

使用安装器是无法安装多实例的,只能手动安装。

1、 复制安装好的3380文件夹到3381

2、 进入3381\logs目录下将所有文件删除

3、 进入3381\data目录,将所有的log文件删除(注意不是所有文件哦!)

4、 打开 my.ini 文件,将所有的 3380 替换为 3381

5、 修改serverid为81

6、 打开cmd,进入C:\mysql-5.6\3381\bin目录,执行如下命令: .\mysqld.exe install MySQL-3381 --defaults-file="C:\mysql-5.6\3381\data\my.ini" 注意改为自己的配置文件路径

7、 进入系统服务查看

8、 修改启动方式为手动,安装完成。

9、 如需删除服务执行如下命名即可: .\mysqld.exe remove MySQL-3381

客户端

下载SQLyog

06windows版mysql启动关闭和连接

关闭命令:net stop MySQL56

启动命令:net start MySQL56

访问:mysql -uroot -proot

mysql -h主机地址 -uroot -proot

连接Linux上的MySQL:mysql -h192.168.190.149(Linux的ip) -uroot -proot

三种方式连上MySQL

  1. dos命令(命令行):mysql -uroot -proot
  2. 客户端软件:sqlyog 输入用户名和密码连接
  3. java代码:Java程序(JDBC)

sqlyog

傻瓜式安装

  1. 点新建,名称随便写
  2. 输入主机地址,连接上

07sql概述和分类

sql作用和分类

作用:借助sql操作mysql管理系统

分类:

  1. DDL:数据定义语言。创建数据库,创建表,创建表中的字段
  2. DML:数据操作语言。操作表中的数据,增删改查
  3. DCL:数据控制语言。操作MySQL的用户,权限
  4. TCL:事务控制语言。操作MySQL中的事务
  5. DQL:数据查询语言。查询

sql语法

  1. SQL语句可以单行或者多行书写,必须以分号结尾
  2. 可使用空格和缩进来增强语句的可读性。
  3. MySQL数据库的SQL语句不区分大小写,建议大写,但是我们不听,我们小写
  4. 3种sql注释 --空格 # /**/

08 DDL操作数据库结构

在命令行中执行:

操作数据库语法


1.直接创建数据库(使用默认的编码方式) CREATE DATABASE 数据库名; 2.判断是否存在并创建数据库(了解) CREATE DATABASE IF NOT EXISTS 数据库名; 3.创建数据库并指定字符集(了解) CREATE DATABASE 数据库名 CHARACTER SET 字符集; 4.查看所有的数据库 SHOW DATABASES; 5.查看某个数据库的定义信息 SHOW CREATE DATABASE db1; 6.修改数据库字符集格式 ALTER DATABASE db1 DEFAULT CHARACTER SET utf8; 7.删除数据库 DROP DATABASE 数据库名; 8.使用数据库 use 数据库名;


09操作表结构 创建和查看表

在sqlyog里面执行

写好语句后,按左上角执行查询

操作表语法

这样写好之后,直接点执行查询是没有用的,要选中语句再执行。


-- 创建表 1.创建表    create table 表名(     字段名 字段类型 约束,     字段名 字段类型 约束    ); 2.快速创建一个表结构相同的表    CREATE TABLE 新表名 LIKE 旧表名; -- 查看表 3.查看某个数据库中的所有表   SHOW TABLES; 4.查看表结构(查看表有多少个字段,什么类型)   DESC 表名; 5.查看创建表的SQL语句   SHOW CREATE TABLE 表名; -- 修改表: 了解 /*   修改表结构: 6.添加表列(添加一个字段)       ALTER TABLE 表名 ADD 列名 类型; 7.修改列类型(修改字段类型)       ALTER TABLE 表名 MODIFY 列名 新的类型; 8.修改列名(修改字段名称)       ALTER TABLE 表名 CHANGE 旧列名 新列名 类型; 9.删除列(删除字段)       ALTER TABLE 表名 DROP 列名; 10.修改表名(修改表名)       RENAME TABLE 表名 TO 新表名; 11.修改表的字符集(编码方式)       ALTER TABLE 表名 character set 字符集;   */    -- 需求: 给stu1表中添加一个字段, birthday(date)    ALTER TABLE stu1 ADD birthday DATE;    ALTER TABLE stu1 ADD sex CHAR(2);    -- 需求: 将stu1表中的name的类型改为varchar(50)    ALTER TABLE stu1 MODIFY `name` VARCHAR(50);    -- 需求: 将stu1表中的name改为username    ALTER TABLE stu1 CHANGE `name` username VARCHAR(20);    -- 需求: 删除stu1表中的sex    ALTER TABLE stu1 DROP sex;    -- 需求: 将stu1表名改为student    RENAME TABLE stu1 TO student;    RENAME TABLE student TO stu1;    -- 需求: 修改stu1表的字符集 gbk    ALTER TABLE stu1 CHARACTER SET utf8; -- 删除表 12.直接删除表: DROP TABLE 表名;


10上午总结


数据库: 作用: 存储数据的仓库,将数据按照特征格式存储到文件中. 数据存储位置: 关系型数据库(硬盘数据库): 特征: 将数据存储到硬盘上,存储的数据和数据之间有一定的关联关系         优点: 不会导致数据丢失         缺点: 执行效率低         代表产品: Mysql Oracle 非关系型数据库(内存数据库): 特征: 将数据存储到内存中,存储的数据和数据之间没有任何的关联关系         优点: 执行效率高         缺点: 可能会导致数据丢失         代表产品: redis MongoDB Mysql安装与卸载: Linux版本: 直接在线安装: yum : 平台,用于托管Linux软件的平台           Docker: 项目一前置课 Windows版本: 安装步骤安装即可 Mysql结构: 数据库管理系统(DBMS): mysql软件         数据库: Database,本质上就是计算机上的一个文件夹           表: Table,本质上就是文件夹中的一个文件                 行: 一行就是一条记录,对应java的一个对象 列,字段: 描述当前列的相关信息                     字段名: 自定义                     数据类型: mysql中有与java类型一一对应的相关类型 SQL: 结构化查询语言     作用: 用于操作关系型数据库(硬盘数据库)       分类: DDL: 数据定义语言             操作数据库,表,列结构           DML: 数据库操作语言 ★             操作表中的数据,对表中的数据进行增删改           DCL: 数据控制语言             控制数据库的权限 TCL: 事务控制语言             控制事务的           DQL: 数据查询语言 ★★★★★ 是从DML中分离出的一种语言,专门负责查询 DDL: 数据库: create database 数据库名; create database 数据库名 character set utf8; show create database 数据库名; show databases; use 数据库名; 使用数据库       表: create table 表名(           字段名 字段类型 [约束],             字段名 字段类型 [约束],             ....            ); create table 表名 like 旧表名; 查询所有的表: show tables; 查询建表语句: show create table 表名; 查询表结构: desc 表名; DML: DQL: 技术源于生活,且高于生活(每一种技术在生活中都有对应的示例)   DDL: 盖仓库这个房子(Table),存放货架(列)   DML: 往仓库中进行存取商品   DCL: 给仓库管理员设置权限   TCL: 事务控制语言   DQL: 查询      default-character-set=utf8


11 DDL操作表结构-修改表(了解)和删除表

修改表:

添加表列(添加一个字段):alter table 表名 add 字段名 字段类型(长度);

修改字段类型:alter table 表名 modify 字段 新类型;

删除字段:altar table 表名 drop 字段名;

修改表名:raname table 表名 to 新表名;

修改表的字符集(编码方式):alter table 表名 character set 字符集;

删除表:

直接删除表:drop table 表名;

12 DDL字段类型

---------- 特殊的数据类型

double,float:

double(5,2)最大值999.99 参数1:数值总长度 参数2:小数位的个数

char,varchar:

char:固定长度 char(5):‘abc ’

varchar(因为灵活,较常用):可变长度 varchar(5):‘abc’

13 DML-添加数据信息

作用: 操作数据库表中的数据

对表中的数据进行增删改查(CRUD)

  1. 添加部分字段:insert into 表名 (字段名1,字段名2....) value (值1,值2....);
  2. 添加所有字段:insert into 表名 value(值1,值2......);
  3. 批量添加部分数据:insert into 表名 (字段名1,字段名2....)value(值1,值2......),value(值1,值2......)....;
  4. 批量添加所有数据:insert into 表名 value(值1,值2......),value(值1,值2......)....;
  5. 注意:除了数字类型 其他都要用“”或者‘’括起来

14DML-修改和删除数据信息

  1. 修改所有数据:update 表名 set 字段名1=值1,字段名2=值2;
  2. 修改满足条件的数据:update 表名 set 字段名1=值1,字段名2=值2 where 条件;
  3. 删除所有数据:delete from 表名;delete删除时是一行一行删除 truncate table 表名; truncate删除时,摧毁整张表,再创建一张结构相同的表
  4. 删除满足条件的数据:delete from 表名 where 条件;

备份数据

蠕虫复制:从表1获得原始数据(表1与表2 的表结构必须相同)

create from 表名2 like 表名1;创建一张结构相同的表

insert into 表2 select * from 表1;将一张表中的数据插入结构相同的表

15小结和逻辑删除

添加数据信息: 1.罗列所有的字段 INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3); 2.不写字段名 INSERT INTO 表名 VALUES (值1, 值2, 值3…); 此时值的个数,顺序,类型要和数据库表字段的个数,顺序,类型保持一致

修改数据信息: 1.修改所有字段: update 表名 set 字段名1=值1,字段名2=值2... 2.修改满足条件的字段: update 表名 set 字段名1=值1,字段名2=值2... where 条件 删除数据信息: 1.删除满足条件的数据信息: delete from 表名 where 条件 2.删除所有数据信息: delete from 表名; 一行一行删除数据信息 truncate table 表名; 摧毁表,创建一张结构相同的表 注意: 在工作中所有的删除都是假删除 --- 逻辑删除 假删除(逻辑删除),本质上是修改,修改数据的状态

16DQL简单查询


#创建商品表: create table product( pid int, pname varchar(20), price double, category_id varchar(32) ); INSERT INTO product(pid,pname,price,category_id) VALUES(1,'联想',5000,'c001'); INSERT INTO product(pid,pname,price,category_id) VALUES(2,'海尔',3000,'c001'); INSERT INTO product(pid,pname,price,category_id) VALUES(3,'雷神',5000,'c001'); INSERT INTO product(pid,pname,price,category_id) VALUES(4,'JACK JONES',800,'c002'); INSERT INTO product(pid,pname,price,category_id) VALUES(5,'真维斯',200,'c002'); INSERT INTO product(pid,pname,price,category_id) VALUES(6,'花花公子',440,'c002'); INSERT INTO product(pid,pname,price,category_id) VALUES(7,'劲霸',2000,'c002'); INSERT INTO product(pid,pname,price,category_id) VALUES(8,'香奈儿',800,'c003'); INSERT INTO product(pid,pname,price,category_id) VALUES(9,'相宜本草',200,'c003'); INSERT INTO product(pid,pname,price,category_id) VALUES(10,'面霸',5,'c003'); INSERT INTO product(pid,pname,price,category_id) VALUES(11,'好想你枣',56,'c004'); INSERT INTO product(pid,pname,price,category_id) VALUES(12,'香飘飘奶茶',1,'c005'); INSERT INTO product(pid,pname,price,category_id) VALUES(13,'果9',1,NULL); INSERT INTO product(pid,pname,category_id) VALUES(14,'香飘飘奶茶','c005'); #简单查询 #1.查询所有的商品. #2.查询商品名和商品价格. #3.别名查询.使用的关键字是as(as可以省略的). #   3.1表别名: #   3.2列别名: #4.查看商品表中有那些价格. #5.将所有商品的价格+10元进行显示.


  1. 查询所有信息:select * from 表名;
  2. 查询部分字段信息:select 字段名,字段名 from 表名;
  3. 别名查询(使用的关键字是as as可以省略的):
  1. 表别名:select * from 表名 as 别名;
  2. 列别名:select 字段名as‘别名’,字段名 as‘别名’ from 表名
  1. 去重查询:select distinct字段名 from 表名
  2. 对查询结果操作后显示(结果参与运算):select 字段名+固定值from 表名;
  3. ifnull(字段,值)当指定字段为null时 使用后面的值 (为此赋值后操作)

17DQL条件查询

将符合条件的数据查询出来

格式: select * from 表名 where 条件;


sql执行顺序:    select 查询结果 3      from 表名 1      where 条件; 2


准备数据


# 注意: 重音符 ` (键盘横排数字1左边的那个键直接按,就是重音符) # 重音符,在sql语句中可以区人关键字和普通字符串 CREATE TABLE stu3 ( id INT, `name` VARCHAR(20), age INT, sex VARCHAR(5), address VARCHAR(100), math INT, english INT ); # 批量插入 INSERT INTO stu3 VALUES (1,'马云',55,'男','杭州',66,78), (2,'马化腾',45,'女','深圳',98,87), (3,'马景涛',55,'男','香港',56,77), (4,'柳岩',20,'女','湖南',76,65), (5,'柳青',20,'男','湖南',86,NULL), (6,'刘德华',57,'男','香港',99,99), (7,'马德',22,'女','香港',99,99), (8,'德玛西亚',18,'男','南京',56,65); # 比较运算符 -- 查询math分数大于80分的学生 -- 查询english分数小于或等于80分的学生 -- 查询age等于20岁的学生 -- 查询age不等于20岁的学生 # 逻辑运算符 -- 查询age大于35且性别为男的学生(两个条件同时满足) -- 查询age大于35或性别为男的学生(两个条件其中一个满足) -- 查询id是1或3或5的学生 # in关键字 -- 查询id是1或3或5的学生 -- 查询id不是1或3或5的学生 # 范围 -- 查询english成绩大于等于75,且小于等于90的学生 # 模糊查询 -- 查询姓马的学生 -- 查询姓名中包含'德'字的学生 -- 查询姓马,且姓名有三个字的学生


比较运算符


> 大于 < 小于 <= 小于等于 >= 大于等于 = 等于 <>  != 不等于  


逻辑运算符


and(&&) 多个条件同时满足 or(||) 多个条件其中一个满足 not(!) 不满足


in关键字

例如 查询id是1或3或5的学生 select * from 表名 where id 【如果不是1,3,5,就加一个not】in (1,3,5);

范围

select * from 表名 where 字段名 between 值1and值2(两边都是闭区间)

like模糊查询

select * from 表名where 字段名 like “匹配格式”

匹配格式

%匹配任意位 _匹配一位

其他

排序:select 字段名from表名where条件order by 字段名 asc/desc;

组合排序:select 字段名from表名where条件order by 字段名 asc/desc,字段名2 asc/desc;

聚合函数:select 聚合函数(字段名) from 表名;

分组:select 字段名 from 表名 where 条件 group by 字段名having 条件;

limit分页:select 字段名 from 表名 where语句 group by语句 having语句 order by语句 limit 开始条目,每页条目;


-- ==============条件查询 # 注意: 重音符 ` (键盘横排数字1左边的那个键直接按,就是重音符) # 重音符,在sql语句中可以区人关键字和普通字符串 CREATE TABLE stu3 ( id INT, `name` VARCHAR(20), age INT, sex VARCHAR(5), address VARCHAR(100), math INT, english INT ); # 批量插入 INSERT INTO stu3 VALUES (1,'马云',55,'男','杭州',66,78), (2,'马化腾',45,'女','深圳',98,87), (3,'马景涛',55,'男','香港',56,77), (4,'柳岩',20,'女','湖南',76,65), (5,'柳青',20,'男','湖南',86,NULL), (6,'刘德华',57,'男','香港',99,99), (7,'马德',22,'女','香港',99,99), (8,'德玛西亚',18,'男','南京',56,65); # 比较运算符 > < >= <= = != <> -- 查询math分数大于80分的学生 SELECT * FROM stu3 WHERE math > 80; -- 查询english分数小于或等于80分的学生 SELECT * FROM stu3 WHERE english <= 80; -- 查询age等于20岁的学生 SELECT * FROM stu3 WHERE age = 20; -- 查询age不等于20岁的学生 SELECT * FROM stu3 WHERE age != 20; SELECT * FROM stu3 WHERE age <> 20; # 逻辑运算符 and or not -- 查询age大于35且性别为男的学生(两个条件同时满足) SELECT * FROM stu3 WHERE age > 35 AND sex = "男"; -- 查询age大于35或性别为男的学生(两个条件其中一个满足) SELECT * FROM stu3 WHERE age > 35 OR sex = "男"; -- 查询id是1或3或5的学生 SELECT * FROM stu3 WHERE id=1 OR id=3 OR id=5; # in关键字 -- 查询id是1或3或5的学生 SELECT * FROM stu3 WHERE id IN (1,3,5); -- 查询id不是1或3或5的学生 SELECT * FROM stu3 WHERE id NOT IN (1,3,5); # 范围 /* 格式: select * from 表名 where 字段名 between 值1 and 值2 注意: 值1必须小于值2 */ -- 查询english成绩大于等于75,且小于等于90的学生 SELECT * FROM stu3 WHERE english BETWEEN 75 AND 90; SELECT * FROM stu3 WHERE english >= 75 AND english <=90; # 模糊查询 /* 格式: select * from 表名 where 字段名 like "匹配格式"; 匹配格式: % : 匹配任意位 _ : 匹配一位 "马%" : 查询以 马 开头的学生信息 "%马" : 查询以 马 结尾的学生信息 "%马%" : 查询包含 马 的学生信息 "_马%" : 匹配第二个字是 马 的学生信息 "马__" : 名字有三个字,且第一个为 马 的 "___" : 匹配名字有三个字的学生信息 */ -- 查询姓马的学生 SELECT * FROM stu3 WHERE `name` LIKE "马%"; -- 查询姓名中包含'德'字的学生 SELECT * FROM stu3 WHERE `name` LIKE "%德%"; -- 查询姓马,且姓名有三个字的学生 SELECT * FROM stu3 WHERE `name` LIKE "马__";


作业

#新建一个数据库

CREATE DATABASE day03;

#使用数据

USE day03;

#创建表

create table products(

pid int primary key auto_increment, #主键(编号)

pname varchar(20), #商品名称

price double(5,2), #商品价格


pnum int, #商品数量 cno int, #商品分类


pdate timestamp #添加日期

);

#添加数据

insert into products values (1,'泰国大榴莲',98,12,1,null);

insert into products values (2,'新疆大枣',38,123,1,null);

insert into products values (3,'新疆切糕',68,50,2,null);

insert into products values (4,'十三香',10,200,3,null);

insert into products values (5,'老干妈',20,180,3,null);

insert into products values (6,'豌豆黄',20,120,2,null);

排序查询练习:

1.查询所有的商品,按价格进行排序.(asc-升序,desc-降序)

2.查询所有的商品,按价格降序,若价格一致按照数量升序.

3.查询名称有"新"的商品的信息并且按价格降序排序.

聚合函数练习:

1.查询商品表中有多少条记录

2.查询所有商品的价格的总和

3.查询商品表中价格的平均数

4.查询商品表中价格最大的

5.查询商品表中价格最小的

对平均值处理

保留两位小数

cast(avg(字段名称) as decimal(5,2))

分组查询练习:

1.根据cno字段分组,分组后统计商品的个数.

2.根据cno分组,分组统计每组商品的总数量,并且总数量> 200;