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 281 bytes
  • varchar:变长字符串,最大 2 16 − 1 2^{16} - 1 2161 bytes
  • tinyblob: 二进制字符串,最大 2 8 − 1 2^{8} - 1 281 bytes
  • tinytext: 文本字符串,最大 2 8 − 1 2^{8} - 1 281 bytes
  • blob: 二进制字符串,最大 2 16 − 1 2^{16} - 1 2161 bytes
  • text: 文本字符串,最大 2 16 − 1 2^{16} - 1 2161 bytes
  • mediumblob: 中长二进制字符串,最大 2 24 − 1 2^{24} - 1 2241 bytes
  • mediumtext: 中长文本字符串,最大 2 24 − 1 2^{24} - 1 2241 bytes
  • longblob: 长二进制符串,最大 2 24 − 1 2^{24} - 1 2241 bytes
  • longtext: 长文本字符串,最大 2 32 − 1 2^{32} - 1 2321 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…:分组字段列表,分组之后满足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;

可以看出,可怜老师还是第一,但由于其整容,也时常被诟病。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/309033.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杰发科技AC7840——CAN通信简介(3)_时间戳

0. 时间戳简介 时间戳表示的是收到该CAN消息的时刻&#xff0c;通过连续多帧的时间戳&#xff0c;可以计算出CAN消息的发送周期&#xff0c;也可以用于判断CAN消息是否被持续收到。 1. 使用步骤 注意分别是发送和接收的功能&#xff1a; 2. 现象分析_接收时间戳 看下寄存器的…

机器学习(31)PINN

文章目录 摘要Abstract一、监督学习二、文献阅读1. 题目2. abstract3. 偏微分方程的数据驱动解3.1连续时间模型example(Schrodinger equation)&#xff1a; 3.2离散时间模型Example (Allen–Cahn equation)&#xff1a; 4. 文献解读4.1 Introduction4.2 创新点 三、实验内容1.实…

Eigen库从入门到放弃(2. Getting Started)

Eigen的头文件定义了多种类型&#xff0c;但是对于简单的来说&#xff0c;使用MatrixXd就足够了&#xff0c;MatrixXd表示任意尺寸的矩阵&#xff0c;但是要注意数据类型是double的。Eigen/Dense的头文件定义了所有MatrixXd和相关类型的成员函数。所有头文件中定义的函数都是在…

华为2024年校招实习硬件-结构工程师机试题(四套)

华为2024年校招&实习硬件-结构工程师机试题&#xff08;四套&#xff09; &#xff08;共四套&#xff09;获取&#xff08;WX: didadidadidida313&#xff0c;加我备注&#xff1a;CSDN 华为硬件结构题目&#xff0c;谢绝白嫖哈&#xff09; 结构设计工程师&#xff0c;结…

基于”Python+”多技术融合在蒸散发与植被总初级生产力估算中的应用

熟悉蒸散发ET及其组分&#xff08;植被蒸腾Ec、土壤蒸发Es、冠层截留Ei&#xff09;、植被总初级生产力GPP的概念和碳水耦合的基本原理&#xff1b;掌握利用Python与ArcGIS工具进行课程相关的操作&#xff1b;熟练掌握国际上流行的Penman-Monteith模型&#xff0c;并能够应用该…

大语言模型总结整理(不定期更新)

《【快捷部署】016_Ollama&#xff08;CPU only版&#xff09;》 介绍了如何一键快捷部署Ollama&#xff0c;今天就来看一下受欢迎的模型。 模型简介gemmaGemma是由谷歌及其DeepMind团队开发的一个新的开放模型。参数&#xff1a;2B&#xff08;1.6GB&#xff09;、7B&#xff…

BLIP 算法阅读记录---一个许多多模态大语言模型的基本组件

论文地址&#xff1a;&#x1f608; 目录 一、环境配置以及数据集准备 数据集准备 数据集格式展示 环境配置&#xff0c;按照官网所述即可 二、一些调整 vit_base的预训练模型 远程debug的设置 Tokenizer初始化失败 读入网络图片的调整 三、训练过程 Image Encoder …

[leetcode] all-nodes-distance-k-in-binary-tree 二叉树中所有距离为 K 的结点

. - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树&#xff08;具有根结点 root&#xff09;&#xff0c; 一个目标结点 target &#xff0c;和一个整数值 k 。 返回到目标结点 target 距离为 k 的所有结点的值的列表。 答案可以以 任何顺序 返回。 示例 1&#xff1a…

服务器主机关机重启告警

提取时间段内系统操作命名&#xff0c;出现系统重启命令&#xff0c;若要出现及时联系确认 重启命令&#xff1a; reboot / init 6 / shutdown -r now&#xff08;现在重启命令&#xff09; 关机命令&#xff1a; init 0 / shutdown -h now&#xff08;关机&#…

Element-UI 自定义-下拉框选择年份

1.实现效果 场景表达&#xff1a; 默认展示当年的年份&#xff0c;默认展示前7年的年份 2.实现思路 创建一个新的Vue组件。 使用<select>元素和v-for指令来渲染年份下拉列表。 使用v-model来绑定选中的年份值。 3.实现代码展示 <template><div><el-…

ping命令返回无法访问目标主机和请求超时浅析

在日常经常用ping命令测试网络是否通信正常&#xff0c;使用ping命令时也经常会遇到这两种情况&#xff0c;那么表示网络出现了问题。 1、请求超时的原因 可以看到“请求超时”没有收到任何回复。要知道&#xff0c;IP数据报是有生存时间的&#xff0c;当其生存时间为零时就会…

医院预约系统微信小程序APP前后端

医院预约系统具体功能介绍&#xff1a;展示信息、可以注册和登录&#xff0c; 预约&#xff08;包含各个科室的预约&#xff0c;可以预约每个各个医生&#xff09;&#xff0c;就诊引导包含预约的具体信息&#xff0c;包含就诊时间、就诊科室、就诊医生以及就诊人信息、和支付状…

有真的副业推荐吗?

#有真的副业推荐吗# 我做副业项目的时候&#xff0c;认识了一位带娃宝妈&#xff0c;讲一下她空闲时间做副业赚钱的故事吧。在一个温馨的小家庭里&#xff0c;李婷是一位全职宝妈&#xff0c;她的主要任务是照顾和陪伴自己可爱的宝宝。然而&#xff0c;随着宝宝逐渐长大&#x…

基于Vue语法实现Tab选项卡

目录 需求&#xff1a; 步骤&#xff1a; 1、安装相关配置文件 1.1、在实现该功能可选择先下载 bootstrap 框架 1.2、在书写脚本前引入 Vue.js&#xff08;路径要改为您下载 Vue.js的路径&#xff09; 2、在脚本中创建 Vue实例并在实例中声明挂载容器&#xff0c;传输数据并声…

ReentrantLock源码阅读

1. 概述 lock锁, 基于队列同步器AQS, 实现公平锁、非公平锁 队列同步器AQS可以阅读我这篇文章&#xff1a; 点击传送 实现了Lock接口: public class ReentrantLock implements Lock// 加锁 获取不到锁一直等待 void lock(); // 加锁 获取不到锁一直等待 等待过程可以被中断…

8路HDMI+8路AV高清视频流媒体编码器JR-3218HD

产品简介&#xff1a; JR-3218HD高清音视频编码产品支持8路高清HDMI音视频采集功能&#xff0c;8路AV视频采集功能&#xff0c;8路3.5MM独独立音频接口采集功能。编码输出双码流H.264格式&#xff0c;音频MP3/AAC格式。编码码率可调&#xff0c;画面质量可控制。支持HTTP/RTSP…

【OpenHarmony】XTS环境配置

零、参考 1、xts测试环境配置&#xff1a;https://www.yuque.com/u25440504/ehvzki/ik2fso 2、Windows安装Python、pip、easy_install的方法&#xff1a;https://pythonjishu.com/bmxqeisbkzgrpnn/ 3、Python中easy_install 和 pip 的安装及使用&#xff1a; https://blog.c…

智能革命:未来人工智能创业的天地

智能革命&#xff1a;未来人工智能创业的天地 一、引言 在这个数字化迅速变革的时代&#xff0c;人工智能(AI)已经从一个边缘科学发展成为推动未来经济和社会发展的关键动力。这一技术领域的飞速进步&#xff0c;不仅影响着科技行业的每一个角落&#xff0c;更是为创业者提供了…

Linux —— FTP服务【从0-1】

目录 一、介绍 1.概述 2.FTP的传输模式 PORT 主动模式 PASV 被动模式 3.FTP服务的作用 二、搭建FTP服务器 FTP服务端配置 1.安装vsftpd文件服务 2.启动服务 3.防火墙配置 4.FTP服务相关文件说明 FTP客户端配置 1.安装FTP客户端工具 lftp 2.访问FTP服务器 Linux系…

MES实施优势有哪些?MES制造执行系统的主要内容

各个行业之间也开始进入到了激烈的竞争当中&#xff0c;很多企业为了能够有效提升企业竞争力&#xff0c;都会通过提升自身实力的方式来提升竞争力。一些制造业也会在经营过程当中使用到MES系统&#xff0c;那么&#xff0c;mes系统的优势有哪些呢&#xff1f; 1、优化企业现场…