《MYSQL必知必会》读书笔记1

news2024/12/24 10:35:52

目录

主键

MYSQL工具

使用MYSQL

连接

检索数据

检索(SELECT)

限制结果(LIMIT)

排序检索(ORDER BY)

过滤数据(WHERE)

过滤数据(AND、OR)

通配符

LINK操作符

正则表达式

基本字符匹配 

进行OR匹配

匹配几个字符之一

匹配特殊字符

匹配字符类

匹配多个实例


表中的一个记录

主键

每一行都应该有可以唯一表示自己的一列(或一组列)

总是应该定义主键,便于以后的数据操纵和管理

  • 任意两行不具有相同的主键,主键不为NULL
  • 不更新主键列中的值
  • 不重用主键列的值
  • 不在主键列中使用可能会更改的值

MYSQL工具

DBMS分为两类:

  1. 基于共享文件系统的DBMS(用于桌面用途,通常不用于高端或更关键的应用)
  2. 基于客户机-服务器的DBMS

MYSQL是一个客户机-服务器DBMS,所以需要一个客户机来与MYSQL打交道的一个应用。

MYSQL Administrator(MYSQL管理器)是一个图形交互客户机,用来简化MYSQL服务器的管理。

MYSQL Query Browser是一个图形交互客户机,用来编写和执行MYSQL命令。

使用MYSQL

连接

连接到MYSQL需要一下信息:

  • 主机名(计算机名)——连接到本地MYSQL服务器,为localhost
  • 端口(使用默认端口3306之外的端口时需要标明)
  • 合法的用户名
  • 用户口令(需要操作时使用)

进入数据库及其一些操作:

SQL语句不区分大小写

输入指令:

mysql -uroot -p

接着输入进入数据库的密码

然后显示

接着可以输入一下指令来查看:

show databases;

(英文分号)

 

use 数据库名;

发出使用该数据库的命令时,可以使用该数据库

show tables;

查看数据库中的表

describe 表名; 

查看表的设计结构

show columns from study;(study是一个表名)

可以返回

创建数据库及其中的表

1、create database 数据库名;

创建数据库

2、use 数据库名;

这一步不能省,进入这个数据库,才能在这个数据库中创建表

3、create table user;

4、接着输入设计表的结构

检索数据

检索(SELECT)

检索单个列

SELECT coursename FROM courses;

从courses表中检索一个名为name的列

未排序数据(输出的数据顺序和这里的不同,有可能是数据添加到表中的顺序,也可能不是)

检索多个列

SELECT id,coursename,class_id,user_id FROM courses;

从courses表中选择数据,指定了要选择的数据

检索所有列

SELECT * FROM courses;

从courses表中使用星号通配符来表示

可以检索出名字未知的列

检索不同的行

SELECT coursename FROM courses;

可以返回所有匹配的行,如果要检索不同值的列表,可以使用DISTINCT关键字

SELECT DISTINCT coursename FROM courses;

在一条SQL语句中,不能部分使用DISTINCT关键字,如果给出:

SELECT DISTINCT name,class_id FROM courses; 

除非指定的两个列都不同,否则所有行都将被检索出来。

限制结果(LIMIT)

SELECT courseName FROM courses LIMIT 5;

LIMIT 5 指示MYSQL返回不多于5行

SELECT courseName FROM courses LIMIT 5,5;

LIMIT 5,5指示MYSQL返回从第五行开始的五行,第一个数是开始的位置,第二个是要检索的行数

注意:

  • 行0:检索出来第一行是行0而不是行1,LIMIT 1,1 将检索出第二行,而不是第一行
  • 行数不够,就会减少返回的行数

SELECT courses.courseName FROM courses;

同时使用表名和列名,来引用列

SELECT courses.courseName FROM study.courses;

表名也可以是完全限定的

排序检索(ORDER BY)

子句:SQL语句由子句构成,有些子句是必需的,有些是可选的,一个子句通常由关键字和所提供的数据组成。

按一个列排序

SELECT class_id FROM courses ORDER BY class_id;

这条语句指示对class_id列,以数字大小顺序排序数据

按多个列排序

SELECT class_id,id FROM courses ORDER BY class_id,id;

这条语句指示MYSQL先按照class_id排序,当class_id的值相同时,才根据course_id的值排序

指定排序方向

SELECT class_id,id FROM courses ORDER BY class_id DESC,id ;

按照班级id的大小从大到小排序。然后对于班级id相同的情况,再按照id的大小从小到大排序

DESC关键字只应用到直接位于其前面的列名

  • 在多个列上降序排序,必须对每个列指定DESC关键字
  • 与DESC相反的关键字是ASC,在升序排序是可以指定它,也可以省略(默认是升序)

过滤数据(WHERE)

SELECT user_id FROM courses WHERE courseName=‘离散数学’ ;

根据WHERE子句中指定的搜索条件进行过滤,WHERE子句在表名之后给出

如果还要使用ORDER BY子句,应该将ORDER BY子句放在WHERE之后

检查单个值

SELECT prod_name,price FROM products WHERE prod_name=‘fuses’ ;

这条语句可以检索到fuses、Fuses等,因为在MYSQL执行匹配时不区分大小写

SELECT prod_name,price FROM products WHERE price<10;

检索到价格小于等于10的所有产品

不匹配检查

SELECT user_id,age FROM users WHERE age<>20;

SELECT user_id,age FROM users WHERE age!=20;

范围值检查

SELECT prod_name,price FROM product BETWEEN 5 AND 10;

空值检查

创建表时,可以指定其中的列是否可以不包括值(NULL)

SELECT prod_name FROM products WHERE price IS NULL;

过滤数据(AND、OR)

AND操作符

SELECT id,price,prod_name FROM products WHERE products id=1003 AND price<=10;

OR操作符

SELECT prod_name,price FROM products WHERE id=1002 OR id=1003;

WHERE可包含任意数目的AND和OR操作符,SQL会优先处理AND操作符。 

IN操作符

SELECT prod_name,price FROM products WHERE id IN(1002,1003) ORDER BY prod_name;

用来指定条件范围,范围内的每个条件都可以匹配

NOT操作符

否定它之后的任何条件

SELECT prod_name,price FROM products WHERE id NOT(1002,1003) ORDER BY prod_name;

匹配 1002 和 1003 之外供应商的id。

通配符

LINK操作符

通配符:用来匹配值的一部分的特殊字符

搜索模式:由字面值、通配符或两者组合构成的搜索条件

百分号通配符(%)

%表示任何字符出现任意次数

SELECT id,prod_name FROM products WHERE prod_name LIKE 'jet%';

  • %jet%可以找出所有以jet开头的产品(可以匹配任何位置上包含jet的值)
  • 使用s%e可以找到以s开头,e结尾的产品

%可以匹配0个或1个或多个字符

注意尾空格

可能会干扰通配符匹配,例如'%anvil'不会匹配anvil,因为在最后的字母后面有多余的字符

解决办法:在搜索模式后附加一个%,或者是使用函数去掉尾空格

注意NULL

%不能匹配NULL

下划线通配符(_)

_ 的用途和%一样,但下划线只能匹配单个字符而不是多个字符

SELECT id,prod_name FROM products WHERE prod_name LIKE '_ ton anvil';

正则表达式

基本用法:

http://t.csdn.cn/bmrA8

基本字符匹配 

SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name;

REGEXP 后跟的为正则表达式,检索列prod_name包含文本1000的所有行

SELECT prod_name FROM products REGEXP '.000' ORDER BY prod_name;

使用正则表达式 .000,. 是正则表达式中一个特殊的字符,匹配任意一个字符,所以可以返回1000,2000,3000等


LIKE是匹配整列值,REGEXP是匹配子字符串

例如——num列的值为:30742328470-636310,

        pad like '30742328470’这种写法,是查询不到记录的,除非使用pad like ‘30742328470%’,匹配整列的值。

        如果用regexp,可以这样写,pad regexp ‘30742328470’,不用匹配整列值,就可以过滤出需要的记录行。

LIKE部分场景可以走索引,而REGEXP则不会走索引


MYSQL中的正则表达式不区分大小写,如果要区分可以使用BINARY关键字:

WHERE prod_name REGEXP BINARY 'JetPack .000'

进行OR匹配

SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;

和1000或2000都匹配并返回

也两个以上的OR条件

匹配几个字符之一

SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name;

使用了正则表达式[123] Ton,[123] Ton定义一组字符,意思是匹配1 Ton或2 Ton或3 Ton

SELECT prod_name FROM products WHERE prod_name REGEXP '1|2|3 Ton' ORDER BY prod_name;

匹配特殊字符

SELECT vend_name FROM vendors WHERE vend_name REGEXP '\\.' ORDER BY vend_name ;

\\ . 匹配 ,这种处理就是转义

\\\        匹配\

\\?       匹配?

\\|        匹配|

\\[        匹配[

\\也用来引用元字符:

\\f        换页

\\n       换行

\\r        回车

\\t        制表

\\v       纵向制表

匹配字符类

匹配多个实例

 SELECT prod_name FROM products WHERE prod_name REGEXP '\\[0-9] sticks?\\)' ORDER BY prod_name;

[0-9]匹配数字,\\(匹配(,stick?匹配sticks或stick

SELECT prod_name FROM products WHERE prod_name REGEXP '[[:digit:]]{4}' ORDER BY prod_name;

[:digit:]匹配数字,{4}要求它前面的字符出现四次

定位符

 SELECT prod_name FROM products WHERE prod_name RECEXP '^[0-9]' ORDER BY prod_name;

找出以数字开头的所有产品

  • ^有两种用法:在集合中(用[和]定义),用它 来否定该集合,否则,用来指串的开始处。
  • REGEXP有类似LIKE的作用:LIKE和REGEXP 的不同在于,LIKE匹配整个串而REGEXP匹配子串。利用定位 符,通过用^开始每个表达式,用$结束每个表达式,可以使 REGEXP的作用与LIKE一样。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试总结

软件生命周期(SDLC)的六个阶段 1、问题的定义及规划 此阶段是软件开发方与需求方共同讨论&#xff0c;主要确定软件的开发目标及其可行性。 2、需求分析 在确定软件开发可行的情况下&#xff0c;对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要…

ML | 6 支持向量机

ML | 6 支持向量机 文章目录 ML | 6 支持向量机SVM介绍线性不可分数据线性可分数据 寻找最大间隔分类器求解的优化问题 SMO高效优化算法简化版SMO处理小规模数据集伪代码程序清单 完整Platt SMO 算法加速优化完整 Platt SMO的支持函数完整Platt SMO算法中的优化例程完整Platt S…

记录--Vue3自定义一个Hooks,实现一键换肤

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 核心 使用CSS变量, 准备两套CSS颜色, 一套是在 light模式下的颜色,一套是在dark模式下的颜色dark模式下的 CSS 权重要比 light 模式下的权重高, 不然当我们给html添加自定义属性[data-themedark]的时候…

CVPR 2023 | 南大王利民团队提出LinK:用线性核实现3D激光雷达感知任务中的large kernel...

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【Transformer】微信交流群 【CVPR 2023】LinK&#xff1a;用线性核实现3D激光雷达感知任务中的large kernel 本文介绍我们媒体计算研究组&#xff08;MCG&#xff09;在3D激…

chatgpt赋能python:Python中的提取函数——数据清洗中必不可少的利器

Python中的提取函数——数据清洗中必不可少的利器 数据清洗是数据分析过程中不可或缺的一步&#xff0c;而Python中的提取函数则是数据清洗中必不可少的利器。本文将重点介绍一些Python中常用的提取函数&#xff0c;以帮助数据分析师更好地应对实际问题。 什么是提取函数&…

react antd Modal里Form设置值不起作用

问题描述&#xff1a; react antd Modal里Form设置值不起作用&#xff0c;即使用form的api。比如&#xff1a;编辑时带出原有的值。 造成的原因&#xff1a;一般设置值都是在声明周期里设置&#xff0c;比如&#xff1a;componentDidMounted里设置&#xff0c;hook则在useEff…

云网络安全与数据中心安全

近年来&#xff0c;许多云架构师宣称随着公共云的采用&#xff0c;网络安全性将消亡。然而&#xff0c;网络安全仍然是最大的安全市场之一&#xff0c;并且是每个主要云服务提供商 (CSP) 在过去几年中推出重要新产品的领域。 网络对安全仍然至关重要&#xff0c;即使在云中也是…

【软考系统规划与管理师笔记】第4篇 信息技术服务知识

目录 1 产品、服务和信息技术服务 1.1 产品 1.2 服务 1.3 信息技术服务 2运维、运营和经营 2.1运维 2.2运营 2.3经营 3 IT治理 4 IT服务管理 4.1传统管理方式 4.2体系化管理方式 5项目管理 6质量管理理论 6.1质量管理发展历史 6.2质量管理常见理论方法 6.3质…

【公网远程Jellyfin】——本地部署Jellyfin影音服务器

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及&#xff0c;各种各样的使用需求也被开发出来&…

面向Java开发者的ChatGPT提示词工程(5)

GPT 的局限性 在探讨开发大型语言模型应用程序时&#xff0c;我们必须认识到 GPT 存在一些局限性。这些限制对于我们保持清醒的头脑至关重要。 尽管在 GP T的训练过程中融入了大量知识&#xff0c;但它并非能够完美地记住所见之物&#xff0c;并且对这些知识的边界了解有限。…

玩转用户旅程地图

图&#xff1a;史江鸿 从事需求分析和产品设计工作已经有几个年头了&#xff0c;我很享受这个职业。因为在这段职业历程中&#xff0c;我学到了很多有意思的方法和工具&#xff0c;用户旅程地图就是其中一个。 如今在国内外许多IT公司&#xff0c;用户旅程地图已经成为需求分析…

ElasticSearch安装部署

ElasticSearch安装部署 简介 全文搜索属于最常见的需求&#xff0c;开源的 Elasticsearch &#xff08;以下简称 es&#xff09;是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。 Elasticsearch简称es&…

C++【实现红黑树(核心插入)】

文章目录 一、红黑树概念介绍二、红黑树模拟实现&#xff08;1&#xff09;红黑树节点&#xff08;2&#xff09;红黑树插入分析(核心)&#xff08;3&#xff09;插入代码思路(如何快速写插入算法)&#xff08;4&#xff09;判断平衡函数&#xff08;5&#xff09;查找函数&…

01_java基础语法

1. Java概述 1.1 Java语言背景介绍&#xff08;了解&#xff09; 语言&#xff1a;人与人交流沟通的表达方式 计算机语言&#xff1a;人与计算机之间进行信息交流沟通的一种特殊语言 Java语言是美国Sun公司&#xff08;Stanford University Network&#xff09;在1995年推出的…

【软硬件测试】测试经验:软硬件结合测试要点

目录 一、应用行业 二、测试要点 三、硬件测试 &#xff08;1&#xff09;测试含义 &#xff08;2&#xff09;测试方法 &#xff08;3&#xff09;相关链接 四、结合测试 &#xff08;1&#xff09;测试含义 &#xff08;2&#xff09;测试工具 &#xff08;3&am…

NIO之SocketChannel,SocketChannel ,DatagramChannel解读

目录 基本概述 ServerSocketChannel 打开 ServerSocketChannel 关闭 ServerSocketChannel 监听新的连接 阻塞模式 非阻塞模式 SocketChannel SocketChannel 介绍 SocketChannel 特征 创建 SocketChannel 连接校验 读写模式 读写 DatagramChannel 打开 Datagr…

chatgpt赋能python:Python中的开方指令:介绍和使用

Python中的开方指令&#xff1a;介绍和使用 Python是一种流行的编程语言&#xff0c;广泛用于数据科学、机器学习、Web开发和其他领域。在许多情况下&#xff0c;需要对数值进行数学计算&#xff0c;其中包括开方运算。Python中有多种方法可以执行开方运算&#xff0c;本文将介…

chatgpt赋能python:Python中的“或”语句:使用方法和示例

Python中的“或”语句&#xff1a;使用方法和示例 在Python编程中&#xff0c;“或"语句表示为"or”&#xff0c;它是逻辑运算符的一种形式。"或"语句可以用于组合两个或多个条件&#xff0c;只要其中一个条件成立&#xff0c;整个语句就会返回True。在本…

Rust每日一练(Leetday0016) 全排列I\II、旋转图像

目录 46. 全排列 Permutations &#x1f31f;&#x1f31f; 47. 全排列 II Permutations II &#x1f31f;&#x1f31f; 48. 旋转图像 Rotate Image &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专…

Golang每日一练(leetDay0082) 用队列实现栈、用栈实现队列

目录 225. 用队列实现栈 Implement Stack Using Queues &#x1f31f; 232. 用栈实现队列 Implement Queue Using Stacks &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 …