【Mysql】学习笔记

目录

  • 基本操作
    • 登录指令:
    • 启动、关闭、重启mysql指令(适用于centos7):
    • 查看mysql运行状态:
    • 删除和创建表
  • 修改密码(ubuntu18.04可行,其余版本行不行不知道)
  • 3 使用MYSQL
    • 了解数据库和表
  • 4 检索数据
    • 检索单个列
    • 检索多个列
    • 检索所有列
    • 检索不同的行
    • 限制结果
    • 使用完全限定的表名
  • 5 排序检索数据
    • 排序数据
    • 按多个排序
    • 指定排序方向
  • 6 过滤数据
    • 使用WHERE子句
  • 6.2 WHERE子句操作符
  • 7 数据过滤
    • 组合WHERE子句
      • AND操作符
      • OR操作符
      • AND和OR计算次序
    • IN操作符
    • NOT操作符
  • 8 用通配符进行过滤
    • LIKE操作符
      • 百分号(%)通配符
      • 下划线(_)通配符
    • 使用通配符的技巧
  • 9 用正则表达式进行搜索
    • 使用MySQL正则表达式
      • 基本字符匹配
      • 进行OR匹配
      • 匹配几个字符之一
      • 匹配范围
      • 匹配特殊字符

橙色

基本操作

登录指令:

mysql -u root -p

启动、关闭、重启mysql指令(适用于centos7):

sudo service mysqld start
sudo service mysqld stop
sudo service mysqld restart

查看mysql运行状态:

service mysqld status

在这里插入图片描述

删除和创建表

删除表

drop table [表名];

创建表比较复杂

修改密码(ubuntu18.04可行,其余版本行不行不知道)

参考了这篇文章

经验仅适用于ubuntu18.04

因为密码错误或者刚初始化不知道密码是多少,无法登入mysql服务器,所以要先找到/etc/mysql/mysql.conf.d/mysqld.cnf 这个文件中的[mysqld]这一段。这也是网上很多博文的一个坑,无法找到my.cnf配置文件。这是因为mysql5.7.17将原先的my.cnf改为mysqld.cnf,并放在/etc/mysql/mysql.conf.d/路径下。

进入mysqld.cnf 这个文件后,找到 [mysqld] 段,并加入一行“skip-grant-tables”,保存退出 。
在这里插入图片描述

重启mysql服务,用空密码进入mysql管理命令行,切换到mysql库,操作命令如下,

sudo service mysql restart

在这里插入图片描述

登陆进去mysql后

use mysqld
update mysql.user set authentication_string=password('123') where user='root’;
update user set plugin="mysql_native_password";
flush privileges; #立即生效

在这里插入图片描述
退出mysql登录:

quit

至此,密码修改完成,记得把上面加入的skip-grant-tables命令注释掉

在这里插入图片描述


该书附录b中提到的两个.sql脚本文件可在该网站下载。具体下载地方如下:
在这里插入图片描述

先创建一个数据库
在这里插入图片描述

选定该数据库
在这里插入图片描述

将上面所下载好的两个sql脚本文件传入虚拟机或者服务器中,在mysql命令行中可以通过如下指令执行这两个脚本:
在这里插入图片描述
在这里插入图片描述

至此,准备工作已就绪,下面开始学习


3 使用MYSQL

了解数据库和表

查看当前选择的数据库中所有表的名称

SHOW TABLES;

在这里插入图片描述

显示customers表的信息
在这里插入图片描述

//这两个语句有相同的效果
SHOW COLUMNS FROM customers;
DESCRIBE customers;

在这里插入图片描述

4 检索数据

检索单个列

从products表中检索一个名为prod_name的列,因为没有明确排序查询结果,所以返回的数据的顺序是随机的。

SELECT prod_name FROM products;

在这里插入图片描述

检索多个列

SELECT prod_id,prod_name,prod_price FROM products;

在这里插入图片描述

检索所有列

SELECT * FROM products;

在这里插入图片描述

检索不同的行

SELECT能返回对应列名的所有行,假如我想得到products表中产品的所有供应商ID:
在这里插入图片描述

SELECT语句返回14行(即使表中只有4个供应商),因为products表中列出了14个产品。那么,如何检索出有不同值的列表呢?
解决办法是使用DISTINCT关键字,顾名思义,此关键字指示MySQL只返回不同的值。

在这里插入图片描述

限制结果

此语句使用SELECT语句检索单个列。LIMIT 5指示MySQL返回不多于5行。

SELECT prod_name FROM products LIMIT 5;

在这里插入图片描述

为得出下一个5行,可指定要检索的开始行和行数,如下所示:
LIMIT 5, 5指示MySQL返回从行5开始的5行。第一个数为开始位置,第二个数为要检索的行数。

SELECT prod_name FROM products LIMIT 5,5;

在这里插入图片描述

行0:检索出来的第一行为行0而不是行1。因此,LIMIT 1, 1将检索出第二行而不是第一行。行0是第一行,行1是第二行

使用完全限定的表名

这里指定了一个完全限定的列名

SELECT products.prod_name FROM products;

当然表名也是可以完全限定的

SELECT products.prod_name FROM experience.products;

5 排序检索数据

排序数据

下面的SQL语句返回某个数据库表的单个列。但请看其输出,并没有特定的顺序。
在这里插入图片描述

为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出进行排序。请看下面的例子:

SELECT prod_name FROM products ORDER BY prod_name;

在这里插入图片描述

按多个排序

下面的代码检索3个列,并按其中两个列对结果进行排序——首先按价格,然后再按名称排序。注意仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。

SELECT prod_id,prod_price,prod_name 
FROM products 
ORDER BY prod_price,prod_name;

在这里插入图片描述

指定排序方向

数据排序不限于升序排序(从A到Z)。这只是默认的排序顺序,还可以使用ORDER BY子句以降序(从Z到A)顺序排序。为了进行降序排序,必须指定DESC关键字。如下面的例子,最贵的排在前面

SELECT prod_id,prod_price,prod_name 
FROM products 
ORDER BY prod_pricE DESC;

在这里插入图片描述

DESC关键字只应用到直接位于其前面的列名。在上例中,只对prod_price列指定DESC,对prod_name列不指定。因此,prod_price列以降序排序,而prod_name列(在每个价格内)仍然按标准的升序排序。
所以,如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。

使用ORDER BY和LIMIT的组合,能够找出一个列中最高或最低的值。下面例子展示了如何找出最昂贵物品的值:

mysql> SELECT prod_price
    -> FROM products
    -> ORDER BY prod_price DESC
    -> LIMIT 1;

在这里插入图片描述

ORDER BY子句的位置    在给出ORDER BY子句时,应该保证它位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。使用子句的次序不对将产生错误消息

6 过滤数据

使用WHERE子句

数据库表一般包含大量的数据,很少需要检索表中所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。

在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出,如下所示:

mysql> SELECT prod_name,prod_price
    -> FROM products
    -> WHERE prod_price=2.5;

在这里插入图片描述

WHERE子句的位置 在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误

6.2 WHERE子句操作符

MySQL支持下表所列出的所有操作符
在这里插入图片描述

来看几个使用其他操作符的例子。

第一个例子是列出价格小于10美元的所有产品:

mysql> SELECT prod_name,prod_price
    -> FROM products
    -> WHERE prod_price<10;

在这里插入图片描述

范围值检查
为了检查某个范围的值,可使用BETWEEN操作符。它需要两个值,即范围的开始值和结束值。例如,BETWEEN操作符可用来检索价格在5美元和10美元之间或日期在指定的开始日期和结束日期之间的所有产品。

mysql> SELECT prod_name,prod_price
    -> FROM products
    -> WHERE prod_price BETWEEN 5 AND 10;

在这里插入图片描述

从这个例子中可以看到,在使用BETWEEN时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用AND关键字分隔。BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。

空值检查

NULL 无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。

mysql> SELECT cust_id
    -> FROM customers
    -> WHERE cust_email IS NULL;

在这里插入图片描述

7 数据过滤

组合WHERE子句

第6章中介绍的所有WHERE子句在过滤数据时使用的都是单一的条件。为了进行更强的过滤控制,MySQL允许给出多个WHERE子句。这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用。

AND操作符

如下的例子,通过WHERE组合子句,检索由供应商1003制造且价格小于等于10美元的所有产品的id、名称和价格。
在这里插入图片描述

OR操作符

应该比较好理解,检索由供应商id为1002或1003的供应商所制造的所有产品的产品名和价格

mysql> SELECT prod_name,prod_price
    -> FROM products
    -> WHERE vend_id=1002 OR vend_id=1003;

在这里插入图片描述

AND和OR计算次序

如下的例子,明明设置了prod_price应该大于等于10,但筛选出来的仍旧有两条数据的price小于10,这是因为AND的优先级比OR更高,所以SQL理解为由供应商1003制造的任何价格为10美元(含)以上的产品,或者由供应商1002制造的任何产品,而不管其价格如何
在这里插入图片描述

解决的方法就是通过圆括号,因为圆括号具有较AND或OR操作符高的计算次序,如下:
在这里插入图片描述

IN操作符

圆括号在WHERE子句中还有另外一种用法。IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。下面的例子说明了这个操作符:
在这里插入图片描述

NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。这里的NOT否定跟在它之后的条件,因此,MySQL不是匹配1002和1003的 vend_id ,而是匹配 1002 和 1003 之外供应商的vend_id。

在这里插入图片描述

8 用通配符进行过滤

LIKE操作符

通配符:用来匹配值的一部分的特殊字符。
搜索模式:由字面值、通配符或两者组合构成的搜索条件。

为在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示MySQL后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。

百分号(%)通配符

最常使用的通配符是百分号(%)。在搜索串中,%表示任何字符出现任意次数。例如,为了找出所有以词jet起头的产品,可使用以下SELECT语句:
在这里插入图片描述
分析:此例子使用了搜索模式’jet%'。在执行这条子句时,将检索任意以jet起头的词。%告诉MySQL接受jet之后的任意字符,不管它有多少字符。

通配符可在搜索模式中任意位置使用,并且可以使用多个通配符。下面的例子使用两个通配符,它们位于模式的两端:
在这里插入图片描述
分析:搜索模式’%anvil%'表示匹配任何位置包含文本anvil的值,而不论它之前或之后出现什么字符。

下划线(_)通配符

下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。
在这里插入图片描述

使用通配符的技巧

  • 通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长。所以不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
  • 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。

9 用正则表达式进行搜索

使用MySQL正则表达式

基本字符匹配

关键字REGEXP,告诉MySQL:REGEXP后所跟的东西作为正则表达式使用了正则表达式’.000’。'.'是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符,因此,1000和2000都匹配且返回。
在这里插入图片描述
MySQL中的正则表达式匹配(自版本3.23.4后)不区分大小写(即,大写和小写都匹配)。为区分大小写,可使用BINARY关键字,如WHERE prod_name REGEXP BINARY ‘JetPack .000’。

进行OR匹配

为搜索两个串之一(或者为这个串,或者为另一个串),使用 | ,如下所示:
在这里插入图片描述
分析:语句中使用了正则表达式1000|2000。|为正则表达式的OR操作符。它表示匹配其中之一,因此1000和2000都匹配并返回。

匹配几个字符之一

这里,使用了正则表达式[123] Ton。[123]定义一组字符,它的意思是匹配1或2或3,因此,1 ton和2 ton都匹配且返回(没有3 ton)。
在这里插入图片描述
字符集合也可以被否定,即,它们将匹配除指定字符外的任何东西。为否定一个字符集,在集合的开始处放置一个^即可。因此,尽管[123]匹配字符1、2或3,但 [^123] 却匹配除这些字符外的任何东西。

匹配范围

集合可用来定义要匹配的一个或多个字符。例如,下面的集合将匹配数字0到9:
在这里插入图片描述

为简化这种类型的集合,可使用-来定义一个范围。下面的式子功能上等同于上述数字列表:
在这里插入图片描述
此外,范围不一定只是数值的,[a-z]匹配任意字母字符。

举个例子:
在这里插入图片描述
分析:这里使用正则表达式[1-5] Ton。[1-5]定义了一个范围,这个表达式意思是匹配1到5,因此返回3个匹配行。由于5 ton匹配,所以返回.5 ton。

匹配特殊字符

正则表达式语言由具有特定含义的特殊字符构成。我们已经看到.、[]、|和-等,还有其他一些字符。请问,如果你需要匹配这些字符,应该怎么办呢?
如下:
在这里插入图片描述
这并不是期望的输出,.匹配任意字符,因此每个行都被检索出来。

为了匹配特殊字符,必须用\为前导。\-表示查找-,\.表示查找.。
在这里插入图片描述
分析:\.匹配.,所以只检索出一行。这种处理就是所谓的转义(escaping),正则表达式内具有特殊意义的所有字符都必须以这种方式转义。这包括.、|、[]以及迄今为止使用过的其他特殊字符。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java基础--JVM的学习1--jvm基础和class文件的组成

文章目录 JVM概念JVM功能 JVM组成class文件一般信息 常量池字段方法 反编译 使用到了idea的jclasslib插件 JVM概念 全称Java Virtual Machine&#xff0c;java虚拟机。 将java字节码文件正确的加载和允许。 JVM功能 解释运行 对字节码指令实时的解释成机器码&#xff0c;让计…

【数字人】7、GeneFace++ | 使用声音和面部运动系数的关系作为 condition 来指导 NeRF 重建说话头

文章目录 一、背景二、相关工作2.1 唇形同步的 audio-to-motion2.2 真实人像渲染 三、方法3.1 对 GeneFace 的继承3.2 GeneFace 的结构3.2.1 Pitch-Aware Audio-to-Motion Transform3.2.2 Landmark Locally Linear Embedding3.2.3 Instant Motion-to-Video Rendering 四、效果 …

学人工智能等于失业?

随着科技的快速发展&#xff0c;人工智能已经渗透到我们生活的方方面面&#xff0c;从手机、智能家居到自动驾驶汽车&#xff0c;都离不开人工智能技术的支持。 因此&#xff0c;学习人工智能已经成为越来越多人追求高薪职业的选择。在这篇文章中&#xff0c;我们将探讨学习人…

Linux基本指令及周边(第一弹)

文章目录 前言mkdir指令&#xff08;重要&#xff09;&#xff1a;tree指令rmdir指令 && rm 指令(重要&#xff09;&#xff1a;touch指令ls指令pwd指令cd 指令用户家目录man指令&#xff08;重要&#xff09;&#xff1a;mv指令&#xff08;重要&#xff09;cat指令绝…

Linux 系统误将 chmod 权限改成 了 000,如何恢复?

Linux 系统误将 chmod 权限改成 了 000&#xff0c;如何恢复? busybox 是 Linux 标配&#xff0c;含有大多数主流 Linux 命令&#xff0c;你可以把它的存在当作救急备份。简单功能都可以调用 busybox 完成。这也就意味着很多原始命令出故障的情况下都可以用 busybox 暂时替代。…

调用本地大模型实现聊天机器人ChatBot

AWS Instance本地部署大模型 AWS上申请带GPU的instance&#xff0c;例如g4dn系列&#xff0c;申请instance后安装CUDA的driver&#xff0c;driver安装完成后&#xff0c;就可以在带gpu的instance上部署开源的大模型了。如果想了解在aws上部署本地模型细节&#xff0c;可以阅读…

upload-labs关卡11(双写后缀名绕过)通关思路

文章目录 前言一、回顾前几关知识点二、靶场第十一关通关思路1、看源代码2、bp抓包双写后缀名绕过3、检查文件是否成功上传 总结 前言 此文章只用于学习和反思巩固文件上传漏洞知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的平台&#xff0c;不能随意去尚未授权的…

主键问题以及分布式 id

分布式 id 需要处理的问题主要是同一时间在多台机器中保证生成的 id 唯一&#xff0c;为了这么做我们可以这么做&#xff1a; 分布式 id 生成策略 先说几个已经被淘汰的策略引出分布式 id 的问题 1&#xff0c;UUID&#xff1a;UUID 随机并且唯一&#xff0c;在单一的数据库…

JS进阶——构造函数数据常用函数

1、深入对象 1.1 创建对象三种方式 1.1.1 利用对象字面量创建对象 1.1.2 利用new Object创建对象 1.1.3 利用构造函数创建对象 1.2 构造函数 构造函数&#xff1a;是一种特殊的函数&#xff0c;主要用来初始化对象 使用场景&#xff1a;常规的{...}语法允许创建一个对象。…

【数据结构】手撕双向链表

目录 前言 1. 双向链表 带头双向循环链表的结构 2. 链表的实现 2.1 初始化 2.2 尾插 2.3 尾删 2.4 头插 2.5 头删 2.6 在pos位置之前插入 2.7 删除pos位置 3.双向链表完整源码 List.h List.c 前言 在上一期中我们介绍了单链表&#xff0c;也做了一些练习题&…

IC设计企业,如何安全、可控、高效的传输设计文档和研发数据?

近年来&#xff0c;半导体的应用领域不断拓展&#xff0c;在全球经济和社会发展中的重要性与日俱增&#xff0c;半导体芯片是数字经济的核心&#xff0c;承载着现代产业发展&#xff0c;具有举足轻重的价值。从半导体行业的角度&#xff0c;IC设计是关键的一环&#xff0c;我国…

中科创达:坚定看好未来十五年的大模型机遇

中科创达是一家成立于2008年的智能操作系统产品和技术提供商&#xff0c;15年前公司成立的时候正赶上了安卓操作系统将功能手机推向了智能手机&#xff0c;截至目前&#xff0c;已赋能超过近9亿台手机走向市场。2014年中科创达开始拓展智能汽车方向&#xff0c;2015年拓展物联网…

CSGO的那些事儿:CS2这么差,为什么不改回CS1?

揭秘csgo饰品涨价背后的残酷真相 1、V社现在更新内容集中在游戏性的修复方面。 所以原来期望的新地图新大行动等&#xff0c;要等到游戏本体趋于稳定后才更新。但是&#xff0c;因为距离下一个大型活动&#xff0c;也就是丹麦major还有5个月时间&#xff0c;那这之间必然要有一…

kubernetes 高可用集群

目录 一、haproxy负载均衡 二、pacemaker高可用 三、部署control-plane 四、部署worker node 实验环境 主机名 IP 角色 docker 192.168.67.10 harbor k8s1 192.168.67.11 control-plane k8s2 192.168.67.12 control-plane k8s3 192.168.67.13 control-plane k8s…

opencv(5): 滤波器

滤波的作用&#xff1a;一幅图像通过滤波器得到另一幅图像&#xff1b;其中滤波器又称为卷积核&#xff0c;滤波的过程称为卷积。 锐化&#xff1a;边缘变清晰 低通滤波&#xff08;Low-pass Filtering&#xff09;&#xff1a; 目标&#xff1a;去除图像中的高频成分&#…

【打卡】牛客网:BM55 没有重复项数字的全排列

自己写的&#xff1a; 虽然题目要求了排序&#xff0c;但是我没排序也可以通过。 class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param num int整型vector * return int整型vector<vec…

23届计科,想找Java开发之类,真的是很难吗?

23届计科&#xff0c;想找Java开发之类&#xff0c;真的是很难吗&#xff1f; 你的投递信息(投递多少家&#xff0c;如何跟hr打招呼&#xff0c;已读不回如何应对等)都亮- -下才能知道问题出在 哪。最近很多小伙伴找我&#xff0c;说想要一些Java的资料&#xff0c;然后我根据…

Ubuntu 下C++数字雨

以前写过一个Window下的数字雨&#xff0c;像黑客帝国里那样的01数字&#xff0c;现在补充一版Linux下的。使用了curses库&#xff0c;安装方法与使用方法参照 Linux下curses函数库的详细介绍_libcurses库-CSDN博客 5-linux学习笔记之-----curses-CSDN博客 效果如下&#xf…

21. 深度学习 - 拓朴排序的原理和实现

文章目录 Hi,你好。我是茶桁。 上节课&#xff0c;我们讲了多层神经网络的原理&#xff0c;并且明白了&#xff0c;数据量是层级无法超过3层的主要原因。 然后我们用一张图来解释了整个链式求导的过程&#xff1a; 那么&#xff0c;我们如何将这张图里的节点关系来获得它的求…

抖音自动评论脚本,可按关键词,实现批量点赞,按键精灵开源版!

这个脚本是我之前给一个客户开发的&#xff0c;现在用着也没啥意义&#xff0c;开发了很多&#xff0c;我索性就把代码直接分享出来&#xff0c;给一些新手做学习研究用&#xff0c;里面很多结构都是自己花费了很大的心思和心血才弄出来的&#xff0c;所以价值很高。 UI界面&a…