MySQL
MySQL是一个关系型数据库管理系统
安装配置
下载网址:dev.mysql.com/downloads/i…
安装完成后,配置环境变量:
找到mysql的安装目录,默认:C:\Program Files\MySQL\MySQL Server 8.0\bin。如果修改了,则自己找到修改的目录。一定要定位到bin目录下。复制路径。
进入命令窗口
win+r 输入cmd 进入命令窗口, 输入 mysql -u root -p 回车 再输入密码 进入mysql的命令窗口
概念
数据库(database)
mysql里面存储了很多数据库,我们可以理解为 电脑上的一个 文件夹。 一般情况下,一个项目对应一个数据库。
每一个数据库是由多张表组成的。
表(table)
字段
相当于表格中的表头
记录
一条记录相当于表格中的一条内容
数据库的操作
# 查看所有的数据库
show databases;
#创建一个数据库
create database 自定义的数据库名;
#创建指定字符串的数据库
create database myfirst default character set utf8mb4;
#查看一个数据库的编码格式
show create database myfirst;
#设置数据库的编码格式
alter database myfirst default character set utf8mb4;
#删库
drop database myfirst;
表的操作
#创建表
create table 自定义的表名 (
id int(11) not null,
name varchar(20),
author varchar(20),
price double(5,2),
category varchar(10)
);
#查看表
show tables;
#修改表名 将book表重命名为books
alter table book rename books;
#添加字段
alter table books add press varchar(20);
#查看表的字段信息
desc books;
#删除字段 删除books表中的press字段。
alter table books drop press;
#删除表 删除books表
drop table books;
操作记录
# 添加记录 (指定字段)
insert into info(id,name,sex,age,home) values (1,'白勇太','男',20,'中国');
#添加记录(所有字段,添加的值要一一对应)
insert into info values (2,'恩佐','男',25,'日本');
#查询所有记录
select * from info;
#修改记录
update info set age = 23; #将所有info的age修改为23。
#修改指定条件的记录
update info set age = 20 where id = 1;#将id为1的info的age修改为20
#一次修改多个字段的值。
update info set name = "暴风",home = "俄罗斯" where id = 7; #将id等于7的info的name修改为暴风,同时将home修改为俄罗斯
#删除一条记录
delete from info where id = 5 #删除id为4的书籍
delete from info; #删除所有书籍
where子句
where子句用于过滤记录。
单条件
#查询id等于1的记录
select * from info where id = 1;
#查询age大于20的记录
select * from info where age > 20;
#查询age小于25的记录
select * from info where age < 25;
#查询age大于等于25的记录
select * from info where age >= 25;
# 空值判断 查询分类是空的记录
select * from info where home is null;
#模糊匹配 查询name中带‘小’的记录 %表示任意个字符
select * from info where name like '%小%';
#查询name以‘白’开头的记录
select * from info where name like '白%';
#查询home以‘国’结尾的记录
select * from info where home like '%国';
多条件
and & or 运算符用于一个以上的条件,对记录的过滤。
如果多个条件都要成立,则使用 and 运算符
# 查询 age在20-25之间的info
select * from info where age >= 20 and age <=25;
如果多个条件只要有一个成立,则使用or运算符。
# 查询 home是中国 或age小于24 或sex不是女的info。
select * from info where home = '中国' or age<24 or sex!='女';
#查询 age在20-30之间的info 或 home是中国的info
select * from info where home = '中国' or age >= 20 and age <= 30;
#注意,and与or同时出现的,将视为整体的部分用小括
in 符合范围中某一个值。
#查询 home是 中国,日本,韩国 中的一个的info
select * from book where home in ('中国','日本','韩国');
where子句可以放在 查询,修改,删除 语句后面
聚合函数
#查询个数
select count(*) from info;
#查询age大于25的有几个info
select count(*) from info where age >25;
#求和
select sum(age) from info;
#求最大值
select max(age) from info;
#求最小值
select min(age) from info;
# 查询age最大的info (子查询)
select * from info where age = (select max(age) from info);
#求平均值
select avg(age) from book;
排序
order by 可以对记录进行排序。
#按照age从小到大排序
select * from info order by age;
#按照age从大到小排序
select * from info order by age desc;
#与where联合使用。 where要在order by的前面。 id大于3的值,按照age排序。
select * from info where id >3 order by age;
分页
使用limit可以限制 查询结果的数量
#查询 前4个info限制每页显示4个
select * from info limit 4;
#查询第二页的info,每页显示4个。
select * from info limit 4,4;
#公式:查询第n页,每页m本。 limit (n-1)*m, m
#查询最大的age。
select * from book order by age desc limit 3;
#查询最大的age
select * from book order by age desc limit 1;
多表关联查询
数据库表有三种关联关系,分别为:一对多,一对一,多对多。
以学生表,老师表,班级表为例,学生与班级的关系就是多对一。 学生请了家教,一个学生对应一个老师,就是一对一。老师与班级之间是多对多的关系,一个班级有多个任课老师,每个任课老师带多个班级。
新建两张表
DROP TABLE IF EXISTS `classroom`;
CREATE TABLE `classroom` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` varchar(255) DEFAULT NULL COMMENT '教室名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- ----------------------------
-- Records of classroom
-- ----------------------------
INSERT INTO `classroom` VALUES ('1', '鄱阳湖');
INSERT INTO `classroom` VALUES ('2', '淀山湖');
INSERT INTO `classroom` VALUES ('3', '老君山');
INSERT INTO `classroom` VALUES ('4', '桐柏山');
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '学生id',
`name` varchar(255) DEFAULT NULL COMMENT '学生姓名',
`gender` varchar(255) DEFAULT NULL COMMENT '性别',
`age` int DEFAULT NULL COMMENT '年龄',
`score` int DEFAULT NULL COMMENT '成绩',
`c_id` int DEFAULT NULL COMMENT '教室id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '吴用', '男', '20', '4', '1');
INSERT INTO `student` VALUES ('2', '李逵', '男', '23', '22', '1');
INSERT INTO `student` VALUES ('3', '孙二娘', '女', '26', '103', '1');
INSERT INTO `student` VALUES ('4', '扈三娘', '女', '18', '59', '2');
在多的那一端添加一个字段,存储 一 那一端的id。 在上面的例子中,学生是多的一端,在student表添加一个字段,c_id 存储 教室 classroom表的id。
内连接
#查询同学的信息。
SELECT
s.id 学生编号,
s. NAME 学生姓名,
c. NAME AS 教室
FROM
#我们可以为表添加别名。
student s
INNER JOIN classroom c ON c_id = c.id
WHERE
c. NAME = '7-103';
#内连接 另外一种写法。
SELECT
s.id,
s. NAME,
c.`name` AS classname
FROM
student s,
classroom c
WHERE
s.c_id = c.id
外连接
左外连接
#查询所有同学的信息,包括所属的班级名。
SELECT
s.id,
s. NAME,
c.`name` AS classname
FROM
student s LEFT JOIN
classroom c
ON #on后面跟两种表关联的条件。
s.c_id = c.id
右外连接
#查询所有教室的信息,包含它的学生信息。
SELECT
s.id,
s. NAME,
c.`name` AS classname
FROM
student s RIGHT JOIN
classroom c
ON
s.c_id = c.id