MySQL必知必会(初级篇)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: MySQL必知必会(初级篇)

1.基本概念


数据库(DataBase,DB),是统一管理的、长期存储在计算机内的、有组织的相关数据的集合。特点是数据见联系密切、冗余度小、独立性高、易扩展,并且可以为各类用户共享。


MySQL:是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一。


MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 具有体积小、速度快、总体拥有成本低以及开放源码的特点。

2.SQL语言

SQL(Structured Query Language):结构化查询语言

其实就是定义了操作所有关系型数据库的规则。它是关系数据库中最普遍使用的语言,包括数据查询(Query)、数据操纵(Manipulation)、数据定义(Definition)、数据控制(Control)功能,是一种通用的、功能强大的关系数据库的标准语言。


SQL语言功能强大,完成核心功能只用9个动词,包括以下几类:


数据查询(DQL):select

数据操纵(DML):create、drop、alter

数据定义(DDL):insert、update、delete

数据控制(DCL):grant、revoke

2.SQL通用语法

① SQL语句可以单行或多行书写,以分号结尾。

2可使用空格和缩进来增强语句的可读性。

3 MySOL 数据库的SQL语句不区分大小写,关键字建议使用大写。

4三种注释

单行注释:–注释内容或#注释内容(mysql特有)多行注释:/注释/


2.1 DCL(数据控制语言)

DCL(Data Control Language)数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE 等


2.1.1创建用户

创建一个test用户可以在任意IP地址上登陆mysql

create user 'mc'@'%' identified by 'root';

修改用户密码

set password for 'mc'@'%' = '123456';

刷新权限(修改完密码,一定要刷新权限)

flush privileges;

2.1.2 使用grant命令给用户授权

格式:grant 权限 on 数据库对象 to 用户


给用户授予所有的权限

grant all on test.user to 'mc'@'%';

给数据库中的所有表授权

grant all on test.* to 'mc'@'%';


授予普通数据用户,查询、插入、更新、删除数据库中所有表数据的权限

grant insert,update,delete,select on test.user to 'mc'@'%';

2.1.3 使用revoke命令撤销权限

撤销用户所有权限

revoke all on test.user from 'mc'@'%';

撤销普通数据用户,查询、插入、更新、删除数据库中所有表数据的权限

revoke insert,update,delete,select on test.user from 'mc'@'%';

查看权限

show grants for 'mc'@'%';

删除用户

drop user 'mc'@'%';

2.2 DDL(数据定义语言)

DDL(Data Definition Language)数据定义语言用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等


2.2.1 mysql常用约束类型

image.png

创建一个student表(PRIMARY KEY、DEFAULT)

-- 设置主键的方式一:
create table student(
  id int primary key,   -- 设置主键
  name varchar(20) not null,
  gander char(4) default '男', -- 设置默认值为  男
  country varchar(50),
  brithday date
);
-- 设置主键的方式二:
create table student(
  id int, 
  name varchar(20) not null,
  gander char(4) default '男', 
  country varchar(50),
  brithday date,
  primary key(id)
);

创建图书表(AUTO_INCREMENT、UNIQUE)

create table book(
  id int primary key auto_increment, -- 设置主键,并设置自动递增
  name varchar(20) not null,
  bar_code varchar(30) not null unique,  -- 这就是唯一约束的定义
  s_id int not null,
)

创建图书和作者表(FOREIGN KEY)

-- 创建作者表
create table author(
  aut_id int ,
  aut_name varchar(20) not null,
  gander char(2),
  country varchar(50),
  brithday datetime
  primary key(aut_id,aut_name)  -- 联合主键
);
-- 创建图书表
create table book(
  id int primary key auto_increment,
  name varchar(20) not null,
  bar_code varchar(30) not null unique,
  aut_id int not null,
  foreign key (aut_id) references author(aut_id)  -- 外键约束
)

2.2.2 使用alter命令修改表结构

-- 添加列
alter table user add(hobby varchar(50),city varchar(20));
-- 修改列的类型
alter table user modify city varchar(30);
-- 修改表的列名和类型
alter table user change hobby hobbies varchar(20);
-- 删除列
alter table user drop hobbies;
-- 修改表名
alter table user rename users;

2.2.3 使用drop命令删除表

-- 删除表
drop table users;
-- 查看表结构
desc users;

2.3 DML(数据操纵语言)

DML(Data Manipulation Language)数据操作语用来对数据库中表的数据进行增删改。关键字:insert, delete,update等


2.3.1 使用insert命令插入数据

-- 单条数据插入
insert into `student` (id,name,gander,country,brithday) values (1,'tom','男','美国','1999-1-14');
insert into `student` values (2,'jack','男','英国','1969-1-1');
-- 批量插入
insert into `student` (id,name,gander,country,brithday) values (3,'lili','女','美国','1998-2-14'),(4,'jery','男','英国','1969-1-1'),(5,'lucy','女','英国','1989-10-1');

2.3.2 使用update命令插入数据

update `student` set name = 'tony';
-- 上边的语句会将该表中所有的name全修改为tony,因此我们需要使用where语句进行限制
-- 如下:
-- 将id为2的学生姓名改为tony
update `student` set name = 'tony' where id = 2;

2.3.3 使用delete命令插入数据

-- 删除表中的所有数据
delete from student;
-- 删除单条数据,删除id为5的学生数据
delete from student where id = 5;

2.4 DQL(数据查询语言)

DQL(Data Query Language)数据查询语言用来查询数据库中表的记录(数据)。关键字:select,where 等


2.4.1 单表查询

创建下面四个表,然后填充几组数据


course表

image.png


scores表

image.png


student表

image.png


teacher表

image.png


查询表中所有数据

-- 查询所有   * 表示所有列 
select * from 表名;
-- 查询指定列或所有
select 列名1,列名2[...] from 表名;
-- 举个例子
select * from student;
select id,name,age,genderfrom student;

列运算

数量类型的列可以做加、减、乘、除等运算;

--- 学生年龄都长了一岁
select id,name,age+1,genderfrom student;

注意:


null加任何值都等于null

将字符串做加减乘除运算,会把字符串当作0。

别名

给数据表中的列名起个别名,方便查询数据

-- 别名使用方式:只需要在列名后加 as 新列名即可,as可省略
select 列名1 as 别名1,列名2 as 别名2[...] from 表名;
select 列名1 别名1,列名2 别名2 from 表名;
-- 给学生的id,name起个别名
select id as stu_id,name as stu_name,age,genderfrom student;

条件查询

-- 条件控制  select * from 表名 where 列名=指定值;
select * from student where id = 3;
select * from student where id > 2;
select * from student where age < 20;
select * from student where id in (1,2,3);
select * from student where age between 18 and 20;
select * from student where id between 1 and 5 or age > 18;
select * from student where id between 1 and 5 and age > 18;

模糊查询

-- _代表匹配任意一个字符,%代表匹配0~n个任意字符
select * from student where name like '李_'; 
select * from student where name like '张%';

排序

-- 升序:asc为默认值可以不写
select * from 表名 order by 列名 asc;
-- 按年龄从小到大排序
select * from student order by age asc;
-- 降序:desc
select * from 表名 order by 列名 desc;
-- 按年龄从大到小排序
select * from student order by age desc;

聚合函数

count():统计查询结果的行数
select count(列名) from 表名;
select count(gender) from student;
select max(age) from student where id > 5;

max() 和 min()

max()查询指定列的最大值,min()表示查询指定列的最小值。
select max(列名) from 表名;
select min(列名) from 表名;
-- 举个栗子
select max(age) from student where id > 5;
select min(age) from student;

sum():返回指定列的总和

select sum(列名) from 表名;
-- 查询成绩总和
select sum(score) from scores;

avg():返回指定列数据的平均值

select avg(列名) from 表名;
-- 查询平均成绩
select avg(score) from scores;

分组查询

-- 语法格式
select 分组函数,分组后的字段 from 表名 [where 筛选条件] group by 分组的字段 [having 分组后的筛选]
-- 举个栗子
select gender from student group by gender;
-- 查询年龄大于18岁的男女生人数
select gender,count(gender) from student where age > 18 group by gender;
-- 查询男生的年龄总和以及平均年龄
select gender,avg(age) avg_age,sum(age) sum_age from student GROUP BY gender HAVING  gender = '男';

注意:


分组函数的查询条件肯定放在having子句中;

和分组函数一同查询的字段最好作为分组条件的字段。

limit子句

LIMIT用来限定查询结果的起始行,以及总行数,通常用来做分页查询。

select * from 表名 limit 起始行,总行数;
-- 举个栗子
-- 从下标为 5 开始查找 2 条记录
select * from student limit 5,2;
-- 开始表中从头查找 5 条记录
select id,name,age,gender from student limit 5;

2.4.2 多表查询

内连接

内连接: INNER JOIN ON,通常用来连接两个表中都存在的列值,在数学上可以理解为两个数的交集,即共同拥有的部分。


image.png


-- 语法格式
select 列名 from 表名1 inner join 表名2 [on子句]
--举个栗子
select * from teacher t join course c on c.t_id = t.id;
select * from teacher t inner join course c on c.t_id = t.id;

外连接

外连接又可以分为左外连接 和右外连接;


左连接:LEFT JOIN,会将语句左边的表中的所有记录全部表示出来,而右表只会显示符合搜索条件的记录,如果左表的记录右表不存在,则以NULL来填充;


右连接:RIGHT JOIN,会将语句右边的表中的所有记录全部表示出来,而左表只会显示符合搜索条件的记录,如果右表的记录左表不存在,则以NULL来填充;

image.png


左外连接

-- 语法格式:outer可省略
select 列名 from 表名1 left outer join 表名2 [on子句]
-- 举个栗子
select * from course c left outer join teacher t on c.t_id = t.id;
select * from course c left join teacher t on c.t_id = t.id;

右外连接

-- 语法格式:outer可省略
select 列名 from 表名1 right outer join 表名2 [on子句]
-- 举个栗子
select * from course c right  outer join teacher t on c.t_id = t.id;
SELECT * from course c right join teacher t on c.t_id = t.id;
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 关系型数据库 MySQL
MySQL初级篇(四)
MySQL初级篇(四)
|
存储 NoSQL 关系型数据库
MySQL初级篇(一)
MySQL初级篇(一)
|
关系型数据库 MySQL 索引
MySQL初级篇(二)
MySQL初级篇(二)
|
关系型数据库 MySQL
MySQL初级篇(三)
MySQL初级篇(三)
|
SQL 关系型数据库 MySQL
【MySQL】MySQL触发器入门宝典,助力MySQL初学者打下基本功
【MySQL】MySQL触发器入门宝典,助力MySQL初学者打下基本功
97 0
|
SQL 存储 关系型数据库
MySQL常用基础 - 小白必看(二)
概念:是一个数据定义语言 该语言部分包括: 1、对数据库的常用操作 2、对表结构的常用操作
113 0
MySQL常用基础 - 小白必看(二)
|
SQL 存储 缓存
MySQL 学习记录系列(四)
分布式数据库架构适合大数据量、负载高的情况,它有良好的拓展性和高可用性。通过在多台服务器之间分布数据,可以实现在多台服务器之间的负载均衡,提高访问效率。
130 0
MySQL 学习记录系列(四)
|
存储 SQL 安全
MySQL 学习记录系列(二)
视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。视图就是一条SELECT语句执行后返回的结果集。所以在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。
117 0
MySQL 学习记录系列(二)
|
SQL 缓存 前端开发
MySQL 学习记录系列(六)
在业务系统中,需要记录当前业务系统的访问日志,该访问日志包含:操作人,操作时间,访问类,访问方法,请求参数,请求结果,请求结果类型,请求时长等信息。记录详细的系统访问日志,主要便于对系统中的用户请求进行追踪,并且在系统的管理后台可以查看到用户的访问记录。
94 0
MySQL 学习记录系列(六)
|
存储 SQL 缓存
MySQL 学习记录系列(三)
最上层是一些客户端和链接服务,包含本地socket通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
120 0
MySQL 学习记录系列(三)