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…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...