一、MySQL基础学习

目录

1、MySQL启动

管理员的身份运行cmd

java 复制代码
net start mysql80	#80指的是安装的时候指定的注册到Windows中的系统服务的系统名称
net stop mysql80

2、MySQL客户端连接

  • 方式一:MySQL自带的客户端命令行

  • 方式二:Windows系统自带的命令行工具执行指令

java 复制代码
mysql -u root -p	#输入密码即可在cmd命令行窗口使用mysql

注意: 使用这种方式时,需要配置PATH环境变量

添加环境变量:

3、SQL

3.1、SQL语句分类

3.2、DDL(数据库定义语言)

3.2.1、操作数据库

sql 复制代码
--创建库
create database 库名;
--创建库时判断库是否存在,不存在则创建
create database if not exists 库名;
--查看所有数据库
show databases;
--使用指定数据库
use 库名;
--查看当前指定数据库包含的数据表
show tables;
--查看数据库的结构定义信息
show create database 库名;
--删除数据库
drop database 库名;
--修改数据库的字符集为utf8
alter database 库名 character set utf8;

3.2.2、操作数据表

sql 复制代码
--创建表
create table 表名 (
        字段1 字段1类型[comment 字段1注释],
        字段2 字段2类型[comment 字段2注释],
        字段3 字段3类型[comment 字段3注释],
        ......
        字段n 字段n类型[comment 字段n注释]
)[comment 表注释];
-- 查看表结构
desc 表名;
-- 查看创建表的SQL语句
show create table 表名;
-- 修改表名
alter table 表名 rename to 新的表名;
--添加一个新的字段
alter table 表名 add 字段; 字段类型;
--修改字段名
alter table 表名 rename column 字段名 to 新的字段名;
--修改字段类型(注意类型修改前后数据是否兼容)
alter table 表名 modify column 字段名 新的字段类型;
--删除一个字段
alter table 表名 drop 字段名;
--删除表
drop table 表名;
--删除表时判断表是否存在,若存在则删除
drop table if exists 表名;
  • 数据类型:数值类型、字符串类型、日期时间类型
    • 数值类型

      eg:age TINYINT UNSIGNED,score DOUBLE(4,1)小数一共4位,保留一位小数;

    • 字符串类型

    • 日期时间类型

3.3、DML(数据库操作语言)

3.3.1、增加 insert into

sql 复制代码
-- 写全所有列名
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
-- 不写列名(所有列全部添加)
insert into 表名 values(值1,值2,...值n);
-- 插入部分数据
insert into 表名(列名1,列名2) values(值1,值2);

3.3.2、删除 delete

sql 复制代码
-- 删除表中数据
delete from 表名 where 列名  = 值;
-- 删除表中所有数据
delete from 表名;
-- 删除表中所有数据(高效 先删除表,然后再创建一张一样的表。)
truncate table 表名;

3.3.3、修改 update

sql 复制代码
-- 不带条件的修改(会修改所有行,更新整张表)
update 表名 set 字段名1=值1,字段名2=值2;
-- 带条件的修改
update 表名 set 字段名1=值1,字段名2=值2 where 列名=值;

举例:

3.4、DQL(数据库查询语言)

3.4.1、基本查询

sql 复制代码
--查询多个字段
select 字段1,字段2,字段3...... from 表名;
select * from 表名;

--设置别名
select 字段1 [as 别名1],字段2 [as 别名2]...... from 表名;
#select workadderss as '工作地址' from emp;
#select workadderss '工作地址' from emp;

--去除重复记录
select distinct 字段列表 from 表名;
#select distinct workadderss '工作地址' from emp;

3.4.2、条件查询

sql 复制代码
select 字段列表 from 表名 where 条件列表;

BETWEEN...AND (在什么之间)和 IN( 集合):

sql 复制代码
-- 查询年龄大于等于20 小于等于30				
SELECT * FROM student WHERE age >= 20 &&  age <=30;
SELECT * FROM student WHERE age >= 20 AND  age <=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
				
-- 查询年龄22岁,18岁,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
SELECT * FROM student WHERE age IN (22,18,25);

is not null(不为null值) 与 like(模糊查询)、distinct(去除重复值)

sql 复制代码
-- 查询英语成绩不为null
SELECT * FROM student WHERE english  IS NOT NULL;
	
 _:单个任意字符
 %:多个任意字符
-- 查询姓马的有哪些? like
SELECT * FROM student WHERE NAME LIKE '马%';
-- 查询姓名第二个字是化的人			
SELECT * FROM student WHERE NAME LIKE "_化%";				
-- 查询姓名是3个字的人
SELECT * FROM student WHERE NAME LIKE '___';					
-- 查询姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '%德%';
 
-- 关键词 DISTINCT 用于返回唯一不同的值。
-- 语法:SELECT DISTINCT 列名称 FROM 表名称
SELECT DISTINCT NAME FROM  student ;

3.4.3、聚合函数

将一列数据作为一个整体,进行纵向计算。

注意:null值不参与所有聚合函数运算

sql 复制代码
select 聚合函数(字表列段) from 表名;

# 聚合函数
# 统计企业的员工数量
select count(*) from emp;
select count(*) from emp

# 统计该企业员工的平均年龄
select avg(age) from emp;

# 统计该企业员工的最大年龄
select max(age) from emp;

# 统计该企业员工的最小年龄
select min(age) from emp;

# 统计西安地区员工的年龄之和
select sum(age) from emp where workadderss = '西安';

3.4.5、分组查询

sql 复制代码
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过来条件];

# 分组查询
# 根据性别分组,统计男性员工和女性员工的数量
select gender,count(*) from emp group by gender;

# 根据性别分组,统计男性员工和女性员工的平均年龄
select gender,avg(age) from emp group by gender;

# 查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workadderss ,count(*) from emp where age < 45 group by workadderss having count(*) > 3;


where和having的区别:

  • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。

  • 判断条件不同:where不能对聚合函数进行判断,而having可以。
    注意:

  • 执行顺序:where > 聚合函数 > having。

  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

3.4.6、排序查询

sql 复制代码
select 字段列表 from 表名 order by 字段1 排序方式,字段2 排序方式2;

3.4.7、分页查询

sql 复制代码
select 字段列表 from 表名 limit 起始索引,查询记录数;

# 分页查询
# 查询第1页员工数据,每页展示10条记录
select * from emp limit 0,10;

select * from emp limit 10;

# 查询第2页员工数据,每页展示10条记录 ------>(页码 - 1)* 页展示记录数
select * from emp limit 10, 10;

注意:

  • 起始索引从0开始,起始索引 = (查询页码 - 1)*每页显示记录数。
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是limit。
  • 如果查询的第一页数据,起始索引可以省略,直接简写为limit 10。

3.5、DCL(数据库控制语言)

3.5.1、管理用户

sql 复制代码
---查询用户
use mysql;
select * from user;
---添加用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
---删除用户
DROP USER '用户名'@'主机名';

3.5.2、权限管理

sql 复制代码
-- 查询权限
SHOW GRANTS FOR '用户名'@'主机名';
SHOW GRANTS FOR 'lisi'@'%';

-- 授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
-- 给张三用户授予所有权限,在任意数据库任意表上
GRANT ALL ON *.* TO 'zhangsan'@'localhost';

-- 撤销权限:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';
相关推荐
冰红茶兑滴水41 分钟前
MySQL 内置函数
数据库·mysql
ThisIsClark1 小时前
【后端面试总结】MySQL面试总结
mysql·面试·职场和发展
ThisIsClark1 小时前
【后端面试总结】MySQL索引
mysql·面试·职场和发展
代码中の快捷键2 小时前
MySQL数据库存储引擎的数据结构
数据结构·数据库·mysql
好记忆不如烂笔头abc2 小时前
logminer挖掘日志归档查找问题
数据库·sql·mysql
xnuscd12 小时前
Milvus概念
数据库·学习·mysql
云边的快乐猫13 小时前
navicat远程连接虚拟机centos系统的mysql
linux·mysql·centos·虚拟机·navicat
漫天转悠13 小时前
MySQL 七种JOIN连接详解
数据库·mysql
尘浮生13 小时前
Java项目实战II基于Java+Spring Boot+MySQL的智能停车计费系统(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·mysql·微信小程序·maven
东阳马生架构14 小时前
MySQL原理简介—9.MySQL索引原理
mysql