目录
[3.2 分组查询](#3.2 分组查询)
[1.1 查询用户](#1.1 查询用户)
[1.2 创建用户](#1.2 创建用户)
[1.3 修改用户名与密码](#1.3 修改用户名与密码)
[1.4 删除用户](#1.4 删除用户)
[2.1 查询权限](#2.1 查询权限)
[2.2 授予权限](#2.2 授予权限)
[2.3 撤销权限](#2.3 撤销权限)
[1. 创建临时表](#1. 创建临时表)
引言
MySQL是一个广泛应用于网站开发、数据存储与管理的关系型数据库管理系统。本文将为您概述MySQL的一些核心操作,包括数据库和表的创建、数据的增删改查(CRUD)以及简单的SQL语句使用。
一、SQL语句简介
SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准计算机语言,它涵盖了数据定义、数据查询、数据操作(增删改)以及数据控制四大功能
(一)SQL通用语法
1.SQL语句可以单行或者多行书写,以分号结尾;
2.SQL语句可以使用空格/缩进来增强语句的可读性。
3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
4.注释
单行注释:--注释内容或者#注释内容(MySQL特有)
多行注释:/*注释内容*/
(二)SQL分类
|-----|----------------------------|----------------------------|
| 分类 | 全称 | 说明 |
| DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
| DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
| DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
| DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库访问权限 |
(三)数据类型
主要分为三类:数值类型、字符串类型、日期时间类型
1.数值类型

2.字符串类型

注意:在这里主要了解什么是定长字符串与变长字符串
定长字符串(char):
定长字符串在创建时指定了固定长度,无论实际存储的字符数量是多少,它都会占用预设大小的空间。
例如,在SQL Server中,CHAR(n)就是定长字符串类型,其中n表示字符串的最大长度。即使你只存储了几个字符,剩余的空间也会被填充以达到预设长度,通常是用空格或特定字符填补。
变成字符串(varchar):
变长字符串根据实际内容动态分配存储空间,仅占用与存储内容长度相符的内存空间。
在SQL Server中,VARCHAR(n)表示变长字符串类型,n同样表示最大长度,但实际存储只会包含字符串的实际长度,不包括额外的填充字符。
比如
char(10):即使输入4个字符,依旧会占用10个字节,多余的字节使用tab或者空格补全
varchar(10):根据输入的字符确定占用字节,输入4个字符就占用4个字节
根据环境不同择优选,例如确定性别,使用char(1)即可,只会输入男、女,这样查询的时候不会混乱,如果使用varchar(10)虽然可以节省资源,但是,在查询时,会检索0-10所有字节,查询效率较慢
3.日期/时间类型

除此之外,还可以在字段信息中添加一些修饰符
4.修饰符
适用所有类型的修饰符:
名称 | 含义 |
---|---|
NULL | 数据列可包含NULL值,默认值 |
NOT NULL | 数据列不允许包含NULL值,*为必填选项 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键,所有记录中此字段的值不能重复,且不能为NULL |
UNIQUE KEY | 唯一键,所有记录中此字段的值不能重复,但可以为NULL |
CHARACTER SET | name 指定一个字符集 |
适用数值型的修饰符:
名称 | 作用 |
---|---|
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
二、登录mysql服务
在安装好mysql服务后,需要使用客户工具去登录mysql
常见的mysql客户端工具有以下几种
MySQL Workbench
官方出品的集成开发环境,提供数据库设计、SQL开发、以及服务器管理等功能。
Navicat
包括Navicat for MySQL,是一款跨平台的图形化数据库管理工具,支持Windows、macOS和Linux,提供用户友好的界面,进行数据建模、查询、数据同步、备份还原等多种数据库管理操作。
DataDrip
同样是一款图形化数据库管理的工具
HeidiSQL
免费的MySQL客户端,特别适合Windows用户,界面简洁易用,支持快速的数据库管理和数据操作。
Mysql
mysql服务自带的客户端工具,也是日常使用的操作工具
Mycli
第三方的客户端工具,使用python安装,具有补全查询历史命令等功能,适用于mysql的初学者
在这里使用mysql自带的客户端工具进行登录,在之前章节进行编译安装时,执行了初始化的命令,所以在刚开始登录时,不许要输入密码,就可以直接登录

登录指令为mysql -u 用户名
登录root用户指令为 mysql -u root

这样并不安全,所以需要使用mysqladmin命令去创建密码
创建密码指令为:mysqladmin -u 用户名 -p password '新密码'

这样就可以登录了
三、SQL语句操作
(一)DDL语句
DDL(Data Definition Language,数据定义语言)是SQL中的一种语句集合,主要用于创建、修改和删除数据库中的结构对象,如数据库、表、视图、索引、触发器、存储过程等
常用语句有:CREATE(创建),DROP(删除),ALTER(修改)
1.数据库操作

1.1 查询所有数据库

1.2 创建新的数据库

在创建数据库时,也可以添加条件判断语句,if not exists ,表示如果该名称的数据库存在则不建立,不存在则新建该数据库

1.3 使用数据库

1.4 删除库

2.表操作
2.1 创建表
语法格式有两种:
语法1
create table 表名 (字段1 字段1类型[comment 注释信息],字段2 字段2类型[comment 注释信息],字段3 字段3类型[comment 注释信息] ......);
语法2
create table 表名(字段1 字段1类型[comment 注释信息],
字段2 字段2类型[comment 注释信息],
字段3 字段3类型[comment 注释信息]
......) [comment 表注释信息];
注意:在最后一个字段信息后面不需要加,(逗号)


创建表之后,以下是对表的一些操作

2.2 查询表结构

Field:字段名称
Type :字段类型
Null : 该字段是否可以设置为空值,NO表示不允许有控制
Key :键,PRI表示为主键,UNI表示该字段为唯一键
Default :默认为空,即NULL
Extra :扩展,表示该表的字段可以继续进行扩展
可以在当前数据库中查看其它数据库的表
语法为:desc [数据库名.]表名
此语法同样适用于其它的SQL语句

2.3 查询建表语句

2.3 删除表

2.4 添加字段

2.5 修改字段

2.6 修改字段类型
ALTER TABLE 表名 MODIFY COLUMN 字段名 类型; -- 修改列的数据类型
一般不推荐使用,容易丢失数据,同类型数据之间可以使用
例如:TINYINT修改为INT,同样属于整数值
(二)DML语句
DML(Data Manipulation Language,数据操纵语言)是SQL中用于操作数据库表中数据的指令集。它主要涵盖以下几种类型的语句
插入数据(INSERT):在表中插入新的数据
更新数据(UPDATE):更新表中现有的数据
删除数据(DELETE):删除表中的数据
1.添加数据

注意:
插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
字符串和日期型数据应该包含在引号中。
插入的数据大小,应该在字段的规定范围内。

2.修改数据

不加WHERE条件,默认是修改指定表当中的所有行的entry的值

只修改某一行的值,可以添加where条件进行筛选
注意:在指定某一行是,最好指定条件为设置修饰符为PRI的主键,确保表中无重复信息,导致将其它行的信息一并修改

3.删除数据

注意:
DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据
DELETE 语句不能删除某一个字段的值。
删除指定信息

删除所有信息

(三)DQL语句
DQL (Data Query Language) 是SQL语言中专门用于查询数据的部分,它的主要目的是从数据库中检索满足特定条件的数据,而不改变数据库的状态
它的语句只有一个:SELECT
在数据库操作中,查询的频率要远远高于增、删、改操作,在访问页面时,页面中所有的信息都需要通过select查询出来,在生产环境中,也同样要多于其它操作

1.基本查询
1.1多字段查询


注释:*为通配符,表示所有

1.2 字段别名
给某一字段设置别名,比如查看年龄时。age并不直观,可以使用as设置别名为年龄,这样查看就会更加直观

1.3 消除重复数据
查询某一个字段,并消除重复的记录

1.4 垂直显示
在查看表格时,可以添加\G,将表格的横向信息纵向显示出来。这是MySQL命令行客户端的一个特殊终止符,告诉MySQL以垂直布局显示查询结果,每一列的内容都会另起一行显示,便于阅读和分析。

2.条件查询

2.1 基本条件

2.2 使用逻辑运算
查找entry = 2024-01-01并age不等于20的信息

3.聚合函数与分组查询
3.1聚合函数

统计数量,使用count函数,但是需要注意的是,在统计数量时,NULL值并不会纳入统计范围,统计数量时需要注意,如果没有要求,只统计总数,将count()是字段设置为not null的字段


也可以加上判断条件,比如统计所有gerder值为男的age值的和


3.2 分组查询


、
4.排序查询

注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
按照age值大小排序

5.分页查询

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

(四)DCL语句
DCL(Data Control Language)是SQL语言中的一个重要组成部分,它主要负责对数据库系统的访问权限和安全性进行管理。DCL语句主要用于授予或撤销用户对数据库对象(如表、视图、序列、存储过程等)的操作权限,以及管理事务和数据库的安全策略。
常用语句有:GRANT,REVOKE,COMMIT,ROLLBACK
1.管理用户

注释
①主机名可以使用IP地址、网段、主机名的形式,本地用户可以使用127.0.0.1或者locathostbi表示,通配符%表示允许任意地址,任意主机访问。
②密码输入明文时,在插入mysql.user表中会由mysql自动进行加密,或者使用SELECT PASSWORD('密码');获取密文,再在语句中添PASSWORD '密文'
1.1 查询用户
可以登录mysql服务的用户都存放在mysql数据库中的user表当中
可以通过:select * from mysql.user\G;直接查看用户
默认有四个用户,目前只使用root用户进行登录操作

1.2 创建用户
创建一个用户名称为dcl的用户,只能后在当前主机localhost访问,访问密码为123456
'用户名':指定将创建的用户名.
':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录
可用通配符%
'密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
若使用加密密码,需要先使用SELECT PASSWORD('密码');获取密文,再在语句中添PASSWORD '密文';
若省略"IDENTIFIED BY"部分,则用户的密码将为空(不建议使用)


创建完用户之后,就可以在本地主机进行登录了

如果使用第三软件,如datagrip等软件不能进行连接

mycli为第三方客户端工具

1.3 修改用户名与密码
1.3.1 修改用户名并重新指定用户可登录的主机范围

这是该用户就可以使用第三方登录了

1.3.2 修改用户密码
使用set指令修改密码
修改当前用户的密码:SET PASSWORD = PASSWORD('新密码');

修改其它用户的密码:SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');

使用alter指令修改密码

1.4 删除用户

2.用户授权

首先了解一下权限的分类
|-------------------------------------|--------|
| 权限 | 说明 |
| all,all privileges | 所有权限 |
| insert | 插入数据 |
| select | 查询数据 |
| update | 更新表的数据 |
| delete | 删除表中数据 |
| create | 创建库,表 |
| drop | 删除库,表 |
| index | 建立索引 |
| alter | 更改表属性 |
| create temp orary tableslock tables | 锁表 |
| create view | 创建视图 |
| show view | 显示视图 |
| create routine | 创建存储过程 |
| alter routine | 修改存储过程 |
| event | 事件 |
| trigger on | 创建触发器 |
首先建立一个用户,只有在本地主机登录的权限,在尝试创建数据库时会失败

2.1 查询权限
使用show grantsd for '用户名'@'主机名' 指令

USAGE权限只能用于数据库登陆,不能执行任何操作; USAGE权限不能被回收
2.2 授予权限
想要rat用户拥有创建库与不表的权限,需要使用grant指令去授予权限

grant create on *.* to 'rat'@'localhost';
grant :这是SQL语句中的权限授予命令。
create:这是要授予的特定权限,允许用户创建新的数据库和表。
on *.* :星号 *.*
表示所有数据库(第一个星号)中的所有表(第二个星号)。这意味着用户可以在任何数据库中创建表。
to 'rat'@'localhost';:这部分指定了用户名为 'rat' 的用户,且该用户只能从本地主机(localhost)登录并使用这些权限。
执行这条命令后,用户 'rat' 将能够在本地主机上创建新的数据库和表
但此时,该用户对已存在数据库的并没有任何访问权限

可以通过设置权限列表为all,授予该用户所有权限


2.3 撤销权限
有赋予权限,就会有对应的权限的收回,使用REVOKE指令

此时该用户除了登录,不能执行其它任何操作

四、拓展知识
(一)创建临时表与克隆表
1. 创建临时表
临时表创建成功之后,使用SHOWTABLES命令是看不到创建的临时表的,临时表会在连接退出后被销毁。如果在退出连接之前,也可以执行增删改查等操作,比如使用DROP TABLE语句手动直接删除临时表。


2.克隆表
查看需要复制的表的结构与数据

使用like指令进行克隆:create table 克隆表名 like 目的表名;
比如需要克隆emp表,新建的表名为emp_copy,指令为:create table emp_copy like emp;

使用:**insert into emp_copy select * from emp;**指令复制表中的信息

也可以使用:**create table emp_1 (select * from emp);**指令直接生成新的表

(二)忘记密码解决
忘记root密码的解决办法
首先在/etc/my.cnf文件中的mysqld段添加skip-grant-tables语句,表示登录mysql不使用授权表

重启服务后就可以直接不使用密码登录

而后清空root用户密码

将skip-grant-tables注释或删除之后重启服务

设置新密码登录

总结
(一)学习基本内容
1.SQL语句的语法分类以及数据类型
2.对mysql数据的增删改查的基本操作
3.用户的权限赋予及撤销
(二)注意点
1.三种删除表的区别
drop table table_name
1)属于DDL
2)不可回滚(无法恢复)
3)不可带where
4)表内容和结构删除
5)删除速度快
truncate table table_name
1)属于DDL
2)不可回滚
3)不可带where
4)表内容删除
5)删除速度快
delete from table_name
1)属于DML
2)可回滚(可恢复)
3)可带where
4)表结构在,表内容要看where执行的情况
5)册删除速度慢,需要逐行删除
2.数据插入
插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
字符串和日期型数据应该包含在引号中。
插入的数据大小,应该在字段的规定范围内。
3.定长字符串与变成字符串的区别
char(10):即使输入4个字符,依旧会占用10个字节,多余的字节使用tab或者空格补全
varchar(10):根据输入的字符确定占用字节,输入4个字符就占用4个字节
4.主键与唯一键
主键,所有记录中此字段的值不能重复,且不能为NULL,每张表中只能有一个主键
唯一键,所有记录中此字段的值不能重复,但可以为NULL,每张表中可以有多个唯一键