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

news/2024/11/9 3:05:12/

目录

主键

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.ppmy.cn/news/109931.html

相关文章

LeetCode - 10 正则表达式匹配

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 10. 正则表达式匹配 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符 * 匹配零个或…

开源SCRM营销平台MarketGo-账号管理

一、概述 企业在经营的过程中&#xff0c;因为业务、税收等各种因素的需要在各地成立分公司&#xff0c;这样针对公司来说管理成本&#xff0c;运营成本&#xff0c;营销成本都会提高&#xff0c;并且沟通的效率也会变低。 在用户营销的场景中&#xff0c;MarketGo在SCRM做了…

2023年数学建模国赛:线性回归:从原理到实践

2023年9月数学建模国赛期间提供ABCDE题思路加Matlab代码,专栏链接(赛前一个月恢复源码199,欢迎大家订阅):http://t.csdn.cn/Um9Zd 目录 1. 线性回归的基本原理 2. 最小二乘法 3. 线性回归的评估指标 4. 线性回归的实现 —— 使用 MATLAB 5. 实际案例分析 5.1 数据预处理…

2023年数学建模:旅行商问题:数学建模与MATLAB实现

2023年9月数学建模国赛期间提供ABCDE题思路加Matlab代码,专栏链接(赛前一个月恢复源码199,欢迎大家订阅):http://t.csdn.cn/Um9Zd 目录 引言 问题定义 解决策略 MATLAB实现 数学建模案例 案例一&#xff1a;旅行商计划行程 案例二&#xff1a;物流配送 案例三&#xf…

【马蹄集】第十三周作业

第十三周作业 目录 MT2137 附庸的附庸MT2138 采蜜MT2139 暧昧团 MT2137 附庸的附庸 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;128M 题目描述 蒙德城的旧贵族们存在着附庸的关系。欧洲有一位伟人说过&#xff0c;我的附庸的附庸不是我的附庸…

python如何解决js逆向混淆?

JavaScript混淆是一种保护网站安全的技术&#xff0c;混淆可将代码进行多种变形和加密&#xff0c;使得 JavaScript 代码变得难以阅读和理解。逆向混淆是混淆中的一种方式。通过逆向混淆&#xff0c;混淆的代码更难被攻击者分析和了解混淆的含义。Python 是一种强大的编程语言&…

Python篇——数据结构与算法(第四部分:希尔排序及其讨论、计数排序、桶排序、基数排序)

1、希尔排序 希尔排序&#xff08;shell sort&#xff09;是一种分组插入排序算法首先取一个整数d1n/2&#xff0c;将元素分为d1个组&#xff0c;每组相邻两元素之间距离为d1&#xff0c;在各组内进行直接插入排序取第二个整数d2d1/2&#xff0c;重复上述分组排序过程&#xf…

C 语言风格的字符串,非 string 类如何初始化字符串,以及操作字符串的函数(C++复习向p12)

C 风格的字符串 以 C 风格初始化字符串&#xff0c;有这 2 种方法。其中的 ‘\0’ 是字符串结束符号&#xff0c;是 null 字符 char site[7] {R, U, N, O, O, B, \0}; char site[] "RUNOOB";C 中操作字符串的函数 (以null结尾的字符串) strcpy(s1, s2) 把 s2 复…