目录
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模糊查询
匹配格式
其他
作业
Linux:基于Unix的,直接运行在硬件之上的操作系统
安装与卸载:
虚拟机:Windows平台之上的一款软件,可以虚拟出多个独立空间
挂载:如果Linux系统需要装很多软件,自己操作比较麻烦的话,可以直接拷贝别人的Linux文件过来,然后点击里面的后缀名为vmx的文件双击,就可以将别人的操作系统挂载到自己的VMware。
Linux目录系统:
/:根,root用户的家目录
home:普通用户的家目录(支持多用户登录和使用)
usr:多用户共享目录
etc:存放系统的配置文件
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
先学数据库,再学前端,然后学服务器。
存储数据的仓库。
浏览器:即我们所说的前端,作用是展示。
服务器:即后台,作用是存储页面,存放执行业务逻辑的java代码。
数据库:java程序是否可以存储数据?
可以说不能:当程序停止后,内存会被释放,数据消失不见。
也可以说能:java程序中有序列化和反序列化的功能。
在java程序中有序列化,作用是把java的一个类序列化到硬盘进行永久保存。缺点是java程序序列化后的文件只有java程序能够读取和使用。不方便增删改查。
硬盘存储(关系型数据库)
优点:不会导致数据丢失
缺点:执行效率低(CPU加载数据来自内存,内存数据来自硬盘)
普通文件txt,excel...存储没有特定的数据格式,操作起来不方便。
MySQL数据库是硬盘数据库:将数据按照特定的格式存放,方便后期的使用(增删改查)
内存存储(非关系型数据库)
优点:存储速度快
缺点:当程序停止运行后,数据会丢失。
redis是内存数据库。
数据库管理系统(DBMS):MySQL软件
database:本质是文件夹
table:表,本质上是按照特定格式存储数据的文件
行:一行数据,描述一个对象的数据信息,一条记录对应一个Java类对象。
列(字段):描述本列存放的数据信息。由字段名+字段类型组成。
注意:MySQL是数据库管理系统,真正的数据库是database
MySQL :: Download MySQL Installer
我们采用自定义安装模式:选择32位或64位
默认即可:
说明,如果没有该页面就上一步,选择高级选项:
安装完成
开始配置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
关闭命令:net stop MySQL56
启动命令:net start MySQL56
访问:mysql -uroot -proot
mysql -h主机地址 -uroot -proot
连接Linux上的MySQL:mysql -h192.168.190.149(Linux的ip) -uroot -proot
dos命令(命令行):mysql -uroot -proot
客户端软件:sqlyog 输入用户名和密码连接
java代码:Java程序(JDBC)
傻瓜式安装
点新建,名称随便写
输入主机地址,连接上
作用:借助sql操作mysql管理系统
分类:
DDL:数据定义语言。创建数据库,创建表,创建表中的字段
DML:数据操作语言。操作表中的数据,增删改查
DCL:数据控制语言。操作MySQL的用户,权限
TCL:事务控制语言。操作MySQL中的事务
DQL:数据查询语言。查询
SQL语句可以单行或者多行书写,必须以分号结尾
可使用空格和缩进来增强语句的可读性。
MySQL数据库的SQL语句不区分大小写,建议大写,但是我们不听,我们小写
3种sql注释 --空格 # /**/
在命令行中执行:
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 数据库名;
在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 表名;
数据库: 作用: 存储数据的仓库,将数据按照特征格式存储到文件中. 数据存储位置: 关系型数据库(硬盘数据库): 特征: 将数据存储到硬盘上,存储的数据和数据之间有一定的关联关系 优点: 不会导致数据丢失 缺点: 执行效率低 代表产品: 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
修改表:
添加表列(添加一个字段):alter table 表名 add 字段名 字段类型(长度);
修改字段类型:alter table 表名 modify 字段 新类型;
删除字段:altar table 表名 drop 字段名;
修改表名:raname table 表名 to 新表名;
修改表的字符集(编码方式):alter table 表名 character set 字符集;
删除表:
直接删除表:drop table 表名;
---------- 特殊的数据类型
double,float:
double(5,2)最大值999.99 参数1:数值总长度 参数2:小数位的个数
char,varchar:
char:固定长度 char(5):‘abc ’
varchar(因为灵活,较常用):可变长度 varchar(5):‘abc’
作用: 操作数据库表中的数据
对表中的数据进行增删改查(CRUD)
添加部分字段:insert into 表名 (字段名1,字段名2....) value (值1,值2....);
添加所有字段:insert into 表名 value(值1,值2......);
批量添加部分数据:insert into 表名 (字段名1,字段名2....)value(值1,值2......),value(值1,值2......)....;
批量添加所有数据:insert into 表名 value(值1,值2......),value(值1,值2......)....;
注意:除了数字类型 其他都要用“”或者‘’括起来
修改所有数据:update 表名 set 字段名1=值1,字段名2=值2;
修改满足条件的数据:update 表名 set 字段名1=值1,字段名2=值2 where 条件;
删除所有数据:delete from 表名;delete删除时是一行一行删除 truncate table 表名; truncate删除时,摧毁整张表,再创建一张结构相同的表
删除满足条件的数据:delete from 表名 where 条件;
备份数据
蠕虫复制:从表1获得原始数据(表1与表2 的表结构必须相同)
create from 表名2 like 表名1;创建一张结构相同的表
insert into 表2 select * from 表1;将一张表中的数据插入结构相同的表
添加数据信息: 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 表名; 摧毁表,创建一张结构相同的表 注意: 在工作中所有的删除都是假删除 --- 逻辑删除 假删除(逻辑删除),本质上是修改,修改数据的状态
#创建商品表: 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元进行显示.
查询所有信息:select * from 表名;
查询部分字段信息:select 字段名,字段名 from 表名;
别名查询(使用的关键字是as as可以省略的):
表别名:select * from 表名 as 别名;
列别名:select 字段名as‘别名’,字段名 as‘别名’ from 表名
去重查询:select distinct字段名 from 表名
对查询结果操作后显示(结果参与运算):select 字段名+固定值from 表名;
ifnull(字段,值)当指定字段为null时 使用后面的值 (为此赋值后操作)
将符合条件的数据查询出来
格式: 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(!) 不满足
例如 查询id是1或3或5的学生 select * from 表名 where id 【如果不是1,3,5,就加一个not】in (1,3,5);
select * from 表名 where 字段名 between 值1and值2(两边都是闭区间)
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;