当前位置: 首页 > news >正文

黑马mysql教程笔记(mysql8教程)基础篇——数据库相关概念、mysql安装及卸载、数据模型、SQL通用语法及分类(DDL、DML、DQL、DCL)

参考文章1:https://www.bilibili.com/video/BV1Kr4y1i7ru/

参考文章2:https://dhc.pythonanywhere.com/article/public/1/

在这里插入图片描述

文章目录

  • 基础篇
    • 数据库相关概念
      • (数据库DataBase(DB)、数据库管理系统DataBase Management System(DBMS)、结构化查询语言SQL(Structured Query Language))
      • 主流的关系型数据库管理系统(SQL统一语言标准)
    • mysql安装及卸载
      • 安装
      • 卸载
    • 数据模型
      • 关系型数据库RDBMS(建立在关系模型基础上,由多张相互连接的二维表组成的数据库)
    • SQL通用语法及分类
      • 通用语法
      • DDL(Data Definition Language): 数据定义语言,用来定义数据库对象(数据库,表,字段)
        • 数据库操作
          • 查询所有数据库:show databases
          • 查询当前数据库:select
          • 创建数据库:create
          • 删除数据库:drop
          • 使用数据库:use
          • 注意事项
        • 表操作
          • mysql数据类型
            • 数值类型
            • 字符串类型
            • 日期时间类型
          • 查询当前数据库所有表:show tables
          • 查询表结构:desc
          • 查询指定表的建表语句:show create table(可展示表的详细信息,包括创建时的comment)
          • 创建表:create table
          • 添加字段:`ALTER TABLE ttt ADD fff ttt COMMENT 'xxx';`。MySQL中的字段可以在创建表时创建,也可以在创建表后单独添加
          • 修改字段数据类型(`ALTER TABLE 表名 MODIFY`)(主要用于修改列的数据类型或更改默认值等。它只能用来修改已经存在的列的属性,不能修改列的名称)
          • 修改字段名和字段数据类型(`ALTER TABLE 表名 CHANGE`)(不仅可以修改列的数据类型或更改默认值,还可以更改列的名称)
          • 删除字段(`ALTER TABLE 表名 DROP 字段名;`)
          • 修改表名(`ALTER TABLE 表名 RENAME TO 新表名`)
          • 删除表(`DROP TABLE [IF EXISTS] 表名;`)
          • 删除表,并重新创建该表(`TRUNCATE TABLE 表名`)(可用于清理表数据)
      • DML(Data Manipulation Language): 数据操作语言,用来对数据库`表中`的数据进行增删改
        • 添加数据`INSERT`
          • 指定字段:`INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);`
          • 全部字段:`INSERT INTO 表名 VALUES (值1, 值2, ...);`
          • 批量添加数据
          • 注意事项
        • 更新数据(修改数据):`UPDATE`
          • `UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];`(注意:如果不带where条件修改的是整张表的数据)
        • 删除(某条)数据:`DELETE`
          • `DELETE FROM 表名 [ WHERE 条件 ];`(不带where条件将会删除整张表数据)
      • DQL(Data Query Language): 数据查询语言,用来查询数据库中表的记录
        • 基础查询
          • 查询指定(单个或多个)字段:`SELECT 字段1, 字段2, 字段3, ... FROM 表名;`
          • 查询所有字段:``SELECT * FROM 表名;``(建议开发中不要直接写`*`)
          • 设置别名:`SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;`或者`SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;`
          • 去除重复记录:`SELECT DISTINCT 字段列表 FROM 表名;`
          • 转义:`ESCAPE`关键字定义转义字符
        • 条件查询:`WHERE`关键字
          • 语法
          • 条件运算符
          • 逻辑运算符
          • 例子
        • 聚合查询(聚合函数)(count、max、min、avg、sum)(将一列数据作为一个整体,进行纵向计算 )
          • 常见聚合函数
          • 语法
          • 注意:所有的null值不参与聚合函数计算
          • 示例
        • 分组查询:`GROUP BY`关键字、`HAVING`关键字(可用`AS`关键字设置别名)
          • 语法
          • where 和 having 的区别
          • 例子
          • 注意事项
        • 排序查询:ORDER BY关键字、ASC: 升序(默认)、DESC: 降序
          • 语法
          • 排序方式
          • 例子
          • 注意事项
        • 分页查询:LIMIT关键字
          • 语法
          • 例子
          • 注意事项
        • DQL查询语句小结练习
        • `DQL`语句编写顺序和执行顺序
          • `DQL`编写顺序:`SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT`
          • DQL执行顺序:`FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT`
          • 示例:验证DQL执行顺序
      • DCL(Data Control Language): 数据控制语言,用来管理数据库用户、控制数据库的访问权限
        • 管理用户
          • 查询用户
          • 创建用户
          • 修改用户密码
          • 删除用户
          • 例子
          • 注意事项
        • 权限控制
          • 常用权限
          • 查询权限:`SHOW GRANTS FOR`
          • 授予权限:`GRANT `关键字
          • 撤销权限:`REVOKE`关键字
          • 注意事项
          • 示例

基础篇

数据库相关概念

(数据库DataBase(DB)、数据库管理系统DataBase Management System(DBMS)、结构化查询语言SQL(Structured Query Language))

在这里插入图片描述

主流的关系型数据库管理系统(SQL统一语言标准)

在这里插入图片描述

mysql安装及卸载

安装

在这里插入图片描述

教程在windows上安装mysql社区版8.0.26版本

windows上安装方法参考视频:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=3

我用的是linux,我就介绍Ubuntu20.04上的安装mysql服务的方法:

  1. 首先,打开一个终端窗口。

  2. 更新包列表以确保获取最新的软件版本。可以通过运行以下命令来完成这一步:

    sudo apt update
    
  3. 安装MySQL服务器,运行以下命令:

    sudo apt install mysql-server
    
  4. 在安装完毕后,MySQL服务应该会自动启动。可以使用以下命令来确认MySQL正在运行:

    sudo systemctl status mysql
    

    在这里插入图片描述

  5. 对于初次安装MySQL,需要运行mysql_secure_installation脚本来提高MySQL的安全性。运行以下命令:

    sudo mysql_secure_installation
    

    这个脚本将会引导你设置root用户的密码、删除匿名用户、禁止root远程登录,并删除测试数据库。

    这个我们就不设置了,反正是调试用,设置太多影响效率

卸载

在Ubuntu 20.04中完全卸载MySQL,可以按照以下步骤操作:

  1. 首先,需要停止正在运行的MySQL服务。打开终端并输入以下命令:

    sudo systemctl stop mysql
    
  2. 然后,使用apt来卸载MySQL。输入以下命令:

    sudo apt-get remove --purge mysql-server mysql-client mysql-common
    sudo apt-get autoremove
    sudo apt-get autoclean
    
  3. 最后,为了确保所有相关的文件和配置都被删除,可以手动删除数据目录。默认情况下,这个目录通常是/var/lib/mysql。但是,应该检查系统以确认正确的位置。删除之前,请确保不再需要其中的任何数据。可以使用以下命令来删除这个目录:

    sudo rm -rf /var/lib/mysql
    

注意:这将永久删除所有MySQL数据库和相关数据,所以在执行此操作前请确保已备份重要数据。

数据模型

在这里插入图片描述

关系型数据库RDBMS(建立在关系模型基础上,由多张相互连接的二维表组成的数据库)

在这里插入图片描述

同理,不通过表结构存储的数据库称为非关系型数据库

SQL通用语法及分类

通用语法

在学习具体的SQL语句之前,先来了解一下SQL语言的通用语法。

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

DDL(Data Definition Language): 数据定义语言,用来定义数据库对象(数据库,表,字段)

数据库操作
  • 先登录数据库:
    mysql -u root -p
    
    在这里插入图片描述
查询所有数据库:show databases

SHOW DATABASES;

  • 示例:

    show databases;
    

    在这里插入图片描述

查询当前数据库:select

SELECT DATABASE();

  • 示例:

    select database();
    

    在这里插入图片描述

创建数据库:create

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

  • 示例:

    create database itcast;
    

    在这里插入图片描述
    在这里插入图片描述

  • 不能创建名称已经存在的数据库:
    在这里插入图片描述

  • 可以加if not exists判断选项,这样数据库存在不会创建,同时也不会报错:

    create database if not exists itcast;
    

    在这里插入图片描述
    在这里插入图片描述

  • 创建时指定默认字符集(建议使用utf8mb4,占4个字节;而utf8只占3个字节):

    create database if not exists itcast3 dafault charset utf8mb4;
    

    在这里插入图片描述

    当创建数据库时,选择utf8mb4字符集的原因主要有以下几点:

    1. 完整的Unicode支持utf8mb4(UTF-8 Multibyte 4)是一个在MySQL中用于表示UTF-8字符的字符集。与早期的utf8实现相比,它提供了对4字节长的Unicode字符的全面支持。这意味着它可以存储任何标准的Unicode字符。而原始的utf8实现只支持最多3字节长的字符,无法处理某些特殊字符,例如Emoji表情符号或者某些特殊的汉字。

    2. 数据安全性:由于utf8不能正确处理4字节长的字符,如果试图插入这样的字符,可能会导致数据截断和丢失。使用utf8mb4可以避免这种情况,确保数据的完整性。

    3. 未来兼容性:随着更多的新的Unicode字符和Emoji表情符号的出现,utf8mb4能够保证未来的兼容性。

    因此,为了确保你的数据库能够处理所有类型的Unicode字符,一般建议在创建数据库时使用utf8mb4字符集。

注意:字符集主要影响文本类型数据,例如 CHAR, VARCHAR, TEXT 等的存储和处理。通常它不会影响非字符串数据类型,如整型、浮点型、日期时间类型等的存储和处理。

删除数据库:drop

DROP DATABASE [ IF EXISTS ] 数据库名;

  • 示例

    drop database itcast;
    

    在这里插入图片描述

使用数据库:use

USE 数据库名;

  • 示例

    use myDatabase;
    

    在这里插入图片描述

  • 可以使用select查询当前正在使用的数据库:
    在这里插入图片描述

注意事项
  • UTF8字符集长度为3字节,有些符号占4字节,所以推荐用utf8mb4字符集
表操作
mysql数据类型
数值类型

在这里插入图片描述

  • 示例:
    年龄:age tinyint unsigned
    分数:score double(4,1),表示最长四位有效数字(100.0),然后1表示有1位小数。
字符串类型

在这里插入图片描述
定长字符串性能较好,变长字符串性能较差。

  • 示例:
    用户名:username varchar(50)
    性别:gender char(1)
日期时间类型

在这里插入图片描述

  • 示例:
    生日:birthday date
查询当前数据库所有表:show tables

SHOW TABLES;

  • 示例

    show tables;
    

    在这里插入图片描述

查询表结构:desc

DESC 表名;

  • 示例

    desc tb_user;
    

    在这里插入图片描述

查询指定表的建表语句:show create table(可展示表的详细信息,包括创建时的comment)

SHOW CREATE TABLE 表名;

  • 示例

    show create table tb_user;
    

    在这里插入图片描述

    上面代码显示的是tb_user表的创建语句。这个语句包含了表的名称、字段定义、存储引擎和字符集等信息。

    具体解释如下:

    • CREATE TABLE tb_user:创建名为tb_user的表。

    • 下面是四个字段的定义:

      • id int DEFAULT NULL COMMENT ‘编号’:创建一个名为id的字段,数据类型为整型(int),默认值为NULL,注释为’编号’。
      • name varchar(50) DEFAULT NULL COMMENT ‘姓名’:创建一个名为name的字段,数据类型为可变长字符串(varchar),最大长度为50个字符, 默认值为NULL,注释为’姓名’。
      • age int DEFAULT NULL COMMENT ‘年龄’:创建一个名为age的字段,数据类型为整型(int),默认值为NULL,注释为’年龄’。
      • gender varchar(1) DEFAULT NULL COMMENT ‘性别’:创建一个名为gender的字段,数据类型为可变长字符串(varchar),最大长度为1个字符, 默认值为NULL,注释为’性别’。
    • ENGINE=InnoDB:指定表的存储引擎为InnoDB。MySQL支持多种存储引擎,每种存储引擎都有自己的优点和特性,InnoDB是最常用的一种,支持事务处理和行级锁定。

    • DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci:指定表的默认字符集为utf8mb4,排序规则为utf8mb4_0900_ai_ci。字符集决定了表中文本数据的存储和处理方式,而排序规则决定了如何比较字符。

    • COMMENT='用户表':给表添加注释,说明这是一个’用户表’。

创建表:create table
CREATE TABLE 表名(字段1 字段1类型 [COMMENT 字段1注释],字段2 字段2类型 [COMMENT 字段2注释],字段3 字段3类型 [COMMENT 字段3注释],...字段n 字段n类型 [COMMENT 字段n注释]
)[ COMMENT 表注释 ];

注意:最后一个字段后面没有逗号

  • 示例1
    在这里插入图片描述

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

    在这里插入图片描述
    在这里插入图片描述

https://www.bilibili.com/video/BV1Kr4y1i7ru?p=8

  • 示例2
    设计一张员工信息表,要求如下:

    1. 编号(纯数字)
    2. 员工工号 (字符串类型,长度不超过10位)
    3. 员工姓名(字符串类型,长度不超过10位)
    4. 性别(男/女,存储一个汉字)
    5. 年龄(正常人年龄,不可能存储负数)
    6. 身份证号(二代身份证号均为18位,身份证中有X这样的字符)
    7. 入职时间(取值年月日即可)

    对应的建表语句如下:
    在这里插入图片描述

create table emp (id int comment '编号',workno varchar(10) comment '工号',name varchar(10) comment '姓名',gender char(1) comment '性别',age tinyint unsigned comment '年龄',idcard char(18) comment '身份证号',entrydate date comment '入职时间'
) comment '员工表';

把这个粘贴到终端就能添加了。

root@ubuntu:~#
root@ubuntu:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.34-0ubuntu0.20.04.1 (Ubuntu)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
mysql>
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| myDatabase         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)mysql>
mysql>
mysql> use myDatabase;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql>
mysql>
mysql>
mysql> select database();
+------------+
| database() |
+------------+
| myDatabase |
+------------+
1 row in set (0.00 sec)mysql>
mysql>
mysql> show tables;
+----------------------+
| Tables_in_myDatabase |
+----------------------+
| tb_user              |
+----------------------+
1 row in set (0.00 sec)mysql>
mysql>
mysql> create table emp (->     id int comment '编号',->     workno varchar(10) comment '工号',->     name varchar(10) comment '姓名',->     gender char(1) comment '性别',->     age tinyint unsigned comment '年龄',->     idcard char(18) comment '身份证号',->     entrydate date comment '入职时间'-> ) comment '员工表';
Query OK, 0 rows affected (0.10 sec)mysql>
mysql> show tables;
+----------------------+
| Tables_in_myDatabase |
+----------------------+
| emp                  |
| tb_user              |
+----------------------+
2 rows in set (0.01 sec)mysql>
mysql> desc emp;
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| id        | int              | YES  |     | NULL    |       |
| workno    | varchar(10)      | YES  |     | NULL    |       |
| name      | varchar(10)      | YES  |     | NULL    |       |
| gender    | char(1)          | YES  |     | NULL    |       |
| age       | tinyint unsigned | YES  |     | NULL    |       |
| idcard    | char(18)         | YES  |     | NULL    |       |
| entrydate | date             | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)mysql>

https://www.bilibili.com/video/BV1Kr4y1i7ru?p=8

添加字段:ALTER TABLE ttt ADD fff ttt COMMENT 'xxx';。MySQL中的字段可以在创建表时创建,也可以在创建表后单独添加

ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];

例:ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵称';

  • 示例:给表添加email字段
# 列出所有数据库
show databases;
# 切换到指定数据库
use myDatabase;
# 查看当前使用的数据库
select database();
# 列出当前数据库所有表
show tables;
# 查看指定表结构
desc tb_user;
# 为指定表增加指定字段
alter table tb_user add email varchar(255);
# 查看指定表结构
desc tb_user;

在这里插入图片描述

修改字段数据类型(ALTER TABLE 表名 MODIFY)(主要用于修改列的数据类型或更改默认值等。它只能用来修改已经存在的列的属性,不能修改列的名称)

ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

修改字段名和字段数据类型(ALTER TABLE 表名 CHANGE)(不仅可以修改列的数据类型或更改默认值,还可以更改列的名称)

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

  • 例:将emp表的nickname字段修改为username,类型为varchar(30)
    ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵称';
    在这里插入图片描述
    在这里插入图片描述
删除字段(ALTER TABLE 表名 DROP 字段名;

ALTER TABLE 表名 DROP 字段名;

示例:
在这里插入图片描述
在这里插入图片描述

修改表名(ALTER TABLE 表名 RENAME TO 新表名

ALTER TABLE 表名 RENAME TO 新表名

  • 示例:
    在这里插入图片描述
    在这里插入图片描述
删除表(DROP TABLE [IF EXISTS] 表名;

DROP TABLE [IF EXISTS] 表名;

  • 示例:
    在这里插入图片描述
删除表,并重新创建该表(TRUNCATE TABLE 表名)(可用于清理表数据)

TRUNCATE TABLE 表名;

  • 示例:
    在这里插入图片描述

DML(Data Manipulation Language): 数据操作语言,用来对数据库表中的数据进行增删改

添加数据INSERT
指定字段:INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

  • 示例
    给employee表所有的字段添加数据:
insert into employee(id,workno,name,gender,age,idcard,entrydate) values(1,'1','Itcast','男',10,'123456789012345678','2000-01-01');
  • 用DataGrip:
    点击表右键 --> New --> Query Console:
    在这里插入图片描述
    将上面的sql语句粘贴进去,全选sql语句(不然软件不知道你要执行哪一句),然后点击运行:
    在这里插入图片描述
    在这里插入图片描述
    查询表数据,双击表即可查看,或者执行select * from xxx表查询表数据:
    在这里插入图片描述
    执行:

    select * from emp;
    

    在这里插入图片描述

全部字段:INSERT INTO 表名 VALUES (值1, 值2, ...);

INSERT INTO 表名 VALUES (值1, 值2, ...);

  • 示例:
insert into emp values(3,'3','Itcast','男',10,'12345','2000-01-01');

在这里插入图片描述

批量添加数据

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);

  • 示例:

    insert into emp values(4,'4','Itcast','男',10,'123456789012345681','2000-01-01'),(5,'5','Itcast','男',10,'123456789012345682','2000-01-01');

    在这里插入图片描述

注意用逗号,分隔不同条(行)的数据。

注意事项
  • 字符串和日期类型数据应该包含在引号中
  • 插入的数据大小应该在字段的规定范围内
更新数据(修改数据):UPDATE
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];(注意:如果不带where条件修改的是整张表的数据)

UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];

  • 例:
    UPDATE emp SET name = 'Jack' WHERE id = 1;
    在这里插入图片描述
删除(某条)数据:DELETE
DELETE FROM 表名 [ WHERE 条件 ];(不带where条件将会删除整张表数据)

DELETE FROM 表名 [ WHERE 条件 ];

  • 示例1

    DELETE FROM emp WHERE name = 'Jack';
    

    在这里插入图片描述

  • 示例2

    DELETE FROM emp WHERE name = 'Jack';
    

    上面语句将会删除整张表数据:
    在这里插入图片描述

DQL(Data Query Language): 数据查询语言,用来查询数据库中表的记录

  • 语法:

    SELECT字段列表
    FROM表名字段
    WHERE条件列表
    GROUP BY分组字段列表
    HAVING分组后的条件列表
    ORDER BY排序字段列表
    LIMIT分页参数
    
  • 数据准备
    表结构:

    create table emp (id int comment '编号',workno varchar(10) comment '工号',name varchar(10) comment '姓名',gender char(1) comment '性别',age tinyint unsigned comment '年龄',idcard char(18) comment '身份证号',workaddress varchar(50) comment '工作地址',entrydate date comment '入职时间'
    ) comment '员工表';
    

    表数据:

    INSERT INTO emp (id, workno, name, gender, age, idcard,workaddress, entrydate)
    VALUES 
    (1,'1','柳岩','女',20,'123456789012345678' ,'北京','2000-01-01'),
    (2,'2','张无忌','男',18,'123456789012345670' ,'北京' ,'2005-09-01'),
    (3,'3','韦一笑','男',38,'123456789712345670' ,'上海' ,'2005-08-01'),
    (4,'4','赵敏','女',18,'123456757123845670' ,'北京' ,'2009-12-01'),
    (5,'5','小昭','女',16,'123456769012345678' ,'上海' ,'2007-07-01'),
    (6,'6','杨道','男',28,'12345678931234567X' ,'北京' ,'2006-01-01'),
    (7,'7','范瑶','男',40,'123456789212345670' ,'北京' ,'2005-05-01'),
    (8,'8','黛绮丝','女',38,'123456157123645670' ,'天津' ,'2015-05-01'),
    (9,'9','范凉凉','女',45,'123156789012345678' ,'北京' ,'2010-04-01'),
    (10,'10','陈友谅','男',53,'123456789012345670' ,'上海' ,'2011-01-01'),
    (11,'11','张士诚','男',55,'123567897123465670' ,'江苏' ,'2015-05-01'),
    (12,'12','常遇春','男',32,'123446757152345670' ,'北京' ,'2004-02-01'),
    (13,'13','张三丰','男',88,'123656789012345678' ,'江苏' ,'2020-11-01'),
    (14,'14','灭绝','女',65,'123456719012345670' ,'西安' ,'2019-05-01'),
    (15,'15','胡青牛','男',70,'12345674971234567X' ,'西安' ,'2018-04-01'),
    (16,'16','周芷若','女',18,null ,'北京' ,'2012-06-01');

在这里插入图片描述

基础查询
查询指定(单个或多个)字段:SELECT 字段1, 字段2, 字段3, ... FROM 表名;

SELECT 字段1, 字段2, 字段3, ... FROM 表名;

  • 示例
    查询以下指定字段

    select name,workno,age from emp;
    

    在这里插入图片描述

查询所有字段:SELECT * FROM 表名;(建议开发中不要直接写*
  • 示例:
    SELECT * FROM emp;
    
    在这里插入图片描述
设置别名:SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;或者SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;

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

  • 示例:

    SELECT workaddress as '工作地址' FROM emp;
    

    或者:

    SELECT workaddress '工作地址' FROM emp;
    

    在这里插入图片描述

去除重复记录:SELECT DISTINCT 字段列表 FROM 表名;

SELECT DISTINCT 字段列表 FROM 表名;

  • 示例:

    select distinct workaddress from emp;
    

    在这里插入图片描述

转义:ESCAPE关键字定义转义字符

SELECT * FROM 表名 WHERE name LIKE '/_张三' ESCAPE '/'
/ 之后的_不作为通配符

在SQL查询中,LIKE操作符用于搜索某列的模式。其中,百分号(%)和下划线(_)是特殊字符。百分号表示任意数量的字符,包括零字符;而下划线代表一个单独的任意字符。

有时,我们可能需要搜索包含这些特殅字符的数据。为了使这些特殊字符被识别为普通字符,我们需要使用ESCAPE关键字。它定义了一个转义字符,让你能够在LIKE模式中搜索百分号或下划线。

在你给出的例子中,ESCAPE '/'声明了斜杠(/)作为转义字符。然后,在WHERE子句中,name LIKE '/_张三'表示搜索以“张三”开头且前面有任意一个字符的所有名字。因此,/_张三匹配到的可能是“1张三”,“a张三”等等。

总的来说,加上ESCAPE '/'是为了明确指定在该查询中,我们希望把斜杠(/)视为转义字符,使得在LIKE模式中可以正确解析其后的下划线。

条件查询:WHERE关键字
语法

SELECT 字段列表 FROM 表名 WHERE 条件列表;

条件运算符
比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<> 或 !=不等于
BETWEEN … AND …在某个范围内(含最小、最大值)
IN(…)在in之后的列表中的值,多选
LIKE 占位符模糊匹配(_匹配单个字符,%匹配任意个字符)
IS NULL是NULL
逻辑运算符
逻辑运算符功能
AND 或 &&并且(多个条件同时成立)
OR 或 ||或者(多个条件任意一个成立)
NOT 或 !非,不是
例子
# 查找年龄等于20的员工信息
select * from emp where age = 20;# 查找年龄等于20的员工信息
select * from emp where age < 20;# 查找身份证号为null的员工信息
select * from emp where idcard is null;# 查找身份证号不是null的员工信息
select * from emp where idcard is not null;# 查找年龄不等于88的员工信息
select * from emp where age != 88;
select * from emp where age <> 88;# 查询年龄在15到20岁之间的员工信息
select * from emp where age > 15 and age < 20;
select * from emp where age > 15 && age < 20;
# 注意between为闭区间
select * from emp where age between 15 and 20;# 查询性别为女且年龄小于25岁的员工
select * from emp where gender = '女' and age < 25;
select * from emp where age in(18,19,40);# 查询姓名为两个字的员工信息
select * from emp where name like '__';# 查询身份证号最后一位为X的员工信息
select * from emp where emp.idcard like '%X';
select * from emp where emp.idcard like '_________________X';

在这里插入图片描述

聚合查询(聚合函数)(count、max、min、avg、sum)(将一列数据作为一个整体,进行纵向计算 )
常见聚合函数
函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和
语法

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

注意:所有的null值不参与聚合函数计算
示例
-- 统计企业员工数量(注意:不会统计字段值为null的行,所以不要把可能为null的字段来用于统计)
SELECT count(*) FROM emp;
SELECT count(id) FROM emp;-- 统计员工的平均年龄
SELECT avg(age) FROM emp;-- 统计员工的最大年龄
SELECT max(age) FROM emp;-- 统计员工的最小年龄
SELECT min(age) FROM emp;-- 统计西安地区的年龄之和
SELECT sum(age) FROM emp where workaddress = '西安';
分组查询:GROUP BY关键字、HAVING关键字(可用AS关键字设置别名)
语法

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

where 和 having 的区别
  • 执行时机不同:where是分组之前进行过滤,不满足where条件不参与分组;having是分组后对结果进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断,而having可以。
例子
-- 根据性别分组,统计男性和女性数量(只显示分组数量,不显示哪个是男哪个是女)
select count(*) from emp group by gender;-- 根据性别分组,统计男性和女性数量(会显示哪个是男,哪个是女)
select gender, count(*) from emp group by gender;-- 根据性别分组,统计男性和女性的平均年龄
select gender, avg(age) from emp group by gender;-- 统计根据工作地址分组的人数
select workaddress, count(*) from emp group by workaddress;-- 统计年龄小于45,根据工作地址分组的人数
select workaddress, count(*) from emp where age < 45 group by workaddress;-- 统计年龄小于45,根据工作地址分组的人数,输出员工数量大于等于3的组(可设置别名as,as关键字可省略)
select workaddress, count(*) from emp where age < 45 group by workaddress having count(*) >= 3;
select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count >= 3;
select workaddress, count(*) as address_count from emp where age < 45 group by workaddress having address_count >= 3;
注意事项
  • 执行顺序:where > 聚合函数 > having
  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
排序查询:ORDER BY关键字、ASC: 升序(默认)、DESC: 降序
语法

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

排序方式
  • ASC: 升序(默认)
  • DESC: 降序
例子
-- 根据年龄升序排序
SELECT * FROM emp ORDER BY age ASC;
SELECT * FROM emp ORDER BY age;-- 根据入职时间降序排序
SELECT * FROM emp ORDER BY entrydate desc ;-- 两字段排序,根据年龄升序排序,入职时间降序排序
SELECT * FROM emp ORDER BY age ASC, entrydate DESC;
注意事项

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

分页查询:LIMIT关键字
语法

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

例子
-- 查询第一页数据,展示10条
SELECT * FROM emp LIMIT 0, 10;
-- 查询第一页时,索引可省略
SELECT * FROM emp LIMIT 10;-- 查询第二页
SELECT * FROM emp LIMIT 10, 10;
注意事项
  • 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
  • 分页查询是数据库的方言,不同数据库有不同实现,MySQL是LIMIT
  • 如果查询的是第一页数据,起始索引可以省略,直接简写 LIMIT 10
DQL查询语句小结练习

在这里插入图片描述
在这里插入图片描述

注意,第五个问题可能有歧义:

它可能有以下两种理解:

1、查询emp表中性别为男,且年龄在20到40岁(含20和40)的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
2、1、查询emp表中性别为男,且年龄在20到40岁(含20和40),年龄升序排序,年龄相同按入职时间升序排序,获取前5个员工信息。

对于第一种理解,“查询emp表中性别为男,且年龄在20到40岁(含20和40)的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。” 因为SQL的限制,不能直接先取前5条然后再排序,但可以通过子查询实现,如下:

SELECT *
FROM (SELECT *FROM empWHERE sex = '男' AND age BETWEEN 20 AND 40LIMIT 5
) AS subquery
ORDER BY age ASC, join_time ASC;

对于第二种理解,“查询emp表中性别为男,且年龄在20到40岁(含20和40),年龄升序排序,年龄相同按入职时间升序排序,获取前5个员工信息。” 这个问题是先排序,然后取前五个记录。对应的SQL语句为:

SELECT *
FROM emp
WHERE sex = '男' AND age BETWEEN 20 AND 40
ORDER BY age ASC, join_time ASC
LIMIT 5;
DQL语句编写顺序和执行顺序

在这里插入图片描述

DQL编写顺序:SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT
DQL执行顺序:FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT
示例:验证DQL执行顺序
-- 查询年龄大于15的员工的姓名、年龄,并根据年龄进行升序排序
select name,age from emp where age > 15 order by age asc ;
-- 验证执行顺序
select e.name e_name,e.age e_age from emp e where e.age > 15 order by e_age asc ;

DCL(Data Control Language): 数据控制语言,用来管理数据库用户、控制数据库的访问权限

管理用户
查询用户
USE mysql;
SELECT * FROM user;

在这里插入图片描述
localhost,root的含义是这个root只能通过本机访问数据库,无法通过远程方式访问数据库

创建用户

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

修改用户密码

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

删除用户

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

例子
-- 创建用户arnoldtest1,只能在当前主机localhost访问,密码123456# create user 'arnoldtest1'@'localhost' identified by 'Reaishenghuo';
-- 提示:[2023-10-02 02:07:26] [HY000][1819] Your password does not satisfy the current policy requirements
-- 用:SHOW VARIABLES LIKE 'validate_password%';查看当前密码规则
SHOW VARIABLES LIKE 'validate_password%';
# validate_password.changed_characters_percentage,0
# validate_password.check_user_name,ON
# validate_password.dictionary_file,""
# validate_password.length,8
# validate_password.mixed_case_count,1
# validate_password.number_count,1
# validate_password.policy,MEDIUM
# validate_password.special_char_count,1
CREATE USER 'arnoldTest1'@'localhost' IDENTIFIED BY 'Reai#2023shenghuo';-- 创建用户arnoldTest1,能在任意主机访问
create user 'arnoldTest1'@'%' identified by 'Reai#2023shenghuo';-- 修改密码
alter user 'arnoldTest1'@'localhost' identified with mysql_native_password by 'Reai#2024shenghuo';-- 删除用户
drop user 'arnoldTest1'@'localhost';
drop user 'arnoldTest1'@'%';
注意事项
  • 主机名可以使用 % 通配,此时创建的账号可从任意主机访问数据库
  • 这类SQL开发人员操作的比较少,主要是DBA(Database Administrator数据库管理员)使用
权限控制
常用权限
权限说明
ALL, ALL PRIVILEGES所有权限
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
ALTER修改表
DROP删除数据库/表/视图
CREATE创建数据库/表

更多权限请看权限一览表

查询权限:SHOW GRANTS FOR

SHOW GRANTS FOR '用户名'@'主机名';

授予权限:GRANT 关键字

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

撤销权限:REVOKE关键字

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

注意事项
  • 多个权限用逗号分隔
  • 授权时,数据库名和表名可以用 * 进行通配,代表所有
示例

-- 创建用户
CREATE USER 'arnoldTest'@'localhost' IDENTIFIED BY 'Reai#2023shenghuo';-- 查询权限
SHOW GRANTS FOR 'arnoldTest'@'localhost';-- 授予权限(授予'arnoldTest'@'localhost'用户对myDatabase所有表的所有权限)
grant all on myDatabase.* to 'arnoldTest'@'localhost' ;-- 撤销权限
revoke all on myDatabase.* from 'arnoldTest'@'localhost' ;-- 删除用户
drop user 'arnoldTest'@'localhost';

不知道为啥授予和撤销权限的时候,老提示:

myDatabase> grant all on myDatabase.* to 'arnoldTest'@'localhost'
[2023-10-02 02:44:57] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'
[2023-10-02 02:44:57] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'
myDatabase> revoke all on myDatabase.* from 'arnoldTest'@'localhost'
[2023-10-02 02:44:59] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'
[2023-10-02 02:44:59] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'

莫名其妙的问题,以后遇到再说了!。。。

相关文章:

黑马mysql教程笔记(mysql8教程)基础篇——数据库相关概念、mysql安装及卸载、数据模型、SQL通用语法及分类(DDL、DML、DQL、DCL)

参考文章1&#xff1a;https://www.bilibili.com/video/BV1Kr4y1i7ru/ 参考文章2&#xff1a;https://dhc.pythonanywhere.com/article/public/1/ 文章目录 基础篇数据库相关概念&#xff08;数据库DataBase&#xff08;DB&#xff09;、数据库管理系统DataBase Management Sy…...

最新AI智能创作系统源码V2.6.2/AI绘画系统/支持GPT联网提问/支持Prompt应用

一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图…...

神器 CodeWhisperer

这两天看到了好多关于 Amazon CodeWhisperer 针对个人用户终身免费使用的消息&#xff0c;便抽空简单来重点介绍下如何在 VS Code 这款 IDE 上安装和使用 CodeWhisperer。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视…...

GraphQL全面深度讲解

目录 一、GraphQL 是什么 二、GraphQL 规范 数据模型 字段 参数 三、运行示例 四、优势和劣势 优势 劣势 一、GraphQL 是什么 GraphQL 是一种用于 API 的查询语言&#xff0c;也是一个基于服务端的运行引擎。 GraphQL 提供了一套完整的规范和描述用于查询 API&#xf…...

9.1 链表

链表&#xff1a;数据结构&#xff0c;一堆数据的集合&#xff0c;链表的每一项都是结构体&#xff0c;都使用指针指向下一个结构体。 数组的缺点&#xff1a;由于数组的地址是连续的&#xff0c;对数组的数据进行增、删、改后数据不连续&#xff0c;需要较大的运算量才能实现…...

分布式文件系统FastDFS实战

1. 分布式文件系统应用场景 互联网海量非结构化数据的存储需求&#xff1a; 电商网站&#xff1a;海量商品图片视频网站&#xff1a;海量视频文件网盘&#xff1a;海量文件社交网站&#xff1a;海量图片 2.FastDFS介绍 https://github.com/happyfish100/fastdfs 2.1简介 …...

手机自动直播系统源码交付与代理加盟注意事项解析!

随着直播行业的不断发展&#xff0c;手机自动直播已经成为了人们生活中不可或缺的一部分。手机无人直播软件成了香饽饽&#xff0c;各类手机实景直播APP大批量涌现。因为创业和技术门槛低&#xff0c;市场需求高&#xff0c;所以成了最火热创业赛道。那么如果是不懂技术的人群&…...

NodeJS 如何连接 MongoDB

初始化&#xff1a; yarn init使用命令&#xff1a; yarn add mongodb新建 index.js 文件&#xff1a; const MongoClient require(mongodb).MongoClient; const db_name "fly_articleDb"; const url mongodb://127.0.0.1:27017;(async function () {const cli…...

基于Java的老年人体检管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…...

燃气安全如何保障?万宾燃气管网监测系统时刻感知管网运行态势

近年来随着我国城镇化建设的加快&#xff0c;燃气已经成为每个家庭的必需品。然而&#xff0c;每年夏季频繁发生的燃气爆炸事故&#xff0c;已经严重危害人民生命财产安全危害社会公共安全和公共利益。为了保障燃气安全运行&#xff0c;近日&#xff0c;许多城市都在大力推进燃…...

2. selenium学习

Selenium 学习 简介 Selenium 是一个用于自动化浏览器的工具&#xff0c;它提供了多种编程语言的支持&#xff0c;包括 Python、Java、C# 等。它可以模拟用户在浏览器中的操作&#xff0c;比如点击按钮、填写表单、提交数据等。Selenium 具有强大的功能和灵活的定制性&#x…...

数学建模Matlab之评价类方法

大部分方法来自于http://t.csdnimg.cn/P5zOD 层次分析法 层次分析法&#xff08;Analytic Hierarchy Process, AHP&#xff09;是一种结构决策的定量方法&#xff0c;主要用于处理复杂问题的决策分析。它将问题分解为目标、准则和方案等不同层次&#xff0c;通过成对比较和计算…...

json能够存储图片吗?

JSON 本身并不适合存储图片&#xff0c;因为它是一种轻量级的数据交换格式&#xff0c;易于阅读和编写&#xff0c;同时也易于机器解析和生成。JSON 数据格式简单&#xff0c;只包含键值对&#xff0c;因此它主要用于存储和传输文本数据。 然而&#xff0c;你可以将图片转换为 …...

C语言中自定义类型讲解

前言&#xff1a;C语言中拥有三种自定义类型&#xff0c;这三种自定义类型是怎么运用呢&#xff1f;在内存中又是怎么存储的呢&#xff1f;通过这篇文章我们来逐个讲解讲解。 三种类型分别是&#xff1a; 1.结构体 – 通俗的来讲就是可以把不同类型的变量放在一个集合中 2.枚举…...

Win10系统中GPU深度学习环境配置记录

运行环境 系统&#xff1a;Win10 处理器 Intel(R) Core(TM) i7-9700K CPU 3.60GHz 3.60 GHz 机带 RAM 16.0 GB 设备 ID A18D4ED3-8CA1-4DC6-A6EF-04A33043A5EF 产品 ID 00342-35285-64508-AAOEM 系统类型 64 位操作系统, 基于 x64 的处理器 显卡&#xff1a;NVIDIA GeF…...

pycharm一直没显示运行步骤,只是出现waiting for process detach

pycharm一直没显示运行步骤&#xff0c;只是出现waiting for process detach&#xff1b;各类音乐免费软件&#xff1b;最棒的下载torch-geometric-CSDN博客&#xff08;不太推荐&#xff09;我强烈推荐这个&#xff1a;_waiting for process detachhttps://blog.csdn.net/weix…...

管道读写特点以及设置成非阻塞

管道的读写特点&#xff1a; 使用管道时&#xff0c;需要注意以下几种特殊的情况&#xff08;假设都是阻塞I/O操作&#xff09; 1.所有的指向管道写端的文件描述符都关闭了&#xff08;管道写端引用计数为0&#xff09;&#xff0c;有进程从管道的读端 读数据&#xff0c;那么管…...

(c++)类和对象 下篇

目录 1.再次了解构造函数 2. Static成员 3. 友元 4. 内部类 5.匿名对象 6.拷贝对象时的一些编译器优化 1.再次了解构造函数 1.1 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date { pub…...

Tomcat报404问题的原因分析

1.未配置环境变量 按照需求重新配置即可。 2.IIs访问权限问题 注意:这个问题有的博主也写了,但是这个问题可有可无,意思是正常情况下,有没有都是可以访问滴放心 3.端口占用问题 端口占用可能会出现这个问题,因为tomcat的默认端口号是8080,如果在是运行tomcat时计算机的…...

《发现的乐趣》作者费曼(读书笔记)

目录 一、书简介 二、作者理查德•费曼 费曼式思维 教育与传承 三、个人思考 四、笔记 科学家眼中的花之美 关于偏科 父亲教育我的方式 知道一个概念和真正懂得这个概念有很大区别 我没有义务去成全别人对我的期望 诺贝尔奖——够格吗&#xff1f; 探究世界的游戏规…...

第5章-宏观业务分析方法-5.3-主成分分析法

目录 5.3.1 主成分分析简介 协方差矩阵 方差 协方差 协方差矩阵...

IDEA 使用

目录 Git.gitignore 不上传取消idea自动 add file to git撤销commit的内容本地已经有一个开发完成的项目&#xff0c;这个时候想要上传到仓库中 Git .gitignore 不上传 在项目根目录下创建 .gitignore 文件夹&#xff0c;并添加内容&#xff1a; .gitignore取消idea自动 add…...

如何使用 ChatGPT 创建强大的讲故事广告

shadow&#xff1a; 使用AI技术来辅助创作故事越来越流行&#xff0c;从事营销相关工作的人员需要不断适应和学习新的技术和工具&#xff0c;以应对行业的变化和挑战。 如何使用ChatGPT创建讲故事的广告&#xff1a; A. 确定品牌故事和信息传递B. 确定目标受众C. 开发概念D. 使…...

【C语言深入理解指针(4)】

1.回调函数是什么&#xff1f; 回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另⼀个函数&#xff0c;当这个指针被⽤来调⽤其所指向的函数时&#xff0c;被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅…...

qt中弱属性机制

目录 简介&#xff1a; 详解&#xff1a; 实例&#xff1a; 易错地方&#xff1a; 简介&#xff1a; 使用弱属性机制&#xff0c;可以存储临时的值用于传递判断。可以通过widget->dynamicPropertyNames()列出所有弱属性名称&#xff0c;然后通过widget->proper…...

软断言你也学不会

断言是测试用例的一部分&#xff0c;也是测试工程师开发测试用例的核心。断言通常集成在单元测试和集成测试中&#xff0c;断言分为硬断言和软断言。 硬断言是我们狭义上听到的普通断言:当用例运行后得到的[实际]结果与预期结果不匹配时&#xff0c;测试框架将停止测试执行并抛…...

【推荐系统】多任务学习模型

介绍一些多任务学习模型了解是如何处理多任务分支的。 ESSM, Entire Space Multi-Task Model 阿里提出的ESSM全称Entire Space Multi-Task Model&#xff0c;全样本空间的多任务模型&#xff0c;有效地解决了CVR建模&#xff08;转化率预估&#xff09;中存在的两个非常重要…...

基于SpringBoot的商品物品产品众筹平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…...

《安富莱嵌入式周报》第323期:NASA开源二代星球探索小车, Matlab2023b,蓝牙照明标准NLC, Xilinx发布电机套件,Clang V17发布

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV1vp4y1F7qD 《安富莱嵌入式周报》第323期&#xff1a;NASA开源…...

Redis的事务管理

redis也支持事务&#xff0c;但与MySQL等关系型数据库相比&#xff0c;redis的事务比较简单。 一、redis事务的特点 1、redis的事务是一组命令集合 可以把redis的事务看成一个命令的缓存&#xff0c;把一组要执行的命令添加到集合中&#xff0c;然后按顺序一起执行。 2、redi…...

建立网站的步骤和费用/好用搜索引擎排名

同义词用于提高搜索质量并扩大匹配范围。 例如&#xff0c;搜索 England 的用户可能希望找到包含 British 或 UK 的文档&#xff0c;尽管这三个词完全不同。 Elasticsearch 中的同义词功能非常强大&#xff0c;如果实施得当&#xff0c;可以使你的搜索引擎更加健壮和强大。 在…...

网站配色方案橙色/上海今天最新发布会

1、ajax请求参数如果为文本类型&#xff0c;直接拼接即可。如果为file类型就需要先获取文件信息 2、获取文件信息&#xff1a; HTML代码&#xff1a; <div class"form-group"><input type"file" id"SelectImg" style"width:90px;o…...

装修设计网站哪个平台最好/网站查询ip地址查询

前言 从毕业到现在面试也就那么几家公司&#xff0c;单前几次都比较顺利&#xff0c;在面到第三家时都给到了我offer&#xff01;前面两次找工作&#xff0c;没考虑到以后需要什么&#xff0c;自己的对未来的规划是什么&#xff0c;只要有份工作&#xff0c;工资符合自己的要求…...

网站建设费用高低有什么区别/网络推广软文

服务器用类似宝塔等管理软件可以吗&#xff1f;很多企业IT运维人员都存在这样的疑问&#xff0c;今天我们就来一起聊聊。 服务器用类似宝塔等管理软件可以吗&#xff1f; 对于个人站长/运维新手而言&#xff0c;一些简单运维的需求&#xff0c;完全可以使用类似宝塔等运维工具…...

关于网站建设的请示范文/山东seo推广

Loadrunner一直被业内认为是最好用的性能测试工具&#xff0c;行业大哥大, 但是用过Loadrunner的朋友都知道&#xff0c;工具功能的确牛&#xff0c;但实际使用过程中总会有一些困扰新手的问题&#xff0c;无法录制脚本&#xff0c; 如遇到Loadrunner不支持的IE版本、对Chrome、…...

dw做网站背景音乐/江门网站建设

最近在用element-ui遇到一些bug,在使用el-select时,数据量大了就页面渲染缓慢从而卡顿严重,为了解决这个问题,对element-ui进行了改造,el-select改为分页滚动加载: 如上图所示的效果,大数据时下拉可以分页滚动加载,而且可以支持原来的搜索。 1.新建一个selectSearch.v…...