当前位置: 首页 > news >正文

MySQL的基础和进阶与运维

在这里插入图片描述

在这里插入图片描述
MySQL基础篇
MySQL概述
SQL
函数
约束
多表查询
事物
MySQL相关概念
数据库是存储数据的仓库,数据是有组织的进行存储
数据库操作系统,操纵和管理数据库的大型软件
SQL,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准
SQL->数据操作系统->数据库
SQL可以操作所有关系型数据库
在这里插入图片描述
下载并安装MySQL数据库
download MySQL 社区版即可
在这里插入图片描述
DBMS是创建数据的软件
关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库
特点:
使用表存储数据,格式统一,便于维护
使用SQL语言操作,标准统一,使用方便
MySQL数据库的数据模型
在这里插入图片描述
SQL的通用语法
SQL语句可以单行或多行书写,以分号结尾
SQL语句可以使用空格/缩进来增强语句的可读性
MySQL数据库SQL语句不分大小写、关键字建议用大写
注释:
单行注释 --注释内容 或 # 注释内容(为MySQL特有)
多行注释 /注释内容/
SQL分类
在这里插入图片描述
DDL-数据库操作
在这里插入图片描述
查询 查询所有数据库 SHOW DATABASES 查询当前数据库
创建
删除
使用mysql>
mysql> – 查看所有数据库(正确语法)
mysql> show databases; – 复数形式 + 分号
±-------------------+
| Database |
±-------------------+
| id |
| information_schema |
| mysql |
| performance_schema |
| sys |
±-------------------+
5 rows in set (0.01 sec)

mysql> create database it;
Query OK, 1 row affected (0.01 sec)

mysql> show databases
-> ;
±-------------------+
| Database |
±-------------------+
| id |
| information_schema |
| it |
| mysql |
| performance_schema |
| sys |
±-------------------+
6 rows in set (0.00 sec)

mysql> create database it;
ERROR 1007 (HY000): Can’t create database ‘it’; database exists
mysql> create database if not exists it;
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql>

创建数据库最好创建utf8mb4可以存储4个字符
drop database 数据库名;可以删除此数据库
drop database if exist 数据库名;
DDL-表操作-查询
查询当前数据库所有表
SHOW TABLES;
查询表结构
DESC表名;
查询指定表的建表语句
SHOW CTREATE TABLE表名;

SHOW TABLES
查询表结构

SHOW CTREATE TABLE表创建
use itcast;
create table user_K9(
id int comment “编号”,
name varchar(50) comment “姓名”,
age int comment “年龄”, – 增加逗号
gener varchar(1) comment “性别”
) comment “用户表”;
DESC user_K9;
– 增加逗号
– 中文引号改为英文引号,增加逗号
– 最后一个字段无需逗号
– 表的comment后需要分号结束create语句
– 中文分号改为英文分号
±------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±------------±-----±----±--------±------+
| id | int | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int | YES | | NULL | |
| gener | varchar(1) | YES | | NULL | |
±------±------------±-----±----±--------±------+
4 rows in set (0.01 sec)
DDL-表操作-数据类型
案例
在这里插入图片描述
create table KL(
id int comment “编号”,
worknum varchar(10) comment “员工编号”,
workname varchar(10) comment “员工姓名”,
gender char(1) comment “性别”,
age tinyint comment “年龄”,
idcard char(18) comment “身份证号”,
entrydate date comment “入职时间”
) comment “员工表”;
desc KL;
在这里插入图片描述
DDL-表操作-修改
添加字段
在这里插入图片描述
alter table “name” add 字段名 类型(长度) + comment注释;

alter table KL add nickname varchar(20) comment “昵称”;

修改数据类型
在这里插入图片描述
alter table 表名 modify 字段名 新数据类型(长度)+ comment注释:
修改字段名和字段类型
在这里插入图片描述a
alter table 表名 change 旧字段名 新字段名 类型(长度)+ comment注释;
alter table KL change nickname username varchar(30) comment “用户名”;
desc KL;–查询表
DDL-表操作-修改
删除字段
在这里插入图片描述
alter table 表名 drop 字段名
alter table KL drop username comment “删除字段名用户名”;
修改表名
alter table 表名 rename to 新表名;
alter table KL rename to LA comment “修改表名为LA”;
删除表
在这里插入图片描述
drop table if exists 表名;
在这里插入图片描述
删除指定之前,并重新创建该表
truncate table 表名;
DDL语句
1.数据库操作
show databases;
create database 数据库名
use 数据库名
select database();
drop database 数据库名;
2.DDL-表操作
show tables;
create table 表名(字段 字段类型,字段 字段类型);
desc 表名;
show create table 表名;
alter table 表名 ;
drop table 表名;
mysql图形化界面
datagrip
DML是数据操作语言,用来对数据库中的表的数据记录进行增删改操作
添加insert
修改update
删除delete
DML是对数据记录进行操作的MySQL语言
DML添加数据
1.给指定字段添加数据
insert into 表名(字段1,字段2)values(值1,值2);
2.给全部字段添加数据
insert into 表名 (值1,值2);
3.批量添加数据
insert into 表名(字段1,字段2,…)values (值1,值2),(值1,值2),(值1,值2);
insert into 表名 values (值1,值2),(值1,值2),(值1,值2);
在这里插入图片描述
insert into user (id,name,gender) values(1,‘K’,“男”);
插入的是值
DML-修改数据
update 表名 set 字段名 = 值1 , 字段2 = 值2, …[where 条件]
在这里插入图片描述
update user set name = ‘KLcast’ where gender = “男”;
DML-删除数据
delete from 表名 [where 条件]
在这里插入图片描述
delete from user where gender = “女”;
DQL-介绍
DQL数据查询语言,查询数据库中的表结构
select 字段列表
from 表名列表
where 条件列表
group by 分组字段列表
having 分组后条件列表
order by 排序字段列表
limit 分页参数
基本查询
条件查询(where)
复合函数(count、max、min、avg、sum)
分组查询(group by)
排序查询(order by)
分页查询(limit)
基本查询
1.查询多个字段
select 字段1,字段2,字段3 from 表名
select *from 表名(查询所有字段)
在这里插入图片描述

2.设置别名
select 字段1[AS别名1],字段2[AS别名2]…From 表名
在这里插入图片描述

3.去除重复记录
select distinct 字段列表 from 表名
在这里插入图片描述
演示代码
select name ,id , gender from user;(查询当前字段对应的数据并返回)
select * from user;(查询所有数据并返回)
select workaddress as “工作地址” from user;(查询并取别名并返回)
select distinct workaddress from user;
DQL-条件查询
1.语法
select 字段列表 from 表名 where 条件列表
在这里插入图片描述
select * from user where age = 99;
select * from user where age < 21;
select * from user where age <= 21;
select * from user where is null;
select * from user where is not null;
select * from user where age != 99;
select * from user where age <> 99;
select * from user where age between 15 and 20;
between后面接的最小值,and后接的最大值
select * from user where age = 20 or age = 30 or age = 40;
select * from user where age in(20,30,40);
select * from user where name like “–”;
select * from user where name like “%X”;
select * from user where name like “-----X”;
DQL-聚合函数
1.介绍
将一列数据作为一个整体,进行纵向计算
2.常见的聚合函数
count----统计总量
max-----最大值
min-----最小值
avg-----平均值
sum-----求和
select 聚合函数(字段列表)from 表名;
在这里插入图片描述
1.统计企业员工数量
select count() from user;
select count(id) from user;
2.统计企业员工的平均年龄
select avg(age) from user;
3.统计企业员工的最大年龄
select max(age) from user;
4.统计企业员工的最小年龄
select min(age) from user;
5.统计西安地区的员工年龄之和
select sum(age) from user where workaddress = ‘西安’;
DQL-分组查询
1.语法
select 字段列表 from 表名 where条件 group by 分组字段名 having分组过滤条件;
在这里插入图片描述
分组查询
1.根据性别分组,统计男员工 和 女员工的数量
select gender,count(
) from user group by gender;
2.根据性别分组,统计男员工和女员工的平均年龄
select gender,avg(age) from user group by gender;
3.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于3的工作地址
select workaddress,count(*) address-count from user where age <45 group by workaddress having address-count >= 3;

DQL-排序查询
1.语法
select 字段列表 from order by 字段1 排序方式,字段2 排序方式2;
2 排序方式
asc:升序 (默认值)
desc:降序
注释:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
1.根据年龄对公司的员工进行升序排序
select * from user order by age asc;
2.根据入职时间,对员工进行降序排序
select * from user order by entrydate desc;
3.根据年龄对公司员工进行升序排序,年龄相同,再按照入职时间进行降序排序
select from user order by age asc, entrydate desc;
DQL-分页查询
1.语法
select 字段列表 from 表名 limit 起始索引,查询记录数
加粗样式
分页查询
1.查询第一页员工记录,每页展示10条记录
select * from user limit 0 , 10;
2.查询第二页员工记录,每页展示10条记录
select * from user limit 1, 10;
DQL语句查询
1.查询年龄为21,22,23岁的女性员工信息
select * from user where gender = ‘女’ and age = (20,21,22,23);
2.查询性别为男,并且年龄在20到40岁以内的姓名为3个字得到员工
select * from user where gender = ‘男’ and age between 20 and 40 and name like’___';
3.统计员工表中,年龄小于60岁的,男性员工和女性员工
select gender,count(
) from user where age <60 group by gender;
4.查询所有小于等于35岁的员工姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按照入职时间降序排序
select name,gender from user where age <= 35 order by age asc, entrydate desc;
5.查询性别为男,且年龄在20-40岁(含)以内的5个员工信息
select * from user where gender = ‘男’ and age between 20 and 40 order by age asc, entrydate asc limit 5;
DQL-执行顺序
编写顺序不是执行顺序
查询年龄大于15的员工、年龄,并根据年龄执行升序排序
select name,age from user e where e.age >15 order by age asc;
先执行from语句 再执行order by 语句 最后执行select
from->where->select->order by->limit
DQL语句的总结
在这里插入图片描述
DCL语句
介绍
DCL是数据控制语言,使用来管理数据库 用户、控制数据库的访问权限
DCL-管理用户
1.查询用户
use mysql;
select * from user;
2.创建用户
create user ‘用户名’@ ‘主机名’ indentified by ‘密码’
3.修改用户密码
alter user ‘用户名’@ ‘主机名’ indentified with mysql_native_password by ‘新密码’;
4.删除用户
drop user ‘用户名’@ ‘主机名’;
创建用户itcast,只能够在当前主机localhost访问,密码123456
create user ‘itcast’@‘localhost’ identified by ‘123456’;
创建用户KL,可以在任意主机上访问该数据库,密码123456
create user ‘KL’@‘%’ identified by ‘123456’;
修改用户KL的访问密码为1234
alter user ‘KL’ @‘%’ identified with mysql_native_password by ‘1234’;
删除itcast@localhost用户
drop user ‘itcast’@‘localhost’;
DCL-权限控制
在这里插入图片描述
查询权限
show grants for ‘用户名’@ ‘主机名’ ;
授予权限
grant 权限列表 on 数据库名.表名 TO ‘用户名’@ ‘主机名’;
撤销权限
revoke 权限列表 on 数据库名.表名 from ‘用户名’@ ‘主机名’;
在这里插入图片描述
函数
函数 是指一段可以直接被另一段程序调用的程序或代码
字符串函数
mysql内设置了很多字符串函数,常用的如下几个

concat拼接–select concat(‘hello’,‘Mysql’);
lower全部转为小写–select lower(‘Hello’);
upper全部转为大写–select upper(‘hello’);
lpad左填充–select lpad(‘01’ , 5 ,‘-’);
rpad右填充–select rpad(‘01’,5,‘-’);
trim去除两头的空格 --selectc trim( ’ hello ');
substring 截取字符串–select substring(‘hello java’,1,5);

案例:企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0 例如:1号员工的工号应该为00001
update emp set worknum = lpad(worknum,5,‘0’);
数值函数
常见的数值如下:
ceil向上取整 — select seil(1.5);
floor向下取整 — select floor(1.9);
mod两个数取模取余 — select mod(3,4);
rand取随机数0-1之间 — select rand();
round四舍五入 — select round(2.34,2);

案例:通过数据库,生成一个六位数的随机验证码
select lpad(round(rand()*1000000000),6,‘0’);
日期函数
curdate()返回当前日期 — select curdate();
curtime()返回当前时间 — select curtime();
now()返回当前时间和日期 — select now();
year(date)获取指定date的年份 — select year(now());
month(date)获取指定date的月份 — select month(now());
day(date)获取指定date的日期 — select date(now());
date_add(date,interval expr type)获取一个日期/时间值加上上一个时间间隔expr后的时间值 — select date_add(date,interval 70 day);
datediff(date1,date2)返回起始时间和结束时间的天数 — select datediff(‘2025-9-10’,‘2025-9-11’);

案例:
查询所有员工的入职天数,并根据入职天数倒序排序
select name,datediff(curdate(),entrydate ) as entrydates from emp order by entrydates desc;
流程控制函数
流程控制函数也是很常用的函数,可以在SQL语句中实现筛选作用,从而提高语句效率
if(value,t,f) 如果value为true,则返回t,否则返回f
ifnull(value1, value2)如果value1不为空返回value1,否则返回value2
case when(val1) then res1 … else default end;如果val为true,返回res1,…否则返回defaul的默认值
case expr when(val1) then res1 … else default end;如果expr的值等于val1,返回res1,…否则返回default默认值
if ---- select if(false, ‘true’,‘false’);
ifnull — ifnull(‘ok’,‘default’ );
ifnull — ifnull(‘’ , default );
case — (case workaddress when(‘北京’,‘上海’) then ‘一线城市’ else ‘二线城市’ end) as ‘工作地址’ from emp;

案例:
统计学生成绩
– >= 85 ‘优秀’
– >=60 ‘及格’
– 否则不及格
select
id,
name,
(case when math >= 85 then ‘优秀’ when math >= 60 then ‘及格’ else ‘不及格’ end) ‘数学’;
(case when English >= 85 then ‘优秀’ when English >= 60 then ‘及格’ else ‘不及格’ end) ‘英语’;
(case when Chinese >= 85 then ‘优秀’ when Chinese >= 60 then ‘及格’ else ‘不及格’ end) ‘语文’;
约束
概念:约束时作用于表中字段上的规则,用于限制存储在表中的数据
目的:保证数据库中数据的正确、有效性和完整性
非空约束 — not null
唯一约束 — unique
主键约束 — primary key
默认约束 — default
检查约束 — check
外键约束 — foreign key
演示代码:
create table user{
id int primary key anto_increment comment ‘id号码’,
name varchar(11) not null unique comment ‘姓名’,
age int check (age between 20 and 40) comment ‘年龄’,
status char(1) default comment ‘状态’,
gender cahr(1)
}comment ‘用户表’;
insert into user(name,age,status,gender) values (‘tt’,20,‘married’,‘男’) , (‘kk’, 21, ‘not married’ , ‘男’ ) ;
外键约束
外键约束
-语法->添加外键
create table 表名(
字段名 数据类型

constraint 外键名称 foreign key(外字段名) references 主表(主列表名)
) ;
—添加外键
alter table 表名 add constraint 外键名称 foreign key(外字段名) reference 主表(主列表名);

alter table table add constraint fk_emp_dept_id foreign key(dept_id) reference dept(id);
删除外键
alter table 表名 drop foreign key 外键名称;

alter table drop foreign key fk_emp_dept_id;
删除/更新行为
not action
resrict
cascade
set null
set default

删除/更新行为
alter table 表名 add constraint 外键名称 foreign key(外字段名) reference 主表(主列表名) on update cascade(关键字) on delete cascade(关键字);
总结:
非空约束: not null
唯一约束: unique
主键约束: primary key(auto_increment)
默认约束: default
检查约束: check
外键约束: foreign key

多表查询
-多表关系
-多表查询概述
-内连接
-外连接
-自连接
-多表查询案列
多表关系
->一对多 多的一方建立外键,一的一方对应主键
->多对多 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
->一对一 在任一方加入外键,关联另一方的主键,并且设置外键为唯一的unique
多表查询–从多张表中查询
select * from 表1,表2…;
笛卡尔积 AB集合的组合的所有情况
(在多表查询中,要消除无效的笛卡尔积)
可以使用where 条件语句
多表查询的分类->连接查询
内连接:相当于AB集合的交集部分的数据
外连接:
左外连接:查询左表所有数据,以及两张表的交集部分数据
右外连接:查询右表所有数据,以及两张表的交集部分数据
自连接:当前表余自生的连接查询,自连接必须使用表名
->子查询
内连接:
内连接查询语法
->隐式内连接
select 子段列表 from 表1,表2 where 条件…;
–表结构: emp , dept
–连接条件: emp.dept_id = dept.id
select emp.name, dept.name from emp , dept where emp.dept_id = dept.id
可以起个别名
select * from emp e, dept d;
select e.name, d.name from emp e , dept d where e.dept_id = dept.id;

->显示内连接
select 字段列表 from 表1 inner join 表2 on 连接条件…;
inner join on
select e.name, d.name from emp e join inner dept d on e.dept_id = dept.id;
外连接
外连接:
左外连接:查询左表所有数据,以及两张表的交集部分数据
select 字段列表 from 表1 left outer join 表2 on 条件
emp , dept
emp.dept_id = dept.id
select e.* , d.name from emp e left outer join dept d on e.dept_id = d.id;
右外连接:查询右表所有数据,以及两张表的交集部分数据
select 字段列表 from 表1 left outer join 表2 on 条件
select d.* , e.name from emp e right outer join dept d on e.dept_id = d.id;
自连接:当前表余自生的连接查询,自连接必须使用表名
select 字段列表 from表a 别名a join 别名b on 条件…;
自连接,可以是内连接查询,也可以是外连接查询;
查询员工及其所属领导的名字
select a.name,b.name from emp a ,emp b where a.managerid = b.id;
查询所有员工及其所属领导的名字,如果员工发没有领导也需要查询出来
select a.name , b name emp
a left join emp b on a.managerid = b.id;
联合查询-union ,union all
把多次查询结果合并起来,形成一个新的查询结果
select 字段列表 from 表A…
union all
select 字段列表 from 表B…;
将薪资低于5000,和年龄大于50的员工全部调查出来
查询年龄大于50岁的人
select * from emp where salary > 5000
union
select * from emp where age > 50;
对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致;
union all 会将全部的数据直接合并到一起,union会对合并之后的数据去重
->子查询
概念:SQL语句中嵌套select语句,称为嵌套查询,又称子查询
select * from t1 where column1= (select column1 from t2);
子查询外部的语句可以是insert/update/delete/select的任何一个
根据子查询结果不同,分为:

标量子查询(查询结果为单个值)
列子查询(子查询结果为一列)
行子查询(子查询结果为一行)
表子查询(子查询结果为多行多列)
查询销售部的所有员工信息
select * from emp where dept_id = (select id from emp where name =‘销售部’);
列子查询
列子查询返回的结果是一列(可以是多行),这种子查询称为列子查询
in、 not in、any 、some 、 all
行子查询
子查询的结果返回的是一行
表子查询
返回的结果是多行多列
事物是一组操作的集合,他是一个不可分割的工作单位,事物会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么成功要么失败
MySQL会默认提交事物


文章转载自:

http://8BP0blLP.yrctp.cn
http://SdZwSUZJ.yrctp.cn
http://tpCu926a.yrctp.cn
http://b1hRzu3o.yrctp.cn
http://5jag50GZ.yrctp.cn
http://fieTF1V9.yrctp.cn
http://lGaDPdlk.yrctp.cn
http://ipb7wwGE.yrctp.cn
http://ESB5lcfC.yrctp.cn
http://vjWwj7Uz.yrctp.cn
http://JPvCPq7F.yrctp.cn
http://wPwIzL6H.yrctp.cn
http://99x0ulQE.yrctp.cn
http://XHBcRvs8.yrctp.cn
http://FI3OUJ7K.yrctp.cn
http://lE2eq1kO.yrctp.cn
http://xJEyhXgO.yrctp.cn
http://dhbqz8wO.yrctp.cn
http://ZkvasV9N.yrctp.cn
http://ZBn9wmFz.yrctp.cn
http://NrKoY8wH.yrctp.cn
http://pzGkNn9w.yrctp.cn
http://BBmq1Uta.yrctp.cn
http://8uMk4BEj.yrctp.cn
http://ZjJmUJpU.yrctp.cn
http://vo4T4No9.yrctp.cn
http://bBJ5viEy.yrctp.cn
http://GjpQ9ufM.yrctp.cn
http://JBRKRVxN.yrctp.cn
http://psWlmPVr.yrctp.cn
http://www.dtcms.com/a/381049.html

相关文章:

  • 看到手就亮灯 防夹手视觉光栅
  • QT M/V架构开发实战:M/V架构的初步认识
  • 4.2-中间件之MySQL
  • 基于hiprint的票据定位打印系统开发实践
  • 批量获取虾皮商品数据:开放API接口操作详解
  • @JsonFormat 如何在get请求中日期字段不报错还能使用
  • C/C++ 标准库中的 `strspn` 函数
  • 关闭click for mouse control
  • C语言打印爱心
  • Notion-Folder-Opener | 一个极简、稳定的本地“链接→打开文件/文件夹”工具
  • Linux系统 SELinux 安全管理与故障排查
  • Vue:后端服务代码解析
  • 仓颉语言与C++对比深度解析:从特性对比到语言选型及实践
  • 嵌入式 - ARM6
  • uniapp | 快速上手ThorUI组件
  • 容器使用绑定挂载
  • 智能排班系统哪个好?从L1到L4,AI排班软件选型指南
  • CentOS7.9 离线升级内核
  • 杨辉三角**
  • Android「Global / Secure / System」三大命名空间全局设置项总结
  • 【嵌入式】【科普】运动控制岗位相关职责
  • 期货盘后空开是认购期权行权?
  • 【一天一个Web3概念】Web3.0赛道分析:新一轮技术浪潮下的机遇与挑战
  • HMI界面设计:9个工业触摸屏原型案例合集与核心要点解析
  • 【一天一个Web3概念】从 Web1.0 到 Web3.0:互联网的三次演进与未来趋势
  • EMG肌电信号可视化系统【附源码】
  • 解读HRV与认知负荷
  • 打工人日报#20250912
  • 有度新版本:待办全新升级、企业互联、自带数据库...协作体验更佳!
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(29):文法運用第9回3+(考え方11)