MySQL学习笔记(数据类型, DDL, DML, DQL, DCL)
Learning note
- 1、前言
- 2、数据类型
- 2.1、数值类型
- 2.2、字符串类型
- 2.3、日期类型
- 3、DDL
- 总览数据库/表
- 切换数据库
- 查看表内容
- 创建数据库/表
- 删除数据库/表
- 添加字段
- 删除字段
- 表的重命名
- 修改字段名(以及对应的数据类型)
- 4、DML
- 往字段里写入具体内容
- 修改字段内容
- 删除字段内容
- 5、DQL
- 5.1、基本查询
- 5.2、聚合查询
- 5.3、正则表达式
- 6、DCL
- 查询所有用户
- 查询当前登录的用户
- 切换用户
- 创建用户
- 修改用户密码
- 删除用户
- 查询权限
- 授予权限
- 撤销权限
- 7、综合练习
1、前言
MySQL对于缩进的要求很宽松,随意换行,加空格、缩进等都无所谓。再window系统下对还不区分大小写。
每段代码都以分号为结束标志。
注释语法和Python一样,都是用#。
一些基本逻辑符号兼容Python和C的形式。比如”或“可以用" or “,也可以用” || "。
2、数据类型
2.1、数值类型
- tinyint: Occupy 1 byte;
- smallint: Occupy 2 bytes;
- mediumint: Occupy 3 bytes;
- int: Occupy 4 bytes;
- bigint: Occupy 8 bytes;
- float: Occupy 4 bytes;
- double: Occupy 8 bytes;
- decimal(M, D):取决于M和D。D是总长度,M是小数位个数。eg: decimal(4, 2)的范围是(-99.99, 99.99)。
MySQL里面定义一个变量的类型和许多程序语言都不一样,它是将变量类型放在变量后边的。
name int;
而如果想定义一个无符号的变量类型,也得把unsigned放在最后,如下:
name int unsigned;
2.2、字符串类型
- char:定长字符串,最大 2 8 − 1 2^{8} - 1 28−1 bytes
- varchar:变长字符串,最大 2 16 − 1 2^{16} - 1 216−1 bytes
- tinyblob: 二进制字符串,最大 2 8 − 1 2^{8} - 1 28−1 bytes
- tinytext: 文本字符串,最大 2 8 − 1 2^{8} - 1 28−1 bytes
- blob: 二进制字符串,最大 2 16 − 1 2^{16} - 1 216−1 bytes
- text: 文本字符串,最大 2 16 − 1 2^{16} - 1 216−1 bytes
- mediumblob: 中长二进制字符串,最大 2 24 − 1 2^{24} - 1 224−1 bytes
- mediumtext: 中长文本字符串,最大 2 24 − 1 2^{24} - 1 224−1 bytes
- longblob: 长二进制符串,最大 2 24 − 1 2^{24} - 1 224−1 bytes
- longtext: 长文本字符串,最大 2 32 − 1 2^{32} - 1 232−1 bytes
char和varchar的使用方法如下,其中char(10)表示无论name多长,都会占用10个字节,而varchar(10)则表示name所占的空间又自己决定,但最多不超过10个字节。
注:一个英文字母占1个字节,一个汉字占2个字节。
name char(10);
name varchar(10)
blob主要用于存放一些音频,图片文件之类的。text则主要存放一些长文本数据,比如论文等文本。
2.3、日期类型
- date:占3 bytes。格式为yyyy-mm-dd。eg:2024-04-06
- time:占3 bytes。格式为hh: mm: ss。eg:14:10:59
- year:占1 bytes。格式为yyyy。eg:2024
- datetime:占8 bytes。格式为yyyy-mm-dd hh:mm:ss。eg:2024-04-06 14:10:59
- timestamp:占4 bytes。从1970-01-01开始计时,以秒的形式记录。可以防止夸时区产生的时间问题。
在MySQL里面,可以输入
select now(); #获得当前年月日+时间
select curtime(); #获得当前时间
然后用year,date,time等去过滤我们想要的信息。
select year(now());
select date(now());
select time(now());
3、DDL
DDL(Database Definition Language):是MySQL中对于数据库、表、字段进行定义的语言。常用的语句如下。
总览数据库/表
show databases;
show tables;
切换数据库
use <database_name>;
查看表内容
desc <table_name>;
创建数据库/表
create database [if not exists] <database_name> [charset = (utf8/utf8mb4)];creat table [if not exists] <table_name>(
feild_name, type, [constrained condition] [comment 'annotation'],
...
);
删除数据库/表
drop database <database_name>;
drop table <table_name>;
添加字段
alter table <table_name> add <filed_name type> [comment 'annotation'] ;
删除字段
alter table <table_name> drop <field_name>;
表的重命名
rename table <table_name1> to <table_name2>;
修改字段名(以及对应的数据类型)
alter table <table_name> Change <original_field_name> <object_field_name type>;
4、DML
DML(Data Manipulation Language)主要用于字段中的数据进行增、删、改的操作。
往字段里写入具体内容
insert into <table_name(field_name)> values(<concrete_values>);
也可以同时插入多条数据
insert into <table_name> (field_name1, field_name2, field_name3, ...)
values(value1A, value2A, value3A, ...),(value1B, value2B, value3B, ...),(value1C, value2C, value3C, ...),...;
修改字段内容
update <table_name> set <filed_name = concrete_values> [where file_name = ...];
删除字段内容
delete from <table_name> [where field_name = ...];
或者
truncate <table_name> [where field_name = ...]
delete和truncate的原理不同,前者只是删除表里的内容,而后者则是删除整张表之后再重新建立。
5、DQL
DQL(Data Query Language)主要用于对表中内容的查询。在实际项目当中,DQL运用的频率远高于DDL, DML, DCL,且玩的花样也是最多的。
5.1、基本查询
select[all | distinct] #是否去掉重复值<field_name1> [as alias1], #选择字段<field_name2> [as alias2],...
from table_name1 [as table_alias1], table_name2 [as table_alias2] ... #选择表
[where] #筛选条件
[group by ... [having] ] #对内容进行分组
[order by <field_name> [asc | desc]] #排序
[limit] #限制只能某列显示,或者显示多少行。
以上这些语句的执行顺序如下
1、from:先定位那张表
2、where:筛选条件
3、group by … having:分组字段列表
4、select:开始选择字段
5、order by:对字段进行排序
6、limit:对内容显示量进行限制
5.2、聚合查询
聚合查询时指利用以下函数对查询数据进行计算、取极值、平均值等操作。
- count():
- sum()
- max()
- min()
- avg()
比如一个计算一个列表中所有人的岁数之和。
select sum(age) from <table_name>;
当然也可以同时对很多字段进行聚合查询
select sum(<field_name1>) sum(<field_name2>) from <table_name>;
当然也不一定非要在select后面出现,任何你需要计算的地方都可以用上聚合函数。
5.3、正则表达式
正则表达式时匹配字符串的一种规则,在MySQL中常用的匹配字符有以下这些。
- “ ^ ”:匹配字符串的首个字符,比如"^n"就可以匹配字符串"name"。
- “ $ ”:匹配字符串的最后一个字符,比如"$e"就可以匹配字符串"name"。
- “ . ”:匹配除"\n"之外的所有字符,比如".a"就可以匹配字符串"name"。
- " […] “:匹配所包含的任意一个字符,比如” [ab] “可以匹配字符串"avnidn”。
- " [^…] “:匹配未包含的合集中的字符的字符串,比如” [ ^ae ] “就可以匹配字符串"bcd”,但不能匹配字符串"abc"。
- p1|p2|p3:" | “或的意思,即只要字符串中出现p1, p2, p3其中任意一个都可以匹配成功。比如” a|b"可以匹配字符串"agent"。
- “ * ”:匹配子表达式零次或多次,比如" ab* “可以匹配字符串"a"和字符串"abs”。
- “ + ”:匹配子表达式一次或多次,比如"ab+“可以匹配字符串"abs”,但不可能匹配字符串"a"。
- {n}:匹配字符串中某个字母n次,比如"L{2}“可以匹配字符串"HELLO”。
- {n, m}:匹配字符串某字母出现次数的区间,比如”a{2, 3}“可以匹配字符串"banana",但不能匹配"agent"。
最后,在查询语句中需要借助regexp来判别,比如需要查询一张表中谁的名字以a开头。
select * from <table_name> where name regexp "^a";
6、DCL
DCL(Data Control Language)主要是用户权限、创建、删除层面的控制语言。
查询所有用户
use mysql; #先切换到总数据库
select * from user;
查询当前登录的用户
select current_user;
切换用户
这一步适用于在cmd操作的用户。在ide操作的可以通过ide设置。
首先得推出当前用户。
exit;
再重新登录
mysql -u '<user_name>' -p;
创建用户
MySQL中,是通过用户名和主机名来唯一定位一个用户的。如果想要求该用户只能在本机访问,那主机名便设置为localhost,反之若想在任意主机访问,则用通配符“ % ”即可。
create user '<user_name>'@'<host_name>' identified by '<password>';
修改用户密码
alter user '<user_name>'@'<host_name>' identified with mysql_native_password by '<new_password>';
删除用户
drop user '<user_name>'@'<host_name>';
查询权限
常用的权限有select, insert, update, delete, alter, drop, create等。如果想要一次性指定所有权限,可以用all。
show grants for '<user_name>'@'<host_name>';
授予权限
对某个数据库中的某个表进行授权,如果要所有数据库和所有表,也可以all privileges代替之。
grant <permission_name> on <database_name.table_name> to '<user_name>'@'<host_name>';
多个权限也可以用逗号隔开。
撤销权限
revoke <permission_name> on <database_name.table_name> from '<user_name>'@'<host_name>';
7、综合练习
程序目的:
- 新建一个只适用于当前主机的用户,密码为123。授权其可对数据库进行读写操作。
- 创建一个名为teacher_schema的数据库,并在其中再创建一张名为teacher的表,里面存放各位老师的名字、身高、岁数、出生日期、三围等情况。
- 进行各种花式查询。
第一步:登录root用户,并且创建一个叫teacher_schema的数据库。
mysql -u root -p;
create database if not exists teacher_schema charset = utf8mb4;
第二步:创建一个叫yuquan的用户。
use mysql;
create user 'yuquan'@'localhost' identified by '123';
grant all privileges on teacher_schema.* to 'yuquan'@'localhost';
第三步:退出root用户,重新以yuquan这个用户登录
exit;
mysql -u yuquan -p;
第四步:在teacher_schema中创建一张名为teacher_table的表,其中存放四个字段。
use teacher_schema;
create table if not exists teacher_table(name varchar(30),age tinyint unsigned,height char(5),birthday date,cup char(3)
);
第五步:开始插入各位老师的名字。
insert into teacher_table values("铃村爱里", 30, '152cm', '1993-09-24', '32D'),("凉森玲梦", 26, '160cm', '1997-12-03', '34D'),("河合明日菜", 26, '158cm', '1998-03-21', '35H'),("楪可怜", 23, '148cm', '2001-03-28', '31H'),("高桥圣子", 30, '161cm', '1993-05-13', '34G'),("伊藤舞雪", 26, '160cm', '1997-11-30', '35F'),("神宫寺奈绪", 27, '160cm', '1997-02-15', '34D'),("三上悠亚", 30, '159cm', '1993-08-16', '33F'),("葵司", 33, '163cm', '1990-08-14', '35E'),("初川南", 29, '156cm', '1995-01-19', '34D'),("明里䌷", 26, '155cm', '1998-03-31', '31B'),("三宫春", 25, '152cm', '1998-05-04', '35G'),("美谷朱里", 26, '166cm', '1997-04-15', '33E'),("天海翼", 36, '160cm', '1988-03-08', '33E'),("水卜樱", 26, '152cm', '1997-11-30', '31G');
最后,进行各种查询练习。
1、查询整个列表。
select * from teacher_table;

2、查询共多少老师。
select count(*) from teacher_table; # print 15
3、按岁数降序查询,且这查询30岁以下的。
select name, age from teacher_table where age < 30 order by age desc;
可以看出,可怜老师岁数最小。

4、查询各位老师的cup,按字母降序查询,如果字母一样,则按数字升序。
select name, cup, age from teacher_table
order bysubstring(cup, regexp_instr(cup, '[A-Za-z]')) desc,cast(substring(cup, 1, regexp_instr(cup, '[A-Za-z]') - 1) as unsigned) asc;
可以看出,可怜老师还是第一,但由于其整容,也时常被诟病。

相关文章:
MySQL学习笔记(数据类型, DDL, DML, DQL, DCL)
Learning note 1、前言2、数据类型2.1、数值类型2.2、字符串类型2.3、日期类型 3、DDL总览数据库/表切换数据库查看表内容创建数据库/表删除数据库/表添加字段删除字段表的重命名修改字段名(以及对应的数据类型) 4、DML往字段里写入具体内容修改字段内容…...
Asible管理变量与事实——管理变量(1)
Ansible简介 Ansible支持利用变量来储存值,并在Ansible项目的所有文件中重复使用这些值。这可以简化项目的创建和维护,并减少错误的数量。 通过变量,您可以轻松地在Ansible项目中管理给定环境的动态值。例如,变量可能包含下面这些…...
【微服务】------微服务架构技术栈
目前微服务早已火遍大江南北,对于开发来说,我们时刻关注着技术的迭代更新,而项目采用什么技术栈选型落地是开发、产品都需要关注的事情,该篇博客主要分享一些目前普遍公司都在用的技术栈,快来分享一下你当前所在用的技…...
【SCI绘图】【小提琴系列1 python】绘制按分类变量分组的垂直小提琴图
SCI,CCF,EI及核心期刊绘图宝典,爆款持续更新,助力科研! 本期分享: 【SCI绘图】【小提琴系列1 python】绘制按分类变量分组的垂直小提琴图,文末附完整代码 小提琴图是一种常用的数据可视化工具…...
docker------docker入门
🎈个人主页:靓仔很忙i 💻B 站主页:👉B站👈 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:Linux 🤝希望本文对您有所裨益,如有不足之处&#…...
终极数据传输隐秘通道
SOCKS5代理作为网络请求中介的高级形态,提供了一种方法,通过它,数据包在传达其最终目的地前,首先经过一个第三方服务器。这种代理的先进之处在于其对各种协议的支持,包括HTTP、FTP和SMTP,以及它的认证机制&…...
Qt中的事件与事件处理
Qt框架中的事件处理机制是其GUI编程的核心部分,它确保了用户与应用程序之间的交互能够得到正确的响应。以下是对Qt事件处理机制的详细讲解以及提供一些基本示例。 1. 事件与事件处理简介 事件:在Qt中,所有的事件都是从QEvent基类派生出来的&…...
中间件漏洞攻防学习总结
前言 面试常问的一些中间件,学习总结一下。以下环境分别使用vulhub和vulfocus复现。 Apache apache 文件上传 (CVE-2017-15715) 描述: Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨…...
HarmonyOS开发实例:【分布式数据管理】
介绍 本示例展示了在eTS中分布式数据管理的使用,包括KVManager对象实例的创建和KVStore数据流转的使用。 通过设备管理接口[ohos.distributedDeviceManager],实现设备之间的kvStore对象的数据传输交互,该对象拥有以下能力 ; 1、注册和解除注…...
蓝桥杯——运动会
题目 n 个运动员参加一个由 m 项运动组成的运动会,要求每个运动员参加每个项目。每个运动员在每个项目都有一个成绩,成绩越大排名越靠前。每个项目,不同运功员的成绩不会相 同,因此排名不会相同。(但是不同项目可能成绩会相同) 每…...
如何搭建APP分发平台分发平台搭建教程
搭建一个APP分发平台可以帮助开发者更好地分发和管理他们的应用程序。下面是一个简要的教程,介绍如何搭建一个APP分发平台。 1.确定需求和功能:首先,确定你的APP分发平台的需求和功能。考虑以下几个方面: 用户注册和登录ÿ…...
【计算机专业必看】详细说明文件打开模式r,w,a,r+,w+,a+的区别和联系
文章目录 1、联系2、区别r(只读)w(只写)a(追加)r(读写,文件必须存在)w(读写,文件不存在则创建,存在则清空)a(读…...
Db2数据库稳定性解决方案
常见的数据库查询或写入慢,一般有以下情况 1、数据库经常有删除或有大量查询,(导致磁盘碎裂,数据库缓存堆积) 2、数据量大,导致在查询或写入时,由于负载高,导致系统慢 3、业务代码…...
如何用Python编写简单的网络爬虫(页面代码简单分析过程)
一、什么是网络爬虫 在当今信息爆炸的时代,网络上蕴藏着大量宝贵的信息,如何高效地从中获取所需信息成为了一个重要课题。网络爬虫(Web crawler)作为一种自动化工具,可以帮助我们实现这一目标,用于数据分析…...
【随笔】Git 高级篇 -- 最近标签距离查询 git describe(二十一)
💌 所属专栏:【Git】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…...
【leetcode面试经典150题】7.买卖股票的最佳时机(C++)
【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…...
个人求职简历(精选8篇)
HR浏览一份简历也就25秒左右,如果你连「好简历」都没有,怎么能找到好工作呢? 如果你不懂得如何在简历上展示自己,或者觉得怎么改简历都不出彩,那请你一定仔细读完。 互联网运营个人简历范文> 男 22 本科 AI简历…...
Ubuntu22.04安装Anaconda
一、下载安装包 下载地址:https://www.anaconda.com/download#Downloads 参考:Ubuntu下安装Anaconda的步骤(带图) - 知乎 下载Linux 64-Bit (x86) installer 二、安装 在当前路径下,执行命令: bash Ana…...
后端nginx使用set_real_ip_from获取用户真实IP
随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户的真实IP地址. 前言:Nginx ngx_http_realip_module…...
python使用leveldb
LevelDB 是由 Google 开发的一个快速的键值存储库,提供了一个持久化的有序映射,非常适合用作简单的高性能数据库。 安装 Plyvel 首先,使用 pip3 来安装 plyvel pip3 install plyvel基本用法 接下来,介绍使用 plyvel 来操作 Le…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
