【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),正则表达式内具有特殊意义的所有字符都必须以这种方式转义。这包括.、|、[]以及迄今为止使用过的其他特殊字符。
相关文章:

【Mysql】学习笔记
目录 基本操作登录指令:启动、关闭、重启mysql指令(适用于centos7):查看mysql运行状态:删除和创建表 修改密码(ubuntu18.04可行,其余版本行不行不知道)3 使用MYSQL了解数据库和表 4 …...
工作记录-------java文件的JVM之旅(学习篇)---好理解
一个java文件,如何实现功能呢?需要去JVM这个地方。 java文件高高兴兴的来到JVM,想要开始JVM之旅,它确说:“现在的我还不能进去,需要做一次转换,生成class文件才行”。为什么这样呢?…...

城市内涝对策,万宾科技内涝积水监测仪使用效果
随着城市化进程的加速,城市道路积水问题明显越来越多,给人们的出行和生活带来更多的不便。内涝积水监测仪作为高科技产品能够实时监测道路积水情况,为城市排水系统的管理和维护提供重要的帮助。 在城市生命线的基础设施规划之中,地…...
android的通知使用
在 Android 中,通知(Notification)是一种在状态栏显示消息的方式,通常用于向用户展示应用程序的重要信息、事件或更新。以下是一个简单的示例,演示如何在 Android 应用程序中使用通知: import android.app…...

001 opencv addWeighted
目录 一、环境 二、addWeighted函数 三、代码演示 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、addWeighted函数 OpenCV中的cv.addWeighted函数是一个用于图像叠加的函数,它可以将两个具有相同尺寸和类型的图像按…...
2311rust,到35版本更新
1.32.0 rustup self update rustup update stablerustup更新自己. dbg宏 打印调试,你需要: let x 5; println!("{:?}", x); //甚至可能是 println!("{:#?}", x);在Rust1.32.0中,为此添加了个新的dbg!宏: fn main() {let x 5;dbg!(x); }如果运行此…...

UniPro提高集成能力 让客户专注于交付价值
一千个哈姆莱特就有一千个读者,一千个开发团队,也会有各不相同的软件工具和工作流程。工具与工具之间,功能上的割裂亦或重叠,都会给企业和团队的协作带来阻塞,结果就会导致团队之间各自为战、信息孤岛的形成以及资源的…...
Python---函数的作用,定义,使用步骤(调用步骤)
Python实际开发中,使用函数的目的只有一个 “让我们的代码可以被重复使用” 函数的作用有两个: ① 模块化编程 ② 代码重用 在编程领域,编程可以分为两大类:① 模块化编程 ② 面向对象编程 函数就是一个 被命名的、独立的…...

ERP智能管理系统:智能化的未来之路
ERP智能管理系统:智能化的未来之路 科技飞速发展,人工智能(AI)和大数据等先进技术的应用正在改变着企业的运营模式。其中,ERP智能管理系统在帮助企业实现智能化运营、提高效率、降低成本等方面发挥着越来越重要的作用。本文将为您详细介绍ERP…...
c++ memccpy和 = 都可以用于赋值操作
memccpy和都可以用于赋值操作,但它们的作用和使用方式有所不同。 是C中的赋值运算符,可以用于基本类型、对象、结构体等的赋值操作。对于结构体,它会执行成员到成员的赋值,也就是浅拷贝。如果结构体中有指针成员,赋值只…...
Golang for 循环中的隐式内存别名问题
Golang for 循环中的隐式内存别名问题 隐式内存别名是指在循环迭代过程中对同一变量的多次引用可能导致不可预期的结果。这主要涉及到 goroutine 和闭包的使用场景,在并发编程中容易引起 bug。 例如,下面的示例代码中存在隐式内存别名问题:…...

2023年亚太杯数学建模思路 - 复盘:光照强度计算的优化模型
文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米,宽为12米&…...
Unity——利用Mesh绘制图形
什么是Mesh? Mesh 是用于表示和存储3D模型几何信息的类。它包含了顶点坐标、法线、UV坐标和其他与几何形状相关的数据,同时也包含了定义了这些数据如何连接以形成三角形的索引。 通过Mesh类,你可以创建、修改和渲染3D模型。一些常见的操作包括…...

web3资讯及远程工作
各位如果想了解区块链相关的消息可以通过如下网址了解,里面还会有相关职位招聘(包括远程工作),还可以在里面进行发帖,进入即可获得1000积分,后期可以兑换一些礼品Cryptosquare...

契约锁助力货物进出口全程无纸化,加速通关、降低贸易成本
我国作为全球最大的制造业国家和最大的货物贸易国家,政府始终注重引入数字化技术,创新管理和服务模式,帮助降低企业进出口成本,加速货物流通。 近年国家海关总署、商务部、税务总局及各地政府在进出口“报关”、“提货”、“收货备…...
生活中的综合能力
暖气管道不通 1 逐层排查哪层管道不通 2 排查该栋楼主管道和锅炉房总管道的连接口是否通畅 找不到主管道和总管道的连接口 查看其他楼和总管道的连接口 复盘: 先整体,后局部 求同求异思维:找差异,找正常暖气管道和异常暖气管…...

ES5中实现继承
本篇文章主要说明在ES5中最通用最兼容的继承实现方式,继承作为面向对象的三大特性之一,在js中实现继承对代码的简洁性,逻辑的连贯性都有很大的帮助。 实现思路 封装创建中间联系对象的函数 继承可以简单理解为建立子类和父类之间的联系&…...

面试鸭 - 专注于面试刷题的网站
网上面试题有很多,但此套面试题真实、原创、高频,全网最强。 题目涵盖大中小公司,真实靠谱,有频率和难度的标记,助你成为Offer收割机。 面试鸭地址:https://mianshiya.skyofit.com/ 本套题是我原创&…...
解决小程序路由超过10层限制
新建 navroter.js // 路由判断,小程序路由超过10层限制 // 避免小程序商品重复切换导致页面到结算单页时无法跳转到收货地址页,所以这里层级限制最大数为8 const MAX_VALUE 8 export function navigateTo(url) {let pages getCurrentPages()let dlt …...
【ceph】AI时代-数据为王-ceph存储将成为未来比较看好的赛道之一,为什么不all in一把学习一个不那么卷的赛道呢?
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...