MySQL的基本操作

目录

引言

一、SQL语句简介

(一)SQL通用语法

(二)SQL分类

(三)数据类型

1.数值类型

2.字符串类型

3.日期/时间类型

4.修饰符

二、登录mysql服务

三、SQL语句操作

(一)DDL语句

1.数据库操作

2.表操作

(二)DML语句

1.添加数据

2.修改数据

3.删除数据

(三)DQL语句

1.基本查询

2.条件查询

3.聚合函数与分组查询

3.1聚合函数

[3.2 分组查询](#3.2 分组查询)

4.排序查询

5.分页查询

(四)DCL语句

1.管理用户

[1.1 查询用户](#1.1 查询用户)

[1.2 创建用户](#1.2 创建用户)

[1.3 修改用户名与密码](#1.3 修改用户名与密码)

[1.4 删除用户](#1.4 删除用户)

2.用户授权

[2.1 查询权限](#2.1 查询权限)

[2.2 授予权限](#2.2 授予权限)

[2.3 撤销权限](#2.3 撤销权限)

四、拓展知识

(一)创建临时表与克隆表

[1. 创建临时表](#1. 创建临时表)

2.克隆表

(二)忘记密码解决

总结

(一)学习基本内容

(二)注意点

1.三种删除表的区别

2.数据插入

3.定长字符串与变成字符串的区别

4.主键与唯一键


引言

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,每张表中可以有多个唯一键

相关推荐
希忘auto6 分钟前
详解MySQL安装
java·mysql
运维佬14 分钟前
在 MySQL 8.0 中,SSL 解密失败,在使用 SSL 加密连接时出现了问题
mysql·adb·ssl
Leo.yuan18 分钟前
数据量大Excel卡顿严重?选对报表工具提高10倍效率
数据库·数据分析·数据可视化·powerbi
Runing_WoNiu27 分钟前
MySQL与Oracle对比及区别
数据库·mysql·oracle
天道有情战天下1 小时前
mysql锁机制详解
数据库·mysql
看山还是山,看水还是。1 小时前
Redis 配置
运维·数据库·redis·安全·缓存·测试覆盖率
谷新龙0011 小时前
Redis运行时的10大重要指标
数据库·redis·缓存
CodingBrother1 小时前
MySQL 中单列索引与联合索引分析
数据库·mysql
精进攻城狮@1 小时前
Redis缓存雪崩、缓存击穿、缓存穿透
数据库·redis·缓存
小酋仍在学习1 小时前
光驱验证 MD5 校验和
数据库·postgresql