MySQL数据库常用的指令 -- 持续更新

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL数据库常用的指令 -- 持续更新

  • 启动服务


net start mysql80
net start mysql


  • 停止服务


net stop mysql80
net stop mysql


启动服务和关闭服务指令在以管理员的身份运行的DOS命令窗口起作用。

查看当前数据库的字符集


show variables like "character%";
|character_set_client      | gbk                              | 
| character_set_connection | gbk                              | 
| character_set_database   | utf8mb4                          | 
| character_set_filesystem | binary                           | 
| character_set_results    | gbk                              |
| character_set_server     | utf8mb4                          |
| character_set_system     | utf8mb3                          |
| character_sets_dir       | D:\MySQL install\share\charsets\ |


  • 创建数据库


create datadase <数据库名称>;


查看数据库


查看所有数据库
show databases;
查看指定数据库
show create database <指定的数据库名>;
show create database test;


  • 选择当前操作的数据库


use <数据库名称>;
use test;


  • 删除数据库


drop database <数据库名>;
drop database test;


  • 导出数据


select * from <表名> into outfile "导出的位置";
select * from student into outfile "D:/data/student.txt";


导出数据时可能遇到权限的错误,需要修改原来的配置


  • 导入数据


load data infile <文件名> into table <表名>;
load data infile  "D:/data/studend.txt" into table student;


  • 查看表结构


describe <表名>
• 1


  • 修改指定字段的数据类型
alter table <表名> modified <字段名> 数据类型 ;
alter table <表名> modified <字段名> 数据类型 not null;
alter table student modified name char(8) not null; 


  • 添加一条数据


alter table <表名> add <字段名> <数据类型>;
alter table teacher add name char(4) not null;


  • 更改表名


reanme table <原表名> to <新表名>;
rename table student to person;


  • 删除表


drop table <表名>;
drop table if exists <表名>;   # 如果表存在则删除
drop table if exists student;


表记录的操作

  • 插入数据
方式一
insert into <表名> values(<每一个字段对应的值>);
insert into student values("2020100",'小明','男'.'2020-04-3',null,nulll,null);
方式二
insert into <表名> student(<需要插入的字段名>) values(<需要插入字段的值>);
insert into student(stu_id,name,sex,birth) values("2020100",'小明','男'.'2020-04-3');
方式三
insert into student
  stu_id="2020100",
  name = "小明",
  sex = '男',
  birth = '2020-04-3';


  • 替换旧纪录


如果使用insert into 插入一条主键已经存在的数据,会报错
replace into <表名> values(<插入数据的数据>)  # 用法和insert 一样


  • 修改数据
修改一个表中的数据
updata <表名> set 列名1=exper1,列名2=exper2...   where 条件   # 修改符合条件的行,如果省略 where 则修改所有的行 
updata student set name="小红",sex="女"   where stu_id='2020100';
修改多个表的数据
updata <表名1>,<表名2> set 表名1.列名1=exper1,表名2.列名2=exper2...   where 条件  # 修改符合条件的行,如果省略 where 则修改所有的行 
updata <表名1>,<表名2> set 表名1.列名1=exper1,表名2.列名2=exper2...   where 条件  
updata student,teather set student.name='小明' teather.name="小红"   where   student.stu_id == '2020100' and teather.tea_id == '1223';


  • 删除记录


# 删除表中的行
delete from <表名> where 条件;   # 如果没有条件则会直接删除所有的行
delete from student where student name == '李四';


  • 清空数据


truncate table 表名  # 清除表中的所有数据


查询数据


  • 查询表中的若干列


查询列名1,列名2 所有的数据
select 列名1,列名2 from student;


  • 查询表中的所有数据


select * from <表名>;


查询某些列的所有数据


select <列名>,<列名2> from  <表名>;
select name,age from  user;   # 查询user表中的name和age


查询某些表中符合条件的数据

select * from <表名> where 条件 
条件可以是多个用
select * from user where aeg>10;   查询年龄大于10
select * from user where aeg>10 and sex="女";   查询年龄大于10的女生


过滤重复元素


select distinct name from user;  # 查询user表中的姓名,去除重复值


多表查询


内连接

内连接也称自然连接,是组合两个表的常用方法,内连接根据每一个表共有的列的值进行匹配两个表中的行,只是每一个表都存在相匹配的列值的记录才会出现在结果集中,在内连接中所有表都是平等的没有主次之分,

连接


select 列名 from 表1 [inner] join 表名2 on 表名1.列名 = 表名2.列名;
或者
select 列名列表 from 表名1,表名2 where 表名1.列名=表名2.列名;
select A.id,A.name,B.class_name from student as A ,class as B 
where A.class_id = B.class_id

外连接

可以只限制一个表,而对另一个表不加限制,将另一表中的所有行都展现在结果集中(没有匹配到的数据称为悬浮元组)

参与外连接的表有主次之分,以主表中的每一行数据进行匹配,符合条件的数据返回到结果集中,不符合的,在另一个表相应列的位置填上 null

语法格式

左连接
主表在连接符的左边,从左侧引用左表的所有行后向外连接
select 列名列表 from 表1 as A left [outer] join 表名2 as B on A.列名=B.列名
右连接
主表在连接符的左边,从左侧引用左表的所有行后向外连接
select 列名列表 from 表1 as A right [outer] join 表名2 as B on A.列名=B.列名
select A.class_no,A.class_name,A.dep_name,B.stu_no,B.stu_name
from class as A left join student as B on A.class_no=B.class_no;
注 as 可以省略
select A.class_no,A.class_name,A.dep_name,B.stu_no,B.stu_name
from class A left join student B on A.class_no=B.class_no;

自连接


如果在连接查询中,涉及的都是一个表,这种查询就是内连接查询


select 列名列表 from 表名1 as A ,表名1 as B


where语句常用的一些查询条件


比较表达式
=(等于)、<(小于)、>(大于) <>(不等于)、!>(不大于)、 !<(不小于)、 >=(大于等于)、 <=(小于等于)、!=(不等于)
查询年龄在20岁以的学生的姓名性别年龄
select stu_name,stu_sex,year(now())-year(stu_birth) as age 
  from student
  where year(now())-year(stu_birth) <20;


逻辑表达式

and,or, not


查询年龄在20岁以的女学生的姓名性别年龄
select stu_name,stu_sex,year(now())-year(stu_birth) as age 
  from student
  where year(now())-year(stu_birth) <20 and stu_sex ='女';

between… and … 关键字

查询 属性值在在指定范围内的元组,其中between后是范围的下限,and后面是上限

查询年龄在19-20岁的女生的姓名和年龄
select stu_name,year(now())-year(stu_birth) as age 
  from student
  where year(now())-year(stu_birth) <20 and stu_sex ='女' and ;

not between… and … 关键字

不在某个范围用法同上

in,not in

同between关键字一样,简化的检索的范围


表达式 [not] in (表达式1,表达式2)
select * from user 
where aeg in ('18','20')  
查询年纪为18和20的人

like关键字

模糊查询,可以根据不确切的线索进行搜索信息

表达式 not like <匹配串>


常用的查询条件 只有在lik语句中才有意义

  • %百分号:表示0-n个任意字符
  • _下划线:表示单个任意字符
  • []封闭方括号:表示括号里面列出的任意一个字符
  • [^] :任意一个没有在方括号里面列出的字符

查询“王”姓学生的学号及姓名

常用的查询条件 只有在lik语句中才有意义
%百分号:表示0-n个任意字符
_下划线:表示单个任意字符
[]封闭方括号:表示括号里面列出的任意一个字符
[^] :任意一个没有在方括号里面列出的字符
查询“王”姓学生的学号及姓名

涉及空值的查询

is null(为空),is not null(不为空)

查询选修课程却没有成绩的同学

select * 
  from score
  where score is null;
第一个 score 是表名
,第二个是 列名


分组查询


聚合函数

count() max(),min() 用于数值,日期,字符

sum(),avg() 只能用于数值

聚合函数一般忽略null值


image.png


查询学生总人数
select count(*)
 from student;
查询选修020001课程的学生人数
select count(distinct stu_no) 
 from score
 where soure_no = '020001';
查询选修020001课程的分数最高的学生
select max(score)
 from score
 where soure_no = '020001';

group by

能够按照指定列对查询结果进行分组统计,该字句写在,where 后面

将学生表中按成绩统计出男生和女生的平均年龄及人数

select class_no,stu_sex ,avg(year(now())-year(stu_birth)) as 平均年龄,count(*) as 人数
 from student
 group by class_no,stu_sex;

未完待续

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL 存储 算法
mysql常用指令操作
mysql常用指令操作
|
6月前
|
SQL 关系型数据库 MySQL
sql数据库指令
SQL(Structured Query Language,结构化查询语言)是用于管理关系数据库的标准编程语言。以下是一些常用的SQL数据库指令: 1. **创建数据库** ```sq
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库——索引(4)-SQL性能分析-profile详情、explain(profile查看指令,explain执行计划中各个字段的含义)
MySQL数据库——索引(4)-SQL性能分析-profile详情、explain(profile查看指令,explain执行计划中各个字段的含义)
82 2
|
7月前
|
NoSQL Shell MongoDB
NoSQL数据使用指令和引擎连接数据库实例
【5月更文挑战第8天】本文介绍了MongoDB的本地使用和常用操作,包括通过mongo shell连接数据库、显示数据库和集合,以及副本集设置。最后提到了MongoDB的日志功能和顶点集的使用,如capped collection的创建和管理。
79 3
|
7月前
|
关系型数据库 MySQL PHP
MYSQL常用操作指令
MYSQL常用操作指令
|
关系型数据库 MySQL Linux
linux下mysql数据库操作指令(流程)
MySQL 是最流行的关系型数据库管理系统之一,属于 Oracle 旗下产品
227 0
|
SQL JavaScript 前端开发
ChatGPT工作提效之在程序开发中的巧劲和指令(创建MySQL语句、PHP语句、Javascript用法、python的交互)
ChatGPT工作提效之在程序开发中的巧劲和指令(创建MySQL语句、PHP语句、Javascript用法、python的交互)
222 0
|
SQL 关系型数据库 MySQL
mysql DCL 数据权限操作指令
mysql DCL 数据权限操作指令
135 0
|
关系型数据库 MySQL 数据库
MySQL数据库,常用指令详解
本期讲解:mysql中常用指令详解
|
NoSQL Linux 数据库
Redis学习8:key通用指令操作、数据库通用指令操作
key的基本通用操作:删除 获取 查询是否存在及获取类型
Redis学习8:key通用指令操作、数据库通用指令操作