当前位置:网站首页>MySQL基础
MySQL基础
2022-08-03 19:05:00 【#橘子汽水】
一、数据库的相关概念
1、数据库
◆ 数据库即存储和管理数据的仓库。
◆ 数据库简称DB(DataBase)。
简言之,数据库就是将数据存储在硬盘上,达到持久化存储的效果。
2、数据库管理系统
◆ 管理数据库的软件
◆ 简称DBMS(DataBase Management System)。
◆ 可以通过数据库管理系统操作数据库,对数据库中的数据进行增删改查操作。
需要注意的是,数据库≠数据库管理系统。例如:MySQL,实际上是一款数据库管理系统,而不是我们平时所说的MySQL数据库。一个数据库管理系统可包含多个数据库。
3、SQL
◆ SQL:英文名称->Structured Query Language,是一种结构化查询语言。
◆ 是操作关系型数据库的编程语言。
数据库根据其数据的存储方式可以分为关系型数据库和非关系型数据库,两者的区别可参照关系型数据库和非关系型数据库的区别
◆ SQL定义了所有关系型数据库的统一标准,即可以使用SQL操作所有的关系型数据库管理系统。
二、MySQL
1、安装MySQL
◆ MySQL有两种安装方式。MySQL官网下载地址
zip版:俗称绿色版,登录MySQL官网,下载压缩包,解压后直接以文件夹的形式呈现,不需要手动安装,但需要自己手动进行相关配置。
msi版:在MySQL官网下载安装包,双击运行,进入安装界面,可根据自身需求有选择的进行安装。
2、启动MySQL服务
◆ 以管理员身份运行命令提示符
net start mysql //启动mysql服务
net stop mysql //停止mysql服务
◆ 也可打开任务管理器,在服务中找到MySQL服务右击打开或关闭服务。
3、MySQL登录和退出
◆ 登录
打开命令提示符,输入mysql -u 用户名 -p 密码,回车,左边出现mysql>,则表示登陆成功
◆ 退出
使用 exit / quit 均可退出mysql登录。
三、SQL概述
1、SQL通用语法
◆ SQL语句可以单行或多行书写,以分号结尾。
◆ MySQL数据库管理系统的SQL语句不区分大小写。
◆ SQL注释
单行注释:– 注释内容 或 # 注释内容(MySQL特有)
多行注释:/* 注释 */
2、SQL分类
◆ DDL(Data Definition Language):数据定义语言,用来定义数据库对象:数据库、表、列等。
◆ DML(Data Manipulation Language):数据操作语言,用来对数据库中表的数据进行增删改。
◆ DQL(Data Query Langusge):数据查询语言,用来查询数据库中表的记录(数据)。
◆ DCL(Data Control Language):数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。
四、DDL
DDL主要用来操作数据库,表等。
1、操作数据库
DDL操作数据库主要就是对数据库进行增删查操作。
1.1、创建数据库
◆ 创建数据库
格式:CREATE DATABASE 数据库名称;
举例: 创建数据库db
create database db;
◆ 创建数据库(判断,如果存在则创建)
格式:CREATE DATABASE IF NOT EXISTS 数据库名称;
举例: 当数据库db不存在时,创建数据库db。
create database if not exists db;
一般使用第二种SQL来创建数据库,在创建前先判断数据库是否存在。
1.2、查询数据库
格式:SHOW DATABASE;
1.3、使用数据库
◆ 使用数据库
格式:USE 数据库名称;
举例: 使用数据库db。
use db;
◆ 查看当前使用的数据库
格式:SELECT DATABASE();
举例: 查看当前使用的数据库。执行该SQL语句后会返回当前使用的数据库,如执行完use db;后查看当前使用的数据库会返回db。
select database();
1.4、删除数据库
◆ 删除数据库
格式:DROP DATABASE 数据库名称;
举例: 删除创建的数据库db。
drop database db;
◆ 删除数据库(判断,如果存在则删除)
格式:DROP DATABASE IF EXISTS 数据库名称;
举例: 如果数据库管理系统中存在数据库db,则删除数据库db。
drop database if exists db;
一般使用第二种SQL来删除数据库,在删除前先判断数据库是否存在。
2、操作表
2.1、数据类型
MySQL支持多种类型,可以分为三类:
◆ 数值
tinyint: 小整数型,占一个字节
int:大整数类型,占四个字节
eg:age int
double:浮点类型
使用格式:字段名 double(总长度,小数点后保留的位数)
eg:score double(5,2)
◆ 日期
date:日期值,只包含年月日。
eg:birthday date
datetime:混合日期和时间值,包含年月日时分秒。
eg:birthday datetime
◆ 字符串
char:定长字符串。
优点:存储性能高。
缺点:浪费空间。
eg:name char(10) 如果存储的数据字符个数不足10个,也会占10个空间。
varchar:变长字符串。
优点:节约空间。
缺点:存储性能底。
eg:name varchar(10) 如果存储的数据字符个数为n,且n<10,则数据字符个数是占n个空间。
以上MySQL数据类型并不全,只是比较常用的一些数据类型,查看全部数据类型可转MySQL数据类型 | 菜鸟教程
2.2、创建表
格式:CREATE TABLE 表名(
字段名1 数据类型1,
字段名2 数据类型2,
…
字段名n 数据类型n
);
举例: 创建user表,包含id,username和password三个字段。
create table user(
id int,
username varchar(20),
password varchar(20)
);
创建表建议也进行是否存在的判断,如:create table if not exists user(…);
2.3、查询表
◆ 查询当下数据库下所有表的名称
格式:SHOW TABLES;
举例: 切到系统数据库mysql下,查询该数据库下所有表的名称。
show tables;
◆ 查询表结构
格式:DESC 表名称;
举例: 查询数据库
desc user;
2.4、修改表
◆ 修改表名
格式:ALTER TABLE 表名 RENAME TO 新的表名;
举例: 修改db数据库下user表的表名为user_info。
alter table user rename to user_info;
◆ 添加一列
格式:ALTER TABLE 表名 ADD 列名 数据类型;
举例: 往user_info表中添加一列,字段名为status,数据类型为int型。
alter table user_info add status int;
◆ 修改数据类型
格式:ALTER TABLE 表名 MODIFY 列名 新数据类型;
举例: 修改user_info表中status字段的数据类型为varchar(2);
alter table user_info modify status varchar(2);
◆ 修改列名和数据类型
格式:ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
举例: 修改user_info表的status字段为email字段,字段类型为varchar(20)。
alter table user_info change status email varchar(20);
◆ 删除列
格式:ALTER TABLE 表名 DROP 列名;
alter table user_info drop email;
2.5、删除表
◆ 删除表
格式:DROP TABLE 表名;
举例: 删除user_info表。
drop table user_info;
◆ 删除表时判断表是否存在
格式:DROP TABLE IF EXISTS 表名;
举例: 删除user_info表
drop table if exists user_info;
一般使用第二种SQL来删除表,在删除前先判断表是否存在。
五、DML
1、添加数据
◆ 给指定列添加数据
格式:INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);
举例: 创建user表,同上创建,向表中添加以下数据,id=1,username=zhangsan,password=123;id=2,username=lisi,password=234
create table if not exists user (
id int primary key,
username varchar(20),
password varchar(20)
);
insert into user(id,username,password) values(1,“zhangsan”,“123”);
insert into user(id,username,password) values(2,“lisi”,“234”);
给指定列添加数据,没有涉及到添加的字段将会被自动设为默认值。例:
insert into user(id,username) values(4,“wangwu”);
◆ 给全部列添加数据
格式:INSERT INTO 表名 VALUES(值1,值2,…);
举例: 插入wangwu的信息,给全部列添加数据时values必须包含所有字段,否则会报错。
insert into user values(3,“wangwu”,“789”);
◆ 批量添加数据
格式:
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
举例: 插入张三,李四的信息。
insert into user(id,username,password) values(5,“张三”,“123”),(6,“李四”,“234”);
或
insert into user values(5,“张三”,“123”),(6,“李四”,“234”);
2、修改数据
格式:UPDATE 表名 SET 列名1=值1,列名2=值2,… WHERE 条件;
举例: 修改id为3的用户信息为 王五,456。
update user set username=“王五”,password=“456” where id=3;
3、删除数据
格式:DELETE FROM 表名 WHERE 条件;
举例: 删除user表中 “张三” 的数据。
delete from user where username=“张三”;
六、DQL
DQL主要是对数据库中的内容进行查询。其查询形式比较灵活,需要根据具体需求实现,数据库查询操作也是最重要的 ,需重点掌握。
数据准备:如有需要请点击该链接进行资源下载->SQL脚本,无需积分。
1、基础查询
1.1、语法格式
◆ 查询多个字段
SELECT 字段列表 FROM 表名;
SELECT * FROM 表名; # 查询所有数据
◆ 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
◆ 起别名
AS # AS也可以省略
1.2、举例
◆ 查询name、age两列
select name,age from stu;
◆ 查询所有列的数据,列名的列表可以使用 * 替代
select * from stu;
◆ 查询地址信息
select * from stu;
◆ 去除重复记录
从上一条查询记录可以看出,在查到的地址信息中有重复记录,呈现效果不好,可以使用distinct关键字来去除重复记录。
select * from stu;
◆ 查询姓名、数学成绩,并通过as关键字给math起别名,别名为 “数学成绩”
数据库字段名一般都以英文命名,查询之后表头为英文,可以使用as关键字对数据库字段名起别名,方便阅读。
select name,math as 数学成绩 from stu;
2、条件查询
2.1、语法格式
SELECT 字段列表 >FROM 表名 WHERE 条件列表;
◆ 条件列表运算符
符号 | 功能 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
BETWEEN…AND… | 在某个范围内(左右都包含) |
IN(…) | 多选一 |
LIKE 占位符 | 模糊查询 _单个任意字符 %多个任意字符 |
IS NULL | 判断值为为NULL |
IS NOT NULL | 判断值为非空 |
AND 或 && | 并且 |
OR 或 ‖ | 或者 |
NOT 或 ! | 非,不是 |
2.2、举例
◆ 查询年龄大于20岁的学生信息
select * from stu where age>20;
◆ 查询年龄等于20岁的学生信息
select * from stu where age=20;
◆ 查询年龄不等于20岁的学生信息
select * from stu where age!=20;
select * from stu where age<>20;
◆ 查询年龄大于等于20岁且年龄小于等于30岁的学生信息
select * from stu where age>=20 && age<=30;
select * from stu where age>=20 and age<=30;
select * from stu where age between 20 and 30;
以上三种方式均可。
◆ 查询入学日期在“1998-09-01”到“1999-09-01”之间的学生信息
select * from stu where hire_date between “1998-09-01” and “1999-09-01”;
◆ 查询年龄等于18岁或者年龄等于20岁或者年龄等于22岁的学生信息
使用IN关键字
select * from stu where age in(18,20,22);
◆ 查询英语成绩为null的学生信息
需要注意的是,判断字段值是否为空时不能使用=,需要使用IS NULL 或 IS NOT NULL来进行判断,否则会报错。
select * from stu where english is null;
◆ 查询姓氏为“马”的学生信息
使用模糊查询
select * from stu where name like “马%”;
3、排序查询
3.1、语法格式
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
排序方式有两种:分别是:
ASC:升序排列(默认值)
DESC:降序排列
3.2、举例
◆ 查询学生信息,按照年龄升序排列
select * from stu order by age;
按某一个字段升序排列可以不用加关键字ASC,默认即升序。
◆ 查询学生信息,按照数学成绩降序排列
select * from stu order by math desc;
◆ 查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
select * from stu order by math desc,english asc;
4、聚合函数
4.1、概念
将一列数据作为一个整体,进行纵向计算。
4.2、聚合函数分类
函数名 | 功能 |
---|---|
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
4.1、聚合函数语法
SELECT 聚合函数名(列名) FROM 表;
注意:null值不参与所有聚合函数运算
4.2、举例
◆ 统计stu表中共有多少个学生
select count(id) from stu; (8)
select count(english) from stu; (7)
通过不存在null和存在null的对比,可以看出,null值不参与聚合函数的运算,如果某一个字段某一行值为null的话,将不会被统计。可以用count(*)来实现,一行中不可能所有的数据都为null,因此避免了该问题,故在查询总数时建议使用count(*)select count(*) from stu;
◆ 查询数学成绩的最高分
select max(math) from stu; (99.00)
◆ 查询数学成绩的最低分
select min(math) from stu; (56.00)
◆ 查询数学成绩的总分
select sum(math) from stu; (636.00)
◆ 查询数学成绩的平均分
select avg(math) from stu; (79.500000)
5、分组查询
5.1、语法格式
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
5.2、举例
◆ 查询男同学和女同学各自的数学平均分
select sex,avg(math) from stu group by sex;
◆ 查询男同学和女同学各自的数学平均分,以及各自人数
select sex,avg(math),count(*) as 总人数 from stu group by sex;
◆ 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
select sex,avg(math),count(*) as 人数 from stu where math>70 group by sex;
◆ 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的
select sex,avg(math),count(*) as 人数 from stu where math>70 group by sex having count(*)>2;
where和having的区别:
1、执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
2、可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。
6、分页查询
6.1、语法格式
SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
注意: 上述语句中的起始索引是从0开始
6.2、举例
◆ 从0开始查询,查询3条数据
select * from stu limit 0,3;
◆ 每页显示3条数据,查询第1页数据
select * from stu limit 0,3;
◆ 每页显示3条数据,查询第2页数据
select * from stu limit 3,3;
◆ 每页显示3条数据,查询第3页数据
select * from stu limit 6,3;
起始索引计算公式:
起始索引 = (当前页码 - 1) * 每页显示的条数
边栏推荐
- 安装radondb mysql遇到问题
- POJ 2377 Bad Cowtractors(最大生成树)
- Cobalt Strike (CS) 逆向初探
- 基于ck+redash构建MySQL慢日志+审计日志展示平台
- MD5是对称加密还是非对称加密,有什么优缺点
- 使用安全浏览器将网页保存为pdf的方法步骤
- SQL代码需要供其他人复用,为什么传统的复制代码不可靠?
- When does MySQL use table locks and when to use row locks?You should know this
- U-Net生物医学图像分割讲解(Convolutional Networks for BiomedicalImage Segmentation)
- CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统
猜你喜欢
随机推荐
【HCIP】MPLS实验
unity3d-游戏物体控制方法
国产虚拟化云宏CNware WinStack安装体验-5 开启集群HA
MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单
深度学习常用公式与命令总结(更新中)
Postgresql中的pg_memory_barrier_impl和C的volatile
Force is brushed buckle problem for the sum of two Numbers
tree命令:以树的形式列出目录中的文件
[Notes] Introduction to machine learning
红日安全内网渗透靶场-VulnStack-1
盲僧发现了华点——教你如何使用API接口获取数据
系统太多,多账号互通如何实现?
讯方实训云平台——加速教育高质量发展的“数字底座”!
谷歌浏览器安装插件教程步骤,开发用这2个插件工作效率倍增
[Azure Event Hub] Create Event Hub Consume Client + Custom Event Position with Azure AD Authentication
Postgresql snapshot optimization Globalvis new system analysis (performance greatly enhanced)
如何理解即时通讯开发移动网络的“弱”和“慢”
JumpServer开源堡垒机完成龙芯架构兼容性认证
力扣刷题之有效的正方形(每日一题7/29)
[数据集][VOC]老鼠数据集voc格式3001张