MySQL学习(一)——简介以及SQL语句

news2024/12/28 6:33:08

文章目录

  • 1. MySQL介绍
    • 1.1 数据库概述
    • 1.2 关系型数据库
  • 2. SQL
    • 2.1 SQL通用规范
    • 2.2 DDL
      • 2.2.1 数据库操作
      • 2.2.2 创建和查询表
      • 2.2.3 修改表
      • 2.2.4 数据类型
      • 2.2.5 DataGrip使用
    • 2.3 DML
      • 2.3.1 添加数据
      • 2.3.2 更新和删除
    • 2.4 DQL
      • 2.4.1 基础查询
      • 2.4.2 条件查询
      • 2.4.3 聚合函数
      • 2.4.4 分组查询
      • 2.4.5 排序查询
      • 2.4.6 分页查询
      • 2.4.7 执行顺序
    • 2.5 DCL
      • 2.5.1 管理用户
      • 2.5.2 权限控制
    • 2.6 模糊查询
      • 2.6.1 通配符
        • 2.6.1.1 分类
        • 2.6.1.2 使用
        • 2.6.1.3 注意
      • 2.6.2 内置函数检索
        • 2.6.2.1 LOCATE函数
        • 2.6.2.2 POSITION函数
        • 2.6.2.3 INSTR()方法
      • 2.6.3 正则匹配
      • 2.6.4 字符类匹配

1. MySQL介绍

1.1 数据库概述

数据库是按照数据结构组织、存储和管理数据的仓库,存放数据的仓库,为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。mysql数据库就是这样一个关系型数据库管理系统(RDBMS),它可以称得上是目前运行速度最快的SQL数据库管理系统。

mysql是一款自由软件,任何人可以从官网网址中下载。mysql是一个真正的多用户,多线程sql数据库服务器。它是以客户/服务器结构的实现,由一个服务程序mysqld和很多不同的客户程序和库组成。它能够快捷、有效和安全地处理大量的数据。相对于oracle等数据库来说,mysql在使用时非常简单。mysql的主要目标是快捷、便捷和易用,以下是mysql的一些特点:

  • 开源和免费:MySQL是开源的,并且可以免费使用。这使得MySQL成为开发人员和小型企业的首选数据库。
  • 可扩展性:MySQL可以轻松地扩展以支持更大的数据集和更高的并发用户。MySQL提供了许多扩展和插件,以帮助用户轻松地进行扩展。
  • 跨平台支持:MySQL可以在多个平台上运行,包括Windows、Linux、Unix、macOS等。
  • 安全性:MySQL具有强大的安全功能,可以保护数据免受未经授权的访问。MySQL提供了许多安全功能,例如加密、用户访问控制和审计等。
  • 高可用性:MySQL支持主从复制和自动故障转移,这使得MySQL可以实现高可用性和灾备恢复。
    性能:MySQL具有卓越的性能,可以轻松地处理大型数据集和高并发用户。MySQL支持索引、查询优化和缓存等功能,以提高性能。
  • 支持大型企业应用程序:MySQL可以处理大型企业级应用程序和高流量网站。许多大型企业和网站使用MySQL作为他们的数据库管理系统。

1.2 关系型数据库

关系数据库是数据项之间具有预定义关系的数据项的集合。这些项被组织为一组具有列和行的表。表用于保存有关要在数据库中表示的对象的信息。表中的每列都保存着特定类型的数据,字段存储着属性的实际值。表中的行表示一个对象或实体的相关值的集合。表中的每一行可标有一个称为主键的唯一标识符,并且可使用外键在多个表中的行之间建立关联。可以通过许多不同的方式访问此数据,而无需重新组织数据库表本身。

关系型数据库有几个重要的方面,其特点如下:

  • **SQL:**SQL(结构化查询语言)是用于与关系数据库通信的主要接口。SQL 于 1986 年成为美国国家标准协会 (ANSI) 的标准。流行的所有关系数据库引擎都支持标准的 ANSI SQL,其中一些引擎还对 ANSI SQL 进行了扩展,可支持特定于该引擎的功能。SQL 可用于添加、更新或删除数据行,检索事务处理和分析应用程序的数据子集,以及管理数据库的所有方面。

  • **数据完整性:**数据完整性指的是数据的整体完整性、准确性和一致性。关系数据库使用一组约束来强制确保数据库中数据的完整性。它们包括主键、外键、“Not NULL”约束、“Unique”约束、“Default”约束和“Check”约束。这些完整性约束有助于在表中的数据上强制实施业务规则,以确保数据的准确性和可靠性。除此之外,大多数关系数据库还允许将自定义代码嵌入到基于数据库上的操作执行的触发器中。

  • **事务处理:**数据库事务是作为构成单个逻辑工作单元的操作序列执行的一个或多个 SQL 语句。事务提供了一个“全是或全否”命题,这意味着整个事务必须作为一个单元完成并写入数据库,否则事务的各个组成部分都不应执行。在关系数据库术语中,事务会导致 COMMIT 或 ROLLBACK。每个事务以连贯和可靠的方式独立于其他事务进行处理。

  • ACID 合规性:

    所有数据库事务都必须遵守 ACID,即必须是原子的、一致的、隔离的和持久的,以确保数据的完整性。

    原子性要求事务作为一个整体成功执行,如果事务的任一部分执行失败,则整个事务都将无效。一致性规定作为事务一部分写入数据库的数据必须遵守所有定义的规则及限制,后者包括约束、级联和触发器。隔离对于实现并发控制至关重要,它确保每个事务对其自身是独立的。持久性要求在成功完成事务后,对数据库所做的所有更改都是永久性的。

2. SQL

SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的编程语言。它被用于创建、修改和查询数据库,以及执行诸如数据插入、删除和更新等各种任务。SQL 在Web开发、数据分析和数据库管理系统中被广泛应用。

2.1 SQL通用规范

  • SQL语句可以单行或多行书写,以分号结尾。
  • SQL语句可以使用空格/缩进来增强语句的可读性。
  • MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
  • 注释:
    • 单行注释:-- 注释内容或 # 注释内容
    • 多行注释:/* 注释内容 */

SQL 语句的分类如下:

分类全称说明
DDLData Define Language数据定义语言,用来定义数据库对象(数据库,表,字段)
DMLData Manipulation Language数据操作语言,用来对数据库表中的数据进行增删改
DQLData Query Language数据查询语言,用来查询数据库中表的记录
DCLData Control Language数据控制语言,用来创建数据库用户、控制数据库的访问权限

2.2 DDL

2.2.1 数据库操作

搜索 MySQL Command Line Client ,打开并输入密码,则可以尝试以下命令:

  • 查询所有数据库

    SHOW DATABASES;
    

  • 查询当前数据库

    SELECT DATABASE();
    
  • 创建数据库

    CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则]
    
  • 删除数据库

    DROP DATABASE[IF EXISTS] 数据库名
    
  • 使用数据库

    USE 数据库名;
    

2.2.2 创建和查询表

  • 查询当前数据库所有表

    SHOW TABLES;
    

    在这里插入图片描述

  • 查询表的结构,即表定义的列的类型等

    DESC 表名;
    

    在这里插入图片描述

  • 查询指定表的建表语句

    SHOW CREATE TABLE 表名;
    

    在这里插入图片描述

  • 创建表

    表的创建语句如下:

    CREATE TABLE 表名(
        字段名1 字段1类型 [COMMENT 字段名1注释],
        字段名2 字段2类型 [COMMENT 字段名2注释],
        字段名3 字段3类型 [COMMENT 字段名3注释],
        ……
        字段名n 字段n类型 [COMMENT 字段名n注释]
    )
    

    创建的语句示例如下:

    create table tb_user(
        id int comment '编号',
        name varchar(50) comment '姓名',
        age int comment '年龄',
        gender varchar(1) comment '性别'
    ) comment '用户表';
    

2.2.3 修改表

  • 添加字段

    ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT 注释][约束]
    
  • 修改列数据类型

    ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度)
    
  • 修改字段名和数据类型

    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束]
    
  • 删除字段

    ALTER TABLE 表名 DROP 字段名
    
  • 修改表名

    ALTER TABLE 表名 RENAME TO 新表名
    
  • 删除表

    DROP TABLE [IF EXISTS] 表名
    

2.2.4 数据类型

  1. 数值类型

    类型大小有符号(SIGNED)范围无符号(UNSIGNED)范围描述
    TINYINT1 byte(-128, 127)(0, 255)小整数值
    SMALLINT2 bytes(-32768, 32767)(0, 65535)大整数值
    MEDIUMINT3 bytes(-8388608, 8388607)(0, 16777215)大整数值
    INTINTEGER4 bytes(-2147483648, 2147483647)(0, 4294967295)大整数值
    BIGINT8 bytes(-2^63, 2^63-1)(0, 2^64-1)极大整数值
    FLOAT4 bytes(-3.402823466 E+38, 3.402823466351 E+38)0 和 (1.175494351 E-38, 3.402823466 E+38)单精度浮点数值
    DOUBLE8 bytes(-1.7976931348623157 E+308, 1.7976931348623157 E+308)0 和 (2.2250738585072014 E-308, 1.7976931348623157 E+308)双精度浮点数值
    DECIMAL依赖于M(精度)和D(标度)的值依赖于M(精度)和D(标度)的值小数值(精确定点数)
  2. 字符串类型

    类型大小描述
    CHAR0-255 bytes定长字符串
    VARCHAR0-65535 bytes变长字符串
    TINYBLOB0-255 bytes不超过255个字符的二进制数据
    TINYTEXT0-255 bytes短文本字符串
    BLOB0-65 535 bytes二进制形式的长文本数据
    TEXT0-65 535 bytes长文本数据
    MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
    MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
    LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
    LONGTEXT0-4 294 967 295 bytes极大文本数据
  3. 日期类型数据

    类型大小范围格式描述
    DATE31000-01-01 至 9999-12-31YYYY-MM-DD日期值
    TIME3-838:59:59 至 838:59:59HH:MM:SS时间值或持续时间
    YEAR11901 至 2155YYYY年份值
    DATETIME81000-01-01 00:00:00 至 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
    TIMESTAMP41970-01-01 00:00:01 至 2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS混合日期和时间值,时间戳

2.2.5 DataGrip使用

首先新建一个Project,然后点击 + 号,找到对应的数据源,这里选 MySQL。

在这里插入图片描述

然后填写连接中的账号和密码,并点击下面的 Test Connection,如果显示成功则点击OK。

在这里插入图片描述

然后点击 New Schema 创建数据库。

在这里插入图片描述

弹出窗口后创建数据库的名字,注意,这里的语句中建立 Schema和Database起到的效果是一致的。

在这里插入图片描述

创建表也一样简单,只需要右键创建表即可,

在这里插入图片描述

2.3 DML

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作,其通常的操作如下:

  • 添加数据(INSERT)

  • 修改数据(UPDATE)

  • 删除数据(DELETE)

2.3.1 添加数据

  • 给指定字段添加数据

    INSERT INTO 表名(字段名1,……) VALUES(1,……)
    
  • 给全部字段添加数据

    INSERT INTO 表名 VALUES(1,……)
    
  • 批量添加数据

    INSERT INTO 表名(字段名1,……) VALUES(1,……),(1,……),(1,……);
    
    INSERT INTO 表名 VALUES(1,……),(1,……),(1,……);
    

注意:

  1. 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
  2. 字符串和日期型数据应该包含在引号中。
  3. 插入的数据大小,应该在字段的规定范围内。

2.3.2 更新和删除

  • 修改数据

    UPDATE 表名 SET 字段名1=1, 字段名2=2,…… [WHERE 条件]
    

    如果不加 where 条件, 则修改的时整个表的所有行的字段名。

  • 删除数据

    DELETE FROM 表名 [WHERE 条件] 
    

    DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。

    DELETE语句不能删除某一个字段的值(可以使用UPDATE)。

2.4 DQL

DQL 数据库查询语句的一般模板如下:

2.4.1 基础查询

  • 查询多个字段

    SELECT 字段1,... FROM 表名
    
    SELECT * FROM 表名 ;
    

    * 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)。

  • 字段设置别名

    SELECT 字段1 [AS 别名1], 字段2 [AS 别名2] ... FROM 表名;
    
    SELECT 字段1 [别名1], 字段2 [别名2] ... FROM 表名;
    

    在设置字段别名的时候,AS 可以省略不写。

  • 去除重复记录

    SELECT DISTINCT 字段列表 FROM 表名;
    

2.4.2 条件查询

条件查询的语句如下:

SELECT 字段列表 FROM1WHERE 条件列表;

常用的比较运算符如下:

比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<> 或 !=不等于
BETWEEN … AND …在某个范围之内(含最小、最大值)
IN(…)在in之后的列表中的值,多选一
LIKE 占位符占位符模糊匹配(_匹配单个字符, %匹配任意个字符)
IS NULL是NULL

常用的逻辑运算符如下:

逻辑运算符功能
AND 或 &&并且(多个条件同时成立)
OR 或 ||或者(多个条件任意一个成立)
NOT 或 !非,不是

语法示例如下:

# 查询没有身份证号的员工信息
select * from emp where idcard is null;

# 查询年龄不等于 88 的员工信息
select * from emp where age != 88;
select * from emp where age <> 88;

# 查询年龄等于18 或 20 或 40 的员工信息
select * from emp where age in(18,20,40);

2.4.3 聚合函数

聚合函数将一列数据作为一个整体,进行纵向计算 。

常见的聚合函数如下:

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和

其语法为:

SELECT 聚合函数(字段列表) FROM 表名 ;

注意 : 表中的NULL值是不参与计算的。

语句示例为:

# 统计该企业员工的平均年龄
select avg(age) from emp;

# 统计西安地区员工的年龄之和
select sum(age) from emp where workaddress = '西安';

2.4.4 分组查询

分组查询语法为:

SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING分组后过滤条件 ];

在这里给大家说说 where,having 的区别。

  • 执行时机不同where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  • 判断条件不同where不能对聚合函数进行判断,而having可以。
  • 执行顺序: where > 聚合函数 > having 。

其使用案例如下:

# 根据性别分组 , 统计男性员工 和 女性员工的数量
select gender, count(*) from emp group by gender;

# 查询年龄小于45的员工 , 并根据工作地址分组 , 获取员工数量大于等于3的工作地址
select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count >= 3;

# 统计各个工作地址上班的男性及女性员工的数量
select workaddress, gender, count(*) '数量' from emp group by gender, workaddress;

2.4.5 排序查询

排序在日常开发中是非常常见的一个操作,有升序排序,也有降序排序。

排序的语法如下:

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2 ;

排序方式包括:

  • ASC 升序(默认值),由于是默认,可以不用指定
  • DESC 降序

如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

2.4.6 分页查询

分页操作在业务系统开发时,也是非常常见的一个功能,我们在网站中看到的各种各样的分页条,后台都需要借助于数据库的分页操作。

分页查询的语法如下:

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;

其中:

  • 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数

  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT

  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10

2.4.7 执行顺序

在查询语法的各个部分,有不同的执行顺序,其各个部分对应的执行顺序如下图所示:

在这里插入图片描述

2.5 DCL

DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。

2.5.1 管理用户

  • 查询用户

    SELECT * FROM mysql.user
    

    查询的结果如下:

    在这里插入图片描述

    其中 Host代表当前用户访问的主机, 如果为localhost, 仅代表只能够在当前本机访问,是不可以远程访问的。 User代表的是访问该数据库的用户名。在MySQL中需要通过Host和User来唯一标识一个用户。

  • 创建用户

    CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
    
  • 修改用户密码

    ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;
    
  • 删除用户

    DROP USER '用户名'@'主机名' ;
    

其代码示例如下:

# 创建用户suppose, 只能够在当前主机localhost访问, 密码123456;
create user 'suppose'@'localhost' identified by '123456';

# 创建用户go, 可以在任意主机访问该数据库, 密码123456;
create user 'go'@'%' identified by '123456';

# 修改用户go的访问密码为1234;
alter user 'go'@'%' identified with mysql_native_password by '1234';

2.5.2 权限控制

MySQL中定义了很多种权限,但是常用的就以下几种:

权限说明
ALL, ALL PRIVILEGES所有权限
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
ALTER修改表
DROP删除数据库、表、视图
CREATE创建数据库、表

上述只是简单罗列了常见的几种权限描述,其他权限描述及含义,可以直接参考官方文档。

有关权限的语法如下:

  • 查询权限

    SHOW GRANTS FOR '用户名'@'主机名' ;
    
  • 授予权限

    GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
    
  • 撤销权限

    REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
    

注意:

  • 多个权限之间,使用逗号分隔
  • 授权时, 数据库名和表名可以使用 * 进行通配,代表所有

示例如下:

# 查询 'go'@'%' 用户的权限
show grants for 'go'@'%';

# 授予 'go'@'%' 用户study数据库所有表的所有操作权限
grant all on study.* to 'go'@'%';

# 撤销 'go'@'%' 用户的study数据库的所有权限
revoke all on study.* from 'go'@'%';

2.6 模糊查询

2.6.1 通配符

2.6.1.1 分类
  • % :表示任何字符出现任意次数 (可以是0次)。
  • _ :表示只能匹配单个字符,不能多也不能少,就是一个字符。当然,也可以like “陈____”,数量不限。
  • like 操作符:LIKE作用是指示mysql后面的搜索模式是利用通配符而不是直接相等匹配进行比较;但如果like后面没出现通配符,则在SQL执行优化时将 like 默认为 “=”执行
2.6.1.2 使用
  1. %通配符

    # 模糊匹配含有“工”字的数据
    select * from tb_user where profession like '%工%'
    
    # 模糊匹配以“工”字结尾的数据
    select * from tb_user where profession like '%工'
    
    # 模糊匹配以“工”字开头的数据
    select * from tb_user where profession like '工%'
    
  2. _通配符

    # 查询以“工”为结尾的,长度为四个字的数据
    select * from tb_user where profession like '___工'
    
    # 查询以“软”开头,“工”结尾的数据
    select * from tb_user where profession like '软__工'
    
2.6.1.3 注意
  1. **注意大小写。**在使用模糊匹配时,也就是匹配文本时,MySQL默认配置是不区分大小写的。当你使用别人的MySQL数据库时,要注意是否区分大小写,是否区分大小写取决于用户对MySQL的配置方式。如果是区分大小写,那么像Test12这样记录是不能被"test__"这样的匹配条件匹配的。

  2. 注意NULL。%通配符可以匹配任意字符,但是不能匹配NULL,也就是说SELECT * FROM blog where title_name like '%'; 是匹配不到title_nameNULL的的记录。

  3. **不要过度使用通配符。**通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长,消耗更多的内存等资源。如果其他操作符能达到相同的目的,应该使用其他操作符。

  4. **在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。**因为MySQL在where后面的执行顺序是从左往右执行的,如果把通配符置于搜索模式的开始处(最左侧),搜索起来是最慢的(因为要对全库进行扫描)。

  5. 通配符转义。 像如果我们匹配的结果有 _,% 的情况,我们就需要使用到转义符了。MySQL中的转义符需要加 ESCAPE 关键字进行转义。如下,ESCAPE 后面跟着一个字符,里面写着什么,MySQL就把那个符号当做转义符,一般我就写成"/"

    select * from tb_user where profession like '%/_%' escape '/';
    

2.6.2 内置函数检索

MySQL有内置的函数检索,即 locate,position,instr ,相当于Java中的 str.contains() 方法,返回的是匹配内容在字符串中的位置,效率和可用性上都优于通配符匹配。

下面我们即对MySQL的三个内置函数检索进行讲解,首先声明,MySQL的下标是从1开始,并不是从0开始

2.6.2.1 LOCATE函数

其函数语法为:

LOCATE(substr,str, [pos])

返回 substr str 中第一次出现的位置。如果 substr str 中不存在,返回值为 0,如果substr str 中存在,返回值为substr str中第一次出现的位置。
如果有pos参数存在,那么从位置pos开始的字符串str中第一次出现子字符串substr的位置。 如果substr不在str中,则返回0。 如果substrstrNULL,则返回NULL

示例:

其中使用反引号是为了用于引用表列名,以便识别列名中包含特殊字符、空格或与 SQL 关键字冲突的情况。

# 用LOCATE关键字进行模糊匹配,等同于:"like '%工%'"
SELECT * from tb_user where LOCATE('工', `profession`) > 0;

# 
SELECT * from tb_user where LOCATE('工', `profession`, 2) > 0;
2.6.2.2 POSITION函数

语法如下:

POSITION(substr IN substr)

这个方法可以理解为locate(substr,str)方法的别名,因为它和locate(substr,str)方法的作用是一样的。

2.6.2.3 INSTR()方法

语法如下:

INSTR(str,substr)

返回字符串str中第一次出现子字符串substr的位置。INSTR()LOCATE()的双参数形式相同,只是参数的顺序相反。

# 用INSTR关键字进行模糊匹配,功能跟like一样 ,等同于:"like '%工%'"
SELECT * from tb_user where INSTR(`profession`, '工');

2.6.3 正则匹配

MySQL中的regexprlike关键字属于同义词,功能相同。下面仅讲解regexp

REGEXP 不支持通配符"%、_",支持正则匹配规则,是一种更细力度且优雅的匹配方式。

参数类型作用
(^)匹配字符串的开始位置,如“^a”表示以字母a开头的字符串。
($)匹配字符串的结束位置,如“X^”表示以字母X结尾的字符串。
(.)这个字符就是英文下的点,它匹配任何一个字符,包括回车、换行等。
(*)星号匹配0个或多个字符,在它之前必须有内容。如:select * from table where name regexp 'ba*'(可以命中“baaa”)
(+)加号匹配1个或多个字符,在它之前也必须有内容。加号跟星号的用法类似,只是星号允许出现0次,加号则必须至少出现一次。
(?)问号匹配0次或1次。
{n}匹配指定n个
{n,}匹配不少于n个
{n,m}匹配n-m个

使用 REGEXP '工' 等同于 like '%网%' ,如下示例。

SELECT * from tb_user where profession REGEXP '工';
-- 等同于
SELECT * from tb_user where profession like '%工%';

regexp 中的或使用的是 | 符号,其可以搜索多个字符串之一,相当于 or,示例如下:

# 匹配包含“中国”或“互联网”或“大学”的数据
SELECT * from app_info where appName REGEXP '中国|互联网|大学';

REGEXP后的匹配完全按照正则表达式来进行,所以可以直接使用正则表达式即可。

2.6.4 字符类匹配

mysql中有一些特殊含义的符号,可以代表不同类型的匹配,如:

# 匹配name中含有数字的
select * from app_info where appName regexp '[[:digit:]]';

其他的这种字符类还有:

字符类作用
[:alnum:]匹配字面和数字字符。(等同于[AZaz0~9])
[:alpha:]匹配字母字符。(等同于[AZaz])
[:blank:]匹配空格或制表符(同[\\t])
[:cntrl:]匹配控制字符(ASCII0到37和127)
[:digit:]匹配十进制数字。(等同于[0-9])
[:graph:]匹配ASCII码值范围33~126的字符。与[:print:]相似,但不包括空格字符
[:print:]任何可打印字符
[:lower:]匹配小写字母,等同于[a-z]
[:upper:]匹配大写字母,等同于[A-Z]
[:space:]匹配空白字符(同[\f\n\r\t\v])
[:xdigit:]匹配十六进制数字。等同于[0-9A-Fa-f]

这种字符类需要主要的外层要加一层[]

上面的字符类中有两个比较特殊的,这两个是关于位置的,[:<:]匹配词的开始,[:>:]匹配词的结束,它们和 ^、$ 不同。后者是匹配整个整体的开头和结束,而前者是匹配一个单词的开始和结束。示例如下:

# 只能匹配整体以a开头的,例如abcd
select * from app_info where appName regexp '^a';

# 能匹配整体以a开头的,也能匹配中间的单词以a开头,如:dance after
select * from app_info where appName regexp '[[:<:]]a';

在这里插入图片描述

select "a word a" REGEXP "[[:<:]]word[[:>:]]"; -- 1(表示匹配) 
 
select "a xword a" REGEXP "[[:<:]]word[[:>:]]"; -- 0(表示不匹配) 
 
select "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -- 1(表示匹配) 

[1]https://blog.csdn.net/qq_46940224/article/details/125031647

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

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

相关文章

ArcGIS笔记6_绘制中间镂空的面要素、面要素抠洞

本文目录 前言Step 1 对海湾大整面和零散的岛屿分别绘制面要素Step 2 利用[擦除]工具从海湾大整面中抠掉零散的岛屿 前言 使用ArcGIS做项目时&#xff0c;很多场景下都需要绘制中间镂空的面要素&#xff0c;比如一个海湾中间有许多零散的岛屿&#xff0c;计算水域面积时就要扣…

Linux-CentOS8-Oracle19c 安装详解

Linux-CentOS8-Oracle19c安装图解 文章目录 Linux-CentOS8-Oracle19c安装图解预备1. Oracle19c 安装手册&#xff1a;2. 安装虚拟机&#xff1a;4G内存&#xff0c;2*2核心&#xff0c;30G3. 下载CentOS8镜像。4. 开始准备预安装5. 修改Oracle账户密码6. 修改SELINUX值在文件&a…

行业追踪,2023-10-16

自动复盘 2023-10-16 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

macos 中ios系统升级,但是macos还是老系统,在手机上无法安装ios软件

https://github.com/filsv/iOSDeviceSupport 构建项目出现 解决的方法&#xff1a; 就可以了&#xff0c;

LeetCode刷题---无重复字符的最长子串

该题使用了滑动窗口来解决此算法&#xff0c;如果使用暴力破解的方法&#xff0c;可能导致更高的时间复杂度 class Solution {public int lengthOfLongestSubstring(String s) {//这里定义left作为左指针int left0;//最大长度&#xff0c;作为最后返回的结果int maxLen0;//这里…

触摸一体机广告机开发板_MTK联发科平台超小型安卓主板方案

小型触摸一体机广告机安卓主板&#xff0c;方便嵌入到各种不同的广告机外壳当中&#xff0c;能节省宝贵的外壳空间&#xff0c;存线也更容易。主板元器件物料也较少&#xff0c;减少了电磁干扰&#xff0c;并只保留常用的功能及接口&#xff0c;功耗也更低&#xff0c;提高了项…

某网站获取到正文内容

网址 aHR0cHM6Ly9pdC5zem9ubGluZS5uZXQvc2h1eml6aG9uZ2d1by8yMDIzMDMyOS8yMDIzMDM3ODAzNDAuaHRtbA抓包 猜想&#xff1a;从图中对比发现取第一次请求返回的Set-Cookie作为第二次请求的cookies&#xff0c;不过需要把Set-Cookie中的secret-100&#xff08;此时注意int和str类型…

一份谷歌写给 CTO 们的报告 - DORA 2023 版全面解读

背景 几天前&#xff0c;谷歌云旗下的 DORA (DevOps Research and Assessments) 发布了一年一度的 State of DevOps 2023 报告。DORA 在国内不像 Gartner 有那么高的知名度&#xff0c;但在全球&#xff0c;DORA 是研发效能 / DevOps 领域最具影响力的报告&#xff0c;从 2014…

CentOS 7 部署Jellyfin详细教程

前言 Jellyfin是免费、开源的媒体服务器解决方案&#xff0c;它能让我们轻松地管理和访问个人媒体文件&#xff0c;如电影、音乐等。本文将向您介绍如何快速搭建和部署Jellyfin&#xff0c;并分享一些最佳实践和技巧&#xff0c;帮助您更好地利用这个强大的媒体服务器解决方案。…

nginx的正向代理,反向代理和负载均衡

nginx当中有两种代理方式以及含义&#xff1a; 1.七层代理 &#xff08;http协议&#xff09; 核心&#xff1a;代理的是http的请求和响应 客户端请求代理服务器&#xff1a;由代理服务器转发客户端的httpd请求&#xff0c;转发到内部的服务器&#xff08;可以是单台和可以是一…

【Android】android.view.WindowManager$BadTokenException 异常fix 解决

背景 爆出如上的问题&#xff1a;官方文档 解决&#xff1a; 我的问题是在于 activity销毁了&#xff0c;结果还要弹出Dialog导致的崩溃&#xff0c;异步处理。 if(isFinishing()){// 在异步情况下&#xff0c;如果activity销毁后再弹dialog 会导致异常&#xff0c;故如果正在…

转行要趁早!盘点网络安全的岗位汇总!

前段时间&#xff0c;知名机构麦可思研究院发布了《2022年中国本科生就业报告》&#xff0c;其中详细列出近五年的本科绿牌专业&#xff0c;信息安全位列第一。 对于网络安全的发展与就业前景&#xff0c;知了姐说过很多&#xff0c;作为当下应届生收入较高的专业之一&#xf…

Vue配置全局变量config.js

Vue配置全局变量config.js 若config.js在public目录下 在index.html中引入 这样配置是为了防止路由前缀&#xff0c;如果直接“/config.js”&#xff0c;若路由没有前缀还好&#xff0c;要是有就需要配置为“<% BASE_URL %>config.js”

windows应用程序告警:帐户名与安全标识间无任何映射完成

目录 一、问题现象 二、问题解决 &#xff08;一&#xff09;官方方法 &#xff08;二&#xff09;问题定位 &#xff08;三&#xff09;问题处理 一、问题现象 今天巡检域控服务器时&#xff0c;发现告警如下&#xff1a; 安全策略已传播&#xff0c;但有警告信息。 0x534…

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)

实战&#xff1a;在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功) 原文链接 https://help.aliyun.com/zh/ssl-certificate/user-guide/install-ssl-certificates-on-nginx-servers-or-tengine-servers?spma2c4g.11186623.0.0.7ab93cb39AuLXF 更新时间&…

1-k8s1.23.6-底座搭建-基于docker

这里写自定义目录标题 一、服务器准备二、安装docker三、安装k8s四、安装部署dashboard 一、服务器准备 服务器准备 服务器名称服务器IP角色CPU(最低要求)内存(最低要求)master192.168.248.10master2核2Gworker1192.168.248.11node2核2Gworker2192.168.248.12node2核2G 修改ip&…

JavaSE入门---数据类型与变量

文章目录 数据类型基本数据类型引用数据类型 常量变量变量类型类型转换自动类型转换&#xff08;隐式&#xff09;强制类型转换&#xff08;显式&#xff09; 类型提升 字符串类型 数据类型 在Java中&#xff0c;数据类型基本分为俩类&#xff1a;基本数据类型和引用数据类型。…

代理IP可以用于哪些实际场景?遇到问题如何解决

代理IP的应用场景非常广泛&#xff0c;可以在不同领域提供许多有用的功能。以下是关于代理IP应用场景的详细扩充&#xff0c;包括每个场景的优势和应用建议&#xff0c;以及在使用代理IP时可能遇到的问题和应对方法。 1.价格监控&#xff1a; 商业竞争很大程度上是价格竞争。在…

解决Maven依赖下载缓慢的问题(亲测管用)

解决Maven依赖下载缓慢 众所周知&#xff0c;欲练神功&#xff0c;必先自宫。最好的方式就是不用镜像&#xff0c;自己在本地下载一个稳定版本的Maven&#xff0c;以后每次用的时候直接在IDEA里面一导入就可以。&#xff08;为了保险&#xff0c;在以下的步骤里配置了aliyun镜像…

高防CDN怎样保护网站安全的

在当今数字化时代&#xff0c;互联网安全问题日益严重。网络攻击和数据泄露威胁着个人隐私、企业机密以及关键基础设施的安全。在应对这些挑战方面&#xff0c;高防CDN&#xff08;内容分发网络&#xff09;崭露头角&#xff0c;它不仅提高了性能&#xff0c;还加强了网络安全。…