视频资源:黑马程序员完整JavaWeb快速入门教程【收藏比赞多系列】_哔哩哔哩_bilibili
MySQL下载安装
[(4条消息) MySQL8.0.18安装自定义安装_思苑-CSDN博客_mysql自定义安装](https://blog.csdn.net/qq_27009225/article/details/103956756#:~:text=我们选择 Custom:自定义安装,可以自由选择需要安装的组件、选择安装路径等。 MySQL Server:是数据库服务,要安装这个 。 MySQL Workbench:一款MySQL的ER%2F数据库建模工具。 MySQL,:是一款 MySQL 数据库的辅助工具。 它可以在系统任务栏通知区域(系统托盘) 处驻留图标,用于快捷监视、更改服务器实例(服务)的状态。 同时,也可以与一些图形化管理工具(如 MySQL Workbench)集成使用。)
官网下载,一般来说历史版本会更稳定一点。
server下载不了,require vc:
mysql的安装–visual studio C++ Redistritable Packag - whyisthatyou - 博客园 (cnblogs.com)
看着很有道理的样子,但我还是无法安装,最后将server版本换到8.0才解决。
接着在download环节卡住,一直很慢,于是我睡了一觉起来重新安装,就OK了。
安装的过程中可以修改端口。
PHPstudy相关
由于PHPstudy自带MySQL,若另外安装独立的MySQL则需要修改任意一方的端口号,否则会因为端口冲突而不能正常运行。
查看端口被占用的情况:cmd命令行下输入:
1 | netstat -ano |
修改PHPstudy自带MySQL的端口
旧版:
phpStudy自带的MySQL和独立安装的MySQL冲突 - 不睡 - 博客园 (cnblogs.com)
新版:
首页-MySQL配置直接修改端口
值得注意的是:修改端口后,与PHPstudy相关的数据库配置也要修改,如sqli-labs,自己创建的本地网站等,还未深入研究,下次一定!
修改独立的MySQL端口
1.安装过程中;
2.安装完成后[怎么修改mysql的默认端口号-mysql教程-PHP中文网](https://www.php.cn/mysql-tutorials-421503.html#:~:text=修改mysql的默认端口号的步骤: 1、找到MYSQL安装目录的my.ini,2、打开my.ini文件,修改port端口。直接Ctrl%2BF,搜索port,如图所示 3306为mysql默认端口号,将它修改为你想要的端口号,注意两个地方都要修改;修改完成后保存关闭。)
因为我PHPstudy端口不太方便改,所以将MySQL端口改为3366.
配置MySQL环境变量
参考网上配置环境变量后可在cmd中打开。
也可不配置,安装好后,可以在启动栏win中看到MySQL 8.0 Command Line Client,打开后也可进入mysql。
重置MySQL密码
网上搜索到的结果都是在cmd命令行中操作,不过我没有配置cmd的环境,有待探索。
MySQL数据存储
数据库—一个应用/项目
表—一个实体/对象
记录—一个实体的实例
SQL语句
不区分大小写
SQL分类
- DDL(数据定义语言):create,drop,alter
- DCL(数据控制语言):grant,if
- DML(数据操纵语言):insert,update,delete
- DQL(数据查询语言):select
简单使用SQL
对数据库进行操作
创建数据库
create database DBname
可在后面接其他参数进行字符集的指定和校对;校对主要用于表中记录的排序规则。
查看数据库
show databases; 查看所有数据库
show create database DBname; 查看某个数据库的定义信息(如字符集和校对规则)
修改数据库
alter database DBname; 修改字符集和校对规则
删除数据库
drop database DBname;
其他数据库操作
切换数据库
use DBname;
查看当前使用数据库
select database();
对数据库表进行操作
创建表
create table Tabname(字段名称 字段类型(长度) 约束,字段名称 字段类型(长度) 约束…);
字段类型
Java与SQL的属性对应:
byte-tinyint short-smallint int-int long-bigint
float-float double-double
boolean-bit(01)
char-char char/string-varchar
- char-固定长度的字符或字符串
- varchar-可变长度的字符串
Date-date/time/datetime/timestamp
File-BLOB(二进制)/TEXT(文本)
约束(单表)
作用:保证数据的完整性
- 主键约束:primary key(默认唯一&非空)
- 唯一约束:unique
- 非空约束:not null
创建表时,需要先use数据库。
查看表
- show tables; 所有
- desc Tabname; 查看某个表的结构信息
删除表
drop table Tabname;
修改表
- 添加列:alter table Tabname add Colname 类型(长度) 约束;
- 修改列类型,长度,约束:alter table Tabname modify Colname 类型(长度) 约束;
- 删除列:alter table Tabname drop Colname;
- 修改列名称:alter table Tabname change OldColname NewColname 类型(长度) 约束;
- 修改表名:rename table OldTabname to NewTabname;
- 修改表的字符集:alter table Tabname character set 字符集;
对数据库表的记录进行操作
添加
- insert into Tabname (Col1,Col2…) values (value1,value2…); 插入某些列
- insert into Tabname values (value1,value2…); 插入所有列
值的类型是字符串或者是日期类型,使用单引号引起来。
如果向数据库插入中文记录报错的话,可通过命令show variable like '%character%'
查看数据库中与字符集相关参数。由于命令行使用gbk,所以要将MySQL数据库服务器中的客户端部分的字符集改为gbk。我用的8.0没有这种情况,如果其他版本有问题,可在my.ini中修改字符集,再重启MySQLservices.msc
。
修改
update Tabname set Col1=value1,Col2=value2; 将一列中的所有记录都修改成相同的值
update Tabname set Col1=value1,Col2=value2 where 条件; 可用于修改特定的一条或几条记录
如 update user set telephone=180 where id=1;
删除
delete from Tabname [where 条件]; 至少删除表中的一行记录,如果不加条件则默认删除表中所有记录。(DML)
tips:truncate table Tabname;
将表删除再重建一个结构一样的表,可达到删除所有记录的效果。(DDL)
上述两种方法的区别与事务有关。
查看
基本查询
select [distinct] *|Col1,Col2 from Tabname [条件];
distinct: 表示去掉重复值
select后可直接执行运算:select Col1+Col2 [as Sum] from Tabname; as
可以将运算结果列进行命名
时间查询:select * from 表名 where ColName between “2018-01-01” and “2018-10-31”;
Q:以select查询结果作为另一个select的查询源时报错:Every derived table must have its own alias;
A:mysql要求每一个派生出来的表都必须有一个自己的别名,那给派生表加上别名即可;例:select * from ( select * from t_shop_xs limit 10) as s where...
(通过as)
条件查询
where子句
比较(<,>,=,>=,=!);
模糊(like),l可以使用
_
或者%
作为占位符,一个下划线代表一个字符,一个百分号代表任意个字符(可以为null);select * from user where name like 'S%'
范围(in/not in/between..and)
select * from user where id in (1,2,3)
;条件(and,or,not),连接多个条件;
排序查询
order by Colname [asc/desc];
asc-升序(默认);desc-降序。
多个排序条件用逗号隔开(有优先级),即条件1有重复值时,按照条件2排序。select * from user order by 条件1 asc,条件2 desc;
tips:有条件时先写条件语句再排序
分组统计查询
聚合函数
sum(); 求和select sum(Col1),sum(Col2) from user where 条件;
select sum(Col1+Col2) from user;
select sum(Col1)+sum(Col2) from user;
Null加上任何值都等于Null
count();
max(); min();
avg(); 平均值
group by Colname
前后对应
如果要加带有聚合函数的条件语句,不能用where,使用having
。eg.select Col1,sum(Col2) from Tab group by Col1 having sum(Col2)>1 order by sum(Col2) asc;
语句顺序
1 | select...from...where...group by...having...order by...; |
子查询some/all
注释
单行:--space
或#
多行:/**/
可视化工具
在下载时,已经下载了官方的可视化工具workbench,英文界面有点为难。
简单使用参考:MySQL Workbench使用教程 (biancheng.net)
Q:无法勾选auto_increment
A:在上面勾选AI
多表
多表设计
外键约束
Foreign Key(下面使用的是命令行,用workbench操作也可)
alter table Tab1 add foreign key (Col1) references Tab2(Col2);
一般不允许外键为空alter table Tab1 modify Col1 int not null;
Q:在workbench上设置外键时失败显示:Can’t DROP ‘res’; check that column/key exists
A:对同一个表只能同时进行一种操作,即最上方的工作台只能有一个,单开,这件事做完了再去做其他的。
表间关系
一对多
建表时,在“多”的一方创建外键指向“一”这一方的主键。
多对多
创建第三方表(中间),让该表的至少两个字段作为外键分别指向两个“多”。
一对一
少见。可使用唯一外键约束或主键约束进行联系。
多表查询
连接查询
交叉连接
select * from Tab1 cross join Tab2;
select * from Tab1,Tab2;
内连接
select * from Tab1 inner join Tab2 on 关联条件;
显示内连接;
三张表则嵌套join:from (tab1 join tab2 on condition1) as tab12 join tab3 on condition2
select * from Tab1,Tab2 where 关联条件;
隐式内连接;
inner可省略;查询的是交集。
外连接
select * from Tab1 left outer join Tab2 on 关联条件;
左外连接;select * from Tab1 right outer join Tab2 on 关联条件;
右外连接;
outer可省略;
若关联条件是Col1=Col2
,left查询的是以Col1为标准的所有Tab1加上交集部分;right以Col2为标准。
交并差
事务
概念:逻辑上的一组操作,组成这组操作的各个逻辑单元,要么全部成功要么全部失败。
在MySQL中的操作
start transaction;
开启事务;commit;
提交事务;rollback;
回滚。
事务的特性
- 原子性:事务不可分割,各个逻辑单元不可分割;
- 一致性:事务执行前后数据完整性保持一致;
- 隔离性:事务执行不应该受到其他事务的干扰;
- 持久性:事务一旦结束,数据就持久化到数据库中。
事务的隔离级别
隔离性相关的安全问题
如果不考虑隔离性,即受到干扰,会影响读取数据。(事务2执行sql但事务未提交时,在事务1中查询)
- 脏读:一个事务读到另一个事务未提交的数据,导致查询结果不一致;
- 不可重复读:一个事务读到另一个事务已经提交的update的数据,导致多次查询结果不一致。
- 虚读/幻读:一个事务读到另一个事务已经提交的insert的数据,导致……
设置事务的隔离级别
隔离级别:
read uncommitted
read committed
避免脏读;repeatable read
避免脏读和不可重复读;(mysql默认)serializable
都可避免,但效率低
设置:select session transaction isolation level 隔离级别
;
查看:select @@tx_isolation;