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

《MySQL从入门到精通》

文章目录

  • 《MySQL从入门到精通》
    • 1. 基础-SQL通用语法及分类
    • 2. 基础-SQL-DDL-数据库操作
    • 3. 基础-SQL-DDL-表操作-创建&查询
    • 4. 基础-SQL-DDL-数据类型及案例
      • 4.1 数值类型
      • 4.2 字符串类型
      • 4.3 时间和日期类型
    • 5. 基础-SQL-DDL-表操作-修改&删除
      • 5.1 DDL-表操作-修改
      • 5.2 DDL-表操作-删除
    • 6. 基础-SQL-DML-添加表数据insert
    • 7. 基础-SQL-DML-修改表数据update
    • 8. 基础-SQL-DML-删除表数据delete
    • 9. 基础-SQL-DQL-数据查询
      • 9.1基础-SQL-DQL-基本查询
      • 9.2 基础-SQL-DQL-条件查询
      • 9.3 基础-SQL-DQL-分组查询
      • 9.4 基础-SQL-DQL-排序查询
      • 9.5 基础-SQL-DQL-分页查询
      • 9.6 基础-SQL-DQL-案例
    • 10.Mysql-多表设计-一对多
    • 11.Mysql-多表设计-一对多-外键
    • 12.Mysql-多表设计-一对一&一对多
    • 13.Mysql-多表查询-概述
    • 14.Mysql-多表查询-内连接
    • 15.Mysql-多表查询-外连接
    • 16.Mysql-多表查询-子查询(标量、列)
    • 17.Mysql-多表查询-子查询(行、表)
    • 18.Mysql-多表查询-案例1
    • 19.Mysql-事务-介绍与操作
    • 20.Mysql-事务-四大特性
    • 21.Mysql-索引-介绍
    • 22.MySQL-索引-结构
    • 23. MySQL-索引-语法

《MySQL从入门到精通》


1. 基础-SQL通用语法及分类


  • SOL通用语法

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

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

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

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

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

2. 基础-SQL-DDL-数据库操作


问题记录:ssh无法登录,问题原因ssh服务无法启动,权限受限
解决过程:

  1. 使用ssh -t 命令查看原因
  2. 使用 # chmod 600 /var/empty/sshd 添加权限(只能是600 的权限状态才可以)
  3. 使用# systemctl restart sshd.service 重启服务
  4. 使用# systemctl status sshd.service 查看状态
  • DDL-数据库操作
    1. 查询
      • 查询所有数据库:SHOW DATABASES;
      • 查询当前数据库:SELECT DATABASE();
    2. 创建
      • CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
    3. 删除
      • DROP DATABASE [IF EXISTS] 数据库名;
    4. 使用
      • USE 数据库名;

3. 基础-SQL-DDL-表操作-创建&查询

  • DDL-表操作-查询

    1. 查询当前数据库所有表 : SHOW TABLES;
    2. 查询表结构 : DESC 表名;
    3. 查询指定表的建表语句:SHOW CREATE TABLE 表名;
      在这里插入图片描述
  • DDL-表操作-创建

    CREATE TABLE 表名(字段1 字段1类型[COMMENT 字段1注释],字段2 字段2类型[COMMENT 字段2注释],字段3 字段3类型[COMMENT 字段3注释],字段n 字段n类型[COMMENT 字段n注释]
    )[COMMENT 表注释];
    
    mysql> create table tb_user(
    mysql> id int comment "编号",
    mysql> name varchar(50) comment "姓名", 
    mysql> age int comment "年龄", 
    mysql> gender varchar(1) comment "性别"
    mysql> ) comment "用户表";	
    
    • 注意:[…]为可选参数,最后一个字段后面没有逗号,并且所有符号都是英文。
  • DDL-表操作-约束

    • 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。

    • 目的:保证数据库中数据的正确性、有效性和完整性。

    • 常见约束

      1. 非空约束(not null):限制该字段值不能为null
      2. 唯一约束(unique):保证字段的所有数据都是唯一、不重复的,
      3. 主键约束(primary key):主键是一行数据的唯一标识,要求非空且唯一
      4. 默认约束(default):保存数据时,如果未指定该字段值,则采用默认值
      5. 外键约束(foreign key):让两张表的数据建立连接,保证数据的一致性和完整性

4. 基础-SQL-DDL-数据类型及案例

4.1 数值类型

在这里插入图片描述

4.2 字符串类型

在这里插入图片描述

4.3 时间和日期类型

在这里插入图片描述

  • 案例:创建一张员工表
create table employe(id int comment "编号",name varchar(10) comment "姓名",gender char(1) comment "性别",age tinyint unsigned comment "年龄",idcard char(18) comment "身份证号",entrydate date comment "入职时间") comment "员工表";

5. 基础-SQL-DDL-表操作-修改&删除

5.1 DDL-表操作-修改

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

    • 案例:为employe表增加一个新的字段”昵称”为nickname,类型为varchar(20)
    mysql> alter table employe add nickname varchar(20) comment "昵称";
    
  2. 修改数据类型

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

    • ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度)[COMMENT 注释][约束];
    • 案例:将employe表的nickname字段修改为username,类型为varchar(30)
    mysql> alter table employe change nickname username varchar(30) comment "用户名";
    
  4. 删除字段

    • ALTER TABLE 表名 DROP 字段名;
    • 案例:将employe表的字段username删除
    mysql> alter table employe drop nickname;
    
  5. 修改表名

    • ALTER TABLE 表名 RENAME TO 表名;
    • 案例:将employe表的表名修改为emp。
    mysql> alter table employe rename to emp;
    

5.2 DDL-表操作-删除

  1. 删除表
    • DROP TABLE [IF EXISTS] 表名;
    mysql> drop table if exists tb_user;
    
  2. 删除指定表,并重新创建该表
    • TRUNCATE TABLE 表名;
    mysql> truncate table emp;
    
    • 注意: TRUNCATE TABLE 表名;是删除并重建,重建后的表为空表,原有内容已经被删除。

6. 基础-SQL-DML-添加表数据insert

  • 指定字段添加数据:

    • insert into 表名(字段名1,字段名2) values(值1,值2);
    INSERT INTO tb_emp (username,name,gender,create_time,update_time) VALUES ('wuji2','张无忌2',1,NOW(),NOW());
    
  • 全部字段添加数据:

    • insert into values(值1,值2,值3......);
    INSERT into tb_emp VALUES(null,'zhiruo2','123','周芷若2',1,'1.jpg',1,'2020-01-01',NOW(),NOW());
    
  • 批量添加数据(指定字段):

    • insert into 表名 (字段1,字段2) values(值1,值2),(值1,值2);
    INSERT INTO tb_emp (username,name,gender,create_time,update_time) VALUES ('xieshiwang','谢逊',1,NOW(),NOW()),('wufuwang','韦一笑',1,NOW(),NOW()),('wuji3','张无忌3',1,NOW(),NOW());
    
  • 批量添加数据(全部字段):

    • insert into 表名 values(值1,值2,值3......)(值1,值2,值3......);
    INSERT into tb_emp VALUES(null,'zhiruo8','123','周芷若8',1,'1.jpg',1,'2020-01-01',NOW(),NOW()),(null,'zhiruo9','123','周芷若9',1,'1.jpg',1,'2020-01-01',NOW(),NOW());
    

7. 基础-SQL-DML-修改表数据update

  • update 表名 set 字段名1 = 值1,字段名2 = 值2,字段名3 = 值3,......[where 条件];
    UPDATE tb_emp SET name= '张三',update_time = NOW() WHERE id = 1; 
    

8. 基础-SQL-DML-删除表数据delete

  • 删除数据:
    • delete from 表名 [where 条件];
    DELETE FROM tb_emp WHERE id = 22;
    

9. 基础-SQL-DQL-数据查询

  • DQL:Data Query Language (数据查询语言),用于查询数据表中的数据。
  • 基本查询: select 字段1,字段2 from 表名;
  • 条件查询:select 字段1,字段2 from 表名 where 条件列表;
  • 分组查询:
  • 排序查询:
  • 分页查询:

9.1基础-SQL-DQL-基本查询

  1. 查询返回指定字段
    SELECT `name`,entrydate FROM tb_emp;
    
  2. 查询返回所有字段
    SELECT id, username, `password`, `name`,gender,image,job,entrydate,create_time,update_time FROM tb_emp;
    -- 或者
    SELECT * FROM tb_emp;
    
  3. 别名应用
    SELECT `name` AS '姓名',entrydate AS '入职日期' FROM tb_emp; 
    -- AS关键字可以省略
    SELECT `name` '姓名',entrydate '入职日期' FROM tb_emp;
    
  4. DISTINCT关键字,去除重复
    SELECT DISTINCT job FROM tb_emp;
    

9.2 基础-SQL-DQL-条件查询

  1. 查询姓名为杨逍的员工
    SELECT * FROM tb_emp WHERE name = '杨逍';
    
  2. 查询ID小于等于5的员工信息
    SELECT * FROM tb_emp WHERE id <= 5;
    
  3. 查询没有分配职位的员工信息
    SELECT * FROM tb_emp WHERE job IS NULL;
    
  4. 查询有职位的员工信息
    SELECT * FROM tb_emp WHERE job IS NOT NULL;
    
  5. 查询密码字段不是“123456”的员工信息
    SELECT * FROM tb_emp WHERE `password` != '123456';SELECT * FROM tb_emp WHERE `password` <> '123456';
    
  6. 查询入职日期在’2000-01-01’(包含) 到 ‘2010-01-01’(包含) 之间的员工信息
    SELECT * FROM tb_emp WHERE entrydate BETWEEN '2000-01-01' AND '2010-01-01';SELECT * FROM tb_emp WHERE entrydate >= '2000-01-01' && entrydate <= '2010-01-01';
    
  7. 查询 入职日期 在’2000-01-01’(包含) 到 ‘2010-01-01’(包含) 之间 且 性别为女性的员工信息
    SELECT * FROM tb_emp WHERE entrydate BETWEEN '2000-01-01' AND '2010-01-01' && gender = 2;
    
  8. 查询职位是 2(讲师),3(学工主管),4(教研主管)的员工信息
    SELECT * FROM tb_emp WHERE job IN(2,3,4);SELECT * FROM tb_emp WHERE job=1 || job=2 || job=3;SELECT * FROM tb_emp WHERE job=1 OR job=2 OR job=3;
    
  9. 查询 姓名 为两个字的员工信息
    SELECT * FROM tb_emp WHERE `name` LIKE '__';
    
  10. 查询 姓"张"的员工信息
    SELECT * FROM tb_emp WHERE `name` LIKE '张%';
    

9.3 基础-SQL-DQL-分组查询

  • 聚合函数:将一列数据作为一个整体,进行纵向计算;
  • 语法:select 聚合函数(字段列表) from 表名
  1. 统计改企业员工的数量
     A.count(字段),不能统计null值,需要统计非空字段才能统计准确
    SELECT count(job) FROM tb_emp;
    
    -- B.count(常量)
    SELECT COUNT(1) FROM tb_emp;
    
    -- C.count(*)-推荐
    SELECT COUNT(*) FROM tb_emp;
    
  2. 统计企业最早入职的员工
    SELECT MIN(entrydate) FROM tb_emp;
    
  3. 统计企业最迟入职的员工
    SELECT MAX(entrydate) FROM tb_emp;
    
  4. 统计该企业员工ID的平均值
    SELECT AVG(id) FROM tb_emp;
    
  5. 统计该企业员工ID的和
    SELECT SUM(id) FROM tb_emp;
    
  • 分组查询语法
    • select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
    • where与having区别
      • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
      • 判断条件不同:where不能对聚合函数进行判断,而having可以。
    • 注意事项
      • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
      • 执行顺序: where >聚合函数>having 。

9.4 基础-SQL-DQL-排序查询

  • 条件查询:select 字段列表 from 表名 [where 条件列表] order by 字段1 排列方式1,字段1 排列方式2;
  • 排列方式:ASC 升序 DESC 降序
  1. 根据入职时间,对员工进行升序排序

    SELECT * FROM tb_emp ORDER BY entrydate ASC;
    
  2. 根据入职时间,对员工进行降序排序

    SELECT * FROM tb_emp ORDER BY entrydate DESC;
    
  3. 根据入职时间,对员工进行升序排序,排序后如果入职时间相同,再按照更新时间进行降序排序

    SELECT * FROM tb_emp ORDER BY entrydate ASC, update_time DESC;
    
  • 注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

9.5 基础-SQL-DQL-分页查询

  • 语法:select 字段列表 from 表名 limit 起始索引,查询记录数;
  1. 从起始索引0 开始查询员工数据,每页展示5条记录
    SELECT * FROM tb_emp LIMIT 0,5;
    
  2. 查询 第1页员工数据 每页展示5条记录;
    SELECT * FROM tb_emp LIMIT 0,5;
    
  3. 查询 第2页员工数据 每页展示5条记录;
    SELECT * FROM tb_emp LIMIT 5,5;
    
  4. 查询 第3页员工数据 每页展示5条记录;
    SELECT * FROM tb_emp LIMIT 10,5;
    
  • 起始索引 = (页码 - 1)*每页展示记录数;
  • 如果查询的是第一页数据,起始索引可以省略;

9.6 基础-SQL-DQL-案例

  1. 案例1:
    • 按要求完成员工管理的条件分页查询,根据输入条件,查询第1页数据,每页展示10条记录
    • 输入条件
      • 姓名:张
      • 性别:男
      • 入职时间:2000-01-01 2015-12-31
    SELECT *
    FROM tb_emp
    WHERE name LIKE '%张%'AND gender = 1AND entrydateBETWEEN '2000-01-01' AND '2015-12-31'
    ORDER BY update_time DESC
    LIMIT 10,10;
    
  2. 案例2
    • 案例2-1 : 根据需求,完成员工性别统计 - count(*)
    • if流程函数:if (表达式,tvalue, fvalue):当前表达式的是为true时,取值tvalue,当前 表达式的值为false时,取值为fvalue;
    SELECT IF(gender = 1,'男性员工','女性员工')性别,gender,COUNT(*) FROM tb_emp GROUP BY gender;
    
    • 案例2-2 : 根据需求完成员工职位信息的统计;
    • case流程函数:case expr when value1 then result1 [when value2 then result2]...[else result] end
    SELECT (CASE job WHEN 1 THEN '班主任' WHEN 2 THEN'讲师' WHEN 3 THEN '学工主管' WHEN 4 THEN '教研主管' ELSE '未分配职位'END) AS 职位,
    COUNT(*) FROM tb_emp GROUP BY job;
    

10.Mysql-多表设计-一对多

  • 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:
    • 一对多(多对一)
    • 多对多
    • 一对一
  • 一对多表设计案例:根据 页面原型 及 需求文档 ,完成部门及员工模块的表结构设计
CREATE TABLE tb_emp (id INT UNSIGNED PRIMARY KEY auto_increment COMMENT 'ID',username VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名',password VARCHAR(32) DEFAULT '123456' COMMENT '密码',name VARCHAR(10) NOT NULL COMMENT '姓名',gender TINYINT UNSIGNED NOT NULL COMMENT '性别,说明,1 男,1 女',image VARCHAR(300) COMMENT '图像',job TINYINT UNSIGNED COMMENT '职位,说明 1 班主任,2 讲师, 3 学工主管 4 教研主管',entrydate DATE COMMENT '入职时间',dept_id INT UNSIGNED COMMENT '部门ID',create_time datetime NOT NULL COMMENT '创建时间',update_time datetime NOT NULL COMMENT '修改时间'
) COMMENT '员工表';create table tb_dept(id int unsigned primary key auto_increment COMMENT 'ID',name varchar(10) NOT NULL UNIQUE COMMENT '部门名称',create_time datetime NOT NULL COMMENT '创建时间',update_time datetime NOT NULL COMMENT '修改时间'
)comment '部门表'
  • 一对多关系实现:在数据库表中多的一方,添加字段,来关联一的一方的主键,例如以上案例tb_emp表中的部门字段,关联 tb_dept表中的’ID’主键字段。

11.Mysql-多表设计-一对多-外键

  • 创建表时指定

    create table 表名(
    字段名 数据类型
    ...
    [constraint] [外键名称] foreign key (外键字段名) references 主表 (字段名)
    );
    
  • 建完表后,添加外键

    alter table 表名 add constraint 外键名称 foreign key(外键字段名)references 主表(字段名);
    
  • 案例

    ALTER TABLE `db03`.`tb_emp` 
    ADD CONSTRAINT `tb_emp_fk_tb_dept` FOREIGN KEY (`dept_id`) REFERENCES `db03`.`tb_dept` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
    

12.Mysql-多表设计-一对一&一对多

  • 案例:用户 与 身份证信息 的关系(一对一)
  • 关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率
	-- ===========================================一对一=====================================
create table tb_user(id int unsigned  primary key auto_increment comment 'ID',name varchar(10) not null comment '姓名',gender tinyint unsigned not null comment '性别, 1 男  2 女',phone char(11) comment '手机号',degree varchar(10) comment '学历'
) comment '用户信息表';insert into tb_user values (1,'白眉鹰王',1,'18812340001','初中'),(2,'青翼蝠王',1,'18812340002','大专'),(3,'金毛狮王',1,'18812340003','初中'),(4,'紫衫龙王',2,'18812340004','硕士');create table tb_user_card(id int unsigned  primary key auto_increment comment 'ID',nationality varchar(10) not null comment '民族',birthday date not null comment '生日',idcard char(18) not null comment '身份证号',issued varchar(20) not null comment '签发机关',expire_begin date not null comment '有效期限-开始',expire_end date comment '有效期限-结束',user_id int unsigned not null unique comment '用户ID',constraint fk_user_id foreign key (user_id) references tb_user(id)
) comment '用户信息表';insert into tb_user_card values (1,'汉','1960-11-06','100000100000100001','朝阳区公安局','2000-06-10',null,1),(2,'汉','1971-11-06','100000100000100002','静安区公安局','2005-06-10','2025-06-10',2),(3,'汉','1963-11-06','100000100000100003','昌平区公安局','2006-06-10',null,3),(4,'回','1980-11-06','100000100000100004','海淀区公安局','2008-06-10','2028-06-10',4);
  • 案例: 学生 与 课程的关系(多对多)
  • 关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
--  ======================================多对多=============================
create table tb_student(id int auto_increment primary key comment '主键ID',name varchar(10) comment '姓名',no varchar(10) comment '学号'
) comment '学生表';
insert into tb_student(name, no) values ('黛绮丝', '2000100101'),('谢逊', '2000100102'),('殷天正', '2000100103'),('韦一笑', '2000100104');create table tb_course(id int auto_increment primary key comment '主键ID',name varchar(10) comment '课程名称'
) comment '课程表';
insert into tb_course (name) values ('Java'), ('PHP'), ('MySQL') , ('Hadoop');create table tb_student_course(id int auto_increment comment '主键' primary key,student_id int not null comment '学生ID',course_id  int not null comment '课程ID',constraint fk_courseid foreign key (course_id) references tb_course (id),constraint fk_studentid foreign key (student_id) references tb_student (id)
)comment '学生课程中间表';insert into tb_student_course(student_id, course_id) values (1,1),(1,2),(1,3),(2,2),(2,3),(3,4);

13.Mysql-多表查询-概述

  1. 多表查询:是指从多张表中查询数据;
  2. 笛卡尔积:笛卡尔积乘积是指在数学中,两个集合(A集合和B集合)的所有情况;
  3. 多表查询分类:
    • 内连接:相当于查询A、B交集部分数据;
    • 外连接
      • 左外连接:查询左表所有的数据(包括两张表交集部分数据);
      • 右外连接:查询右表所有的数据(包括两张表交集部分数据);
    • 子查询

14.Mysql-多表查询-内连接

  1. 隐式内连接:select 字段列表 from 表1,表2 where 条件...;
  2. 显式内连接:select 字段列表 from 表1 [inner] join 表2 on 连接条件;
  3. 举例:
    -- --------多表查询:隐式内连接-----------
    select tb_emp.`name`,tb_dept.`name` from tb_emp,tb_dept where tb_emp.dept_id = tb_dept.id;-- --------多表查询:显式内连接-----------
    select tb_emp.`name`,tb_dept.`name` from tb_emp inner join tb_dept on tb_emp.dept_id = tb_dept.id;
    
  4. 多表查询中为了书写方便可以给表起别名:
    select e.`name`,d.`name` from  tb_emp e,tb_dept d where e.dept_id = d.id; 
    

15.Mysql-多表查询-外连接

  1. 左外连接语法:select 字段列表 from 表1 left [outer] join 表2 on 连接条件....;
  2. 右外连接语法:select 字段列表 from 表1 rigth [outer] join 表2 on 连接条件...;
  3. 举例
    -- --------多表查询:左外连接-----------
    -- 查询员工表 所有 员工的姓名,和对应的部门名称
    select e.`name`,d.`name` from tb_emp e left outer join tb_dept d on e.dept_id = d.id;-- --------多表查询:右外连接-----------
    -- 查询部门表 所有 部门的名称,和对应员工的名称
    select e.`name`,d.`name` from tb_emp e right outer join tb_dept d on e.dept_id = d.id;
    

16.Mysql-多表查询-子查询(标量、列)

  1. 子查询概述:
    • 介绍:SQL语句中嵌套select语句,称为嵌套查询,又称子查询。
    • 形式:select *from tl where column1=(select column1 from t2 ... );
    • 子查询外部的语句可以是insert/update/delete/select 的任何一个,最常见的是 select。
  2. 子查询的分类
    • 标量子查询:子查询返回的结果为单个值;
    • 列子查询:子查询返回的结果为一列;
    • 行子查询:子查询返回的结果为一行;
    • 表子查询:子查询返回的结果为多行多列;
  3. 标量子查询
    • 子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式
    • 常用的操作符:= <> > >= < <=
    • 举例1
      -- -------标量子查询--------
      -- 1.查询"教研部"所有的员工信息-- 1.1 查询 "教研部" 的idselect id from tb_dept where `name`="教研部";-- 1.2 使用“教研部”的id,查询“教研部”所有的员工select * from tb_emp where dept_id = 2;-- 1.3 将以上两个查询合成一个,因为子查询只返回一个值,所以叫做标量子查询
      select * from tb_emp where dept_id = (select id from tb_dept where `name`="教研部");
      
    • 举例2:
      -- 2.查询在“方东白”入职之后的员工信息-- 2.1 查询“方东白”入职的日期select entrydate from tb_emp where `name`= "方东白";-- 2.2 使用“东方东白”入职日期作为条件,查询在“东方白”入职之后的员工信息select * from tb_emp where entrydate > "2012-11-01";-- 2.3 以上两个查询语句合成1个select * from tb_emp where entrydate > (select entrydate from tb_emp where `name`= "方东白");
      
  4. 列子查询
    • 子查询返回的结果是一列(可以是多行);
    • 常用的操作符:in、not in等;
    • 举例1:
    -- ----------列子查询-----------
    -- 3. 查询“教研部”和“咨询部”的所有员工信息-- 3.1 查询“教研部”和“咨询部”的id;select id from tb_dept where `name`= '教研部' or `name`= '咨询部';-- 3.2 使用查询的id,查询“教研部”和“咨询部”的所有员工信息select * from tb_emp where dept_id in (2,3);-- 3.3 将以上两个查询合成一个,子查询就是一个列子查询select * from tb_emp where dept_id in (select id from tb_dept where `name`= '教研部' or `name`= '咨询部');
    

17.Mysql-多表查询-子查询(行、表)

  1. 行子查询

    • 子查询返回的结果是一行(可以是多列)
    • 常用的操作符:=、<>、in、not in
    • 举例:
      -- -----------行子查询----------
      -- 4 查询与“韦一笑”的入职日期 及职位都相同的员工信息
      -- 4.1 查询“韦一笑”的入职日期 及 职位
      select entrydate,job from tb_emp where `name`='韦一笑';
      -- 4.2 使用查询到的“韦一笑”的入职日期 及 职位作为条件,查询相同的员工信息
      select * from tb_emp where entrydate = '2007-01-01' and job = 2;
      -- 4.3 将上面两个查询合为一个,子查询查询到的是一行数据,所以叫做行子查询
      select * from tb_emp where (entrydate,job) = (select entrydate,job from tb_emp where `name`='韦一笑');
      
  2. 表子查询

    • 子查询返回的结果是多行多列,常作为临时表
    • 常用的操作符:in
    • 举例:
      -- ----------表子查询----------
      -- 5 查询入职日期是2006-01-01 之后的员工信息,及其部门
      -- 5.1 查询入职日期在2006-01-01 之后的员工信息
      select * from tb_emp where entrydate > '2006-01-01';
      -- 5.2 使用上面查询到的信息作为临时表,查询对应的部门
      select e.*, tb_dept.`name` from (select * from tb_emp where entrydate > '2006-01-01') e,tb_dept where  e.dept_id = tb_dept.id;
      

18.Mysql-多表查询-案例1

  1. 查询价格低于10元的菜品的名称、价格 及其 菜品的分类名称

    select d.`name`,d.price,c.`name` 
    from dish d,category c 
    where d.category_id = c.id and d.price < 10;
    
  2. 查询所有价格在 10元(含)到50元(含)之间 且 状态为“起售”的菜品,展示出菜品的名称、价格、及其 菜品的分类(即使菜品没有分类,也要将菜品查询出来)

    select d.name,d.price,c.name
    from dish d left join category c on d.category_id = c.id 
    where d.price between 10 and 50 and d.status= 1;
    
  • 3 查询每个分类下最贵的菜品,展示出分类的名称、最贵的菜品的价格。
    select c.name,max(d.price) 
    from dish d,category c 
    where d.category_id = c.id 
    group by c.name;
    
  • 4.查询各个分类下 菜品状态为‘起售’ ,并且该分类下菜品总数大于等于3 的 分类名称。
    select c.`name`,count(*) 
    from dish d,category c 
    where d.category_id = c.id and d.`status`= 1 
    group by c.`name` 
    having count(*) >= 3;
    
  • 5.查询“商务套餐A”中包含了哪些菜品(展示出套餐名称、价格、包含菜品名称、价格、份数)
    select s.`name`,s.price,d.`name`,d.price,sd.copies 
    from dish d,setmeal s, setmeal_dish sd 
    where sd.dish_id = d.id and sd.setmeal_id = s.id and s.`name`='商务套餐A';
    
  • 6.查询第低于菜品平均价格的菜品信息(展示出菜品名称、菜品价格)
    select * 
    from dish 
    where price < (select avg(price) from dish);
    

19.Mysql-事务-介绍与操作

  • 事务的概念:事务是一组操作的集合,他是一组不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,这些操作要么同时成功,要么同时失败。
  • 注意事项:默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。
  • 事务控制:
    • 事务开始 :start transaction; / begin;
    • 事务提交:commit;
    • 事务回滚: ollback;

20.Mysql-事务-四大特性

  1. 原子性:事务是不可分割的最小单元,要么全部成功,要么全部失败;
  2. 一致性:事务完成时,必须使所有数据都保持一致状态;
  3. 隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行;
  4. 持久性:事务一旦回滚或提交,它对数据库中的数据的改变就是永久的;

21.Mysql-索引-介绍

概念:索引是帮助数据库高效获取数据的数据结构;
优点:提高数据库查询的效率,降低数据库的IO成本;通过索引列对数据进行排列,降低数据排列的成本,降低CPU的消耗。
缺点:索引会占用存储空间;索引大大提高了查询的效率,同时也降低了 insert、update、delete效率;

22.MySQL-索引-结构

  • B + Tree:多路平衡搜索树
  • 特点:
    • 每一个节点,可以存储多个Key(有n个Key就有n个指针);
    • 所有的数据都存储在叶子节点,非叶子节点仅用于索引数据;
    • 叶子节点形成了一颗双向链表,便于数据的排序及区间范围查询;

23. MySQL-索引-语法

  • 创建索引:create [unique] index 索引名 on 表名(字段名,...);

  • 查看索引:show index from 表名;

  • 删除索引:drop index 索引名 on 表名;

  • 举例:

    -- 为tb_emp表的name字段创建一个索引
    create index idx_emp_name on tb_emp(name);-- 查询tb_emp表的索引信息
    show index from tb_emp;-- 删除tb_emp表中的name丢字段的索引;
    drop index idx_emp_name on tb_emp;
    
  • 注意:

    • 主键字段,在建表时,会自动创建主键索引;
    • 添加唯一约束时,数据库实际上会添加唯一索引;

相关文章:

《MySQL从入门到精通》

文章目录 《MySQL从入门到精通》1. 基础-SQL通用语法及分类2. 基础-SQL-DDL-数据库操作3. 基础-SQL-DDL-表操作-创建&查询4. 基础-SQL-DDL-数据类型及案例4.1 数值类型4.2 字符串类型4.3 时间和日期类型 5. 基础-SQL-DDL-表操作-修改&删除5.1 DDL-表操作-修改5.2 DDL-表…...

MySQL聚合查询

聚合查询 group by...

生信初学者教程(三十四):文章的方法

文章目录 介绍数据收集和整理数据整合差异基因分析功能富集分析免疫浸润分析候选标记物识别诊断ROC曲线单细胞分析统计方法介绍 在数据分析进行的同时,我们可以逐步撰写方法部分,确保其与结果紧密相连。一旦结果部分完成,方法部分应根据结果的逻辑顺序进行分类和组织。在描…...

算力云平台部署—SadTalker的AI数字人视频

选择算力 部署选择 选择镜像 机器管理 控制台 通过平台工具进入服务器 认识管理系统 打开命令行 进入目录 stable-diffusion-webui# cd 增加执行权限 chmod x ./webui.sh 运行命令 bash ./webui.sh sudo apt install -y python3 python3-venv git 安装软件 Creating the …...

iPhone相册导出到电脑的完整指南

iPhone相册导出到电脑的完整指南 本文介绍通过数据线连接实现iPhone照片视频传输到电脑的标准操作方法&#xff0c;适用于需要备份移动设备影像资料的用户。 环境准备 使用原装Lightning或USB-C数据线连接设备与电脑需在电脑端安装设备管理工具&#xff08;如克魔助手&#…...

【数据结构】励志大厂版·初阶(复习+刷题):复杂度

前引&#xff1a;从此篇文章开始&#xff0c;小编带给大家的是数据结构初阶的刷题讲解 &#xff0c;此类文章将简略的包含相关知识&#xff0c;详细的思路拆分讲解&#xff0c;分析每一题的难点、易错点&#xff0c;看见题目如何分析&#xff0c;以上就是小编预备的内容&#x…...

Nginx底层架构(非常清晰)

目录 前言&#xff1a; 场景带入&#xff1a; HTTP服务器是什么&#xff1f; 反向代理是什么&#xff1f; 模块化网关能力&#xff1a; 1.配置能力&#xff1a; 2.单线程&#xff1a; 3.多worker进程 4.共享内存&#xff1a; 5.proxy cache 6.master进程 最后&…...

Golang|Channel 相关用法理解

文章目录 用 channel 作为并发小容器channel 的遍历channel 导致的死锁问题用 channel 传递信号用 channel 并行处理文件用channel 限制接口的并发请求量用 channel 限制协程的总数量 用 channel 作为并发小容器 注意这里的 ok 如果为 false&#xff0c;表示此时不仅channel为空…...

智能合约安全审计平台——以太坊虚拟机安全沙箱

目录 以太坊虚拟机安全沙箱 —— 理论、设计与实战1. 引言2. 理论背景与安全原理2.1 以太坊虚拟机(EVM)概述2.2 安全沙箱的基本概念2.3 安全证明与形式化验证3. 系统架构与模块设计3.1 模块功能说明3.2 模块之间的数据流与安全性4. 安全性与密码学考量4.1 密码学保障在沙箱中…...

趣说区块链隐私智能合约Shielder 实现原理

目录 核心理念 Deposit Withdraw Shielder 是 Aleph Zero 上的智能合约,它利用 zk-SNARK 技术实现隐私支付以及与 DeFi 的隐私交互。这与常规区块链的完全透明性形成鲜明对比,常规区块链允许追踪单个用户与链上合约以及其他用户的所有交互。Shielder 通过使第三方链观察者…...

TCPIP详解 卷1协议 五 Internet协议

5.1——Internet协议 IP是TCP/IP协议族中的核心协议。所有TCP、UDP、ICMP和IGMP数据都通过IP数据报传输。IP 提供了一种尽力而为、无连接的数据报交付服务。“尽力而为”的含义是不保证 IP 数据报能成功到达目的地。任何可靠性必须由上层&#xff08;例如TCP&#xff09;提供。…...

基于Oracle ADG通过dblink创建物化视图同步数据到目标库

基于Oracle ADG通过dblink创建物化视图同步数据到目标库 环境说明&#xff1a;源端环境Oracle ADG一主一备&#xff0c;版本11.2.0.4&#xff0c;目标端版本11.2.0.4&#xff0c;测试通过dblink方式在目标库创建物化视图同步ADG备库的数据。 PROD --> STANDBY – > TAR…...

openGauss新特性 | 自动参数化执行计划缓存

目录 自动化参数执行计划缓存简介 SQL参数化及约束条件 一般常量参数化示例 总结 自动化参数执行计划缓存简介 执行计划缓存用于减少执行计划的生成次数。openGauss数据库会缓存之前生成的执行计划&#xff0c;以便在下次执行该SQL时直接使用&#xff0c;可…...

qt中的正则表达式

问题&#xff1a; 1.在文本中把dog替换成cat&#xff0c;但可能会把dog1替换成cat1&#xff0c;如果原本不想替换dog1&#xff0c;就会出现问题 2文本中想获取某种以.txt为结尾的多有文本&#xff0c;普通的不能使用 3如果需要找到在不同的系统中寻找换行符&#xff0c;可以…...

开源项目 | 17款云原生安全相关的扫描和平台类开源工具

“ 随着云计算技术的不断发展&#xff0c;越来越多的企业开始将应用程序和数据存储到云上。然而&#xff0c;云安全问题也随之而来&#xff0c;因此&#xff0c;开源云原生安全工具的需求也越来越大。在本文中&#xff0c;我们将介绍一些流行的开源云原生安全工具&#xff0c;以…...

力扣面试150题—旋转图像和矩阵置零

Day21 题目描述 思路 矩阵转置 在将列反转 1 2 3 4 5 6 7 8 9 转置 1 4 7 2 5 8 3 6 9 反转 7 4 1 8 5 2 9 6 3 class Solution {public void rotate(int[][] matrix) { //分为两步 矩阵转置&#xff0c;将列倒序 int x0; int nmatrix.length; //转…...

ScholarCopilot:“学术副驾驶“

这里写目录标题 引言&#xff1a;学术写作的痛点与 AI 的曙光ScholarCopilot 的核心武器库&#xff1a;智能生成与精准引用智能文本生成&#xff1a;不止于“下一句”智能引用管理&#xff1a;让引用恰到好处 揭秘背后机制&#xff1a;检索与生成的动态协同快速上手&#xff1a…...

Node.js项目开启多进程的2种方案

当node项目只部署一个单进程单实例时,遇到异常发生后程序会崩溃,此时杀掉进程在重启单这段时间会导致服务不能正常使用,这显然会影响用户体验。 所以需要以多进程的模式去部署应用,这样当某一个进程发生异常重启时,此时有其他请求被接受后,其他进程依旧可以对外提供服务…...

论文导读 | 基于GPU的子图匹配算法

摘要 大规模图上的子图匹配在社交网络挖掘&#xff0c;生物信息学&#xff0c;知识图谱等领域具有关键作用。近年来随着以GPU为代表的新硬件的发展&#xff0c;研究人员开始尝试在GPU上实现这一NP难的任务。GPU提供了大量的计算单元和高速的显存带宽&#xff0c;可以显著提升算…...

中天科技旗下的中天智能装备有限公司,在立库方面有哪些优势?

中天科技旗下的中天智能装备有限公司在立库方面优势显著&#xff0c;主要体现在产品与方案、技术研发、项目经验和服务质量管控等多个维度&#xff0c;能够为客户提供全方位、高品质的立库相关服务。 产品与解决方案优势 多种立库解决方案&#xff1a;提供托盘式立库、料箱式立…...

HTML5+CSS前端开发【保姆级教学】+超链接标签

一、引入&#xff1a; Hello&#xff01;&#xff0c;各位编程猿们&#xff01;一个页面可以跳转到其他页面&#xff0c;去访问其他资源&#xff0c;使得我们的文档更加的灵动&#xff0c;那我们如何实现不同页面的跳转呢&#xff1f;本期主要介绍超链接标签 那么什么是超链接…...

【游戏安全】文本校验类风险

文本风险定义: 在游戏中除了动画,声音参与和玩家的交互之外,游戏中的文本也属于和玩家交互中一项重要的元素。由玩家操作触发任何不同于游戏自身逻辑设定,进而破坏游戏平衡的文本内容都可以称之为文本类风险漏洞。(这个定义自己瞎写的…) 文本风险危害(漏洞举例): …...

快速排序及其应用

快速排序及其应用 标准写法改成稳定版本求第k小值O(n)做法快排的另一种写法 标准写法 #include <bits/stdc.h>using namespace std;using ll long long;int a[] {8, 5, 18, 11, 7, 2, 21, 15, 3, 8};void quickSort(int l, int r) {if (l > r) return ; // 元素个数…...

南柯电子|新能源汽车EMC电磁兼容性测试整改:突破行业规范之路

随着新能源汽车产业的蓬勃发展&#xff0c;车辆电子化、智能化程度不断提高&#xff0c;电磁兼容性&#xff08;EMC&#xff09;问题日益凸显。作为衡量汽车电子系统稳定性的关键指标&#xff0c;EMC性能不仅影响车辆功能安全&#xff0c;更关乎道路交通的整体安全性。 一、EM…...

LabVIEW 程序持续优化

LabVIEW 以其独特的图形化编程方式&#xff0c;在工业自动化、测试测量、数据分析等众多领域发挥着关键作用。为了让 LabVIEW 程序始终保持高效、稳定&#xff0c;并契合不断变化的实际需求&#xff0c;持续改进必不可少。下面将从多个关键维度&#xff0c;为大家细致地介绍通用…...

裂缝检测数据集,支持yolo,coco json,pasical voc xml,darknet格式的标注,1673张原始训练集图片,正确识别率99.4%

数据集详情: 裂缝检测数据集,支持yolo,coco json,pasical voc xml,darknet格式的标注,1673张原始训练集图片,正确识别率99.4% 2394总图像 数据集分割 训练集占比 70% 1673图片 有效集20% 477图片 测试集...

Webrtc让浏览器实现无服务器中转的安全私密聊天

私密聊天平台的应用介绍 在当今数字时代&#xff0c;隐私和安全成为人们日益关注的焦点。许多人发现&#xff0c;他们的聊天记录、个人信息甚至行为习惯都可能被第三方平台记录、分析甚至滥用。无论是出于保护个人隐私的需要&#xff0c;还是希望实现真正的点对点直接通信&…...

数据结构-限定性线性表 - 栈与队列

栈和队列是数据结构中非常重要的两种限定性线性表&#xff0c;它们在实际应用中有着广泛的用途。这篇文章将深入讲解栈和队列的概念、抽象数据类型、实现方式、应用场景以及性能分析&#xff0c;并通过代码示例帮助大家更好地理解和实践。 一、栈的概念与抽象数据类型 1.1 栈…...

接口的集成测试步骤

一、集成测试是什么 ‌接口的集成测试‌是指在软件开发过程中&#xff0c;将各个模块或组件按照设计要求组合在一起&#xff0c;并测试它们之间的接口是否能够正确交互和协同工作的过程。集成测试是软件开发中的一个重要阶段&#xff0c;通常在单元测试之后进行&#xff0c;目的…...

Python 实现的运筹优化系统数学建模详解(多目标规划模型)

一、引言 在数学建模的广阔领域中&#xff0c;多目标规划模型占据着极为重要的地位。它致力于在复杂的实际场景里&#xff0c;同时优化多个相互冲突的目标&#xff0c;寻求一组决策变量&#xff0c;让多个目标函数在满足特定约束条件下达到某种平衡。这种模型广泛应用于生产调度…...

AJAX原理与XMLHttpRequest

目录 一、XMLHttpRequest使用步骤 基本语法 步骤 1&#xff1a;创建 XHR 对象 步骤 2&#xff1a;调用 open() 方法 步骤 3&#xff1a;监听 loadend 事件 步骤 4&#xff1a;调用 send() 方法 二、完整示例 1. GET 请求&#xff08;带查询参数&#xff09; 2. POST 请…...

css中的3d使用:深入理解 CSS Perspective 与 Transform-Style

在前端开发的奇妙世界中&#xff0c;CSS 不仅负责页面的布局和样式&#xff0c;还能赋予元素生动的动态效果。要实现引人入胜的 3D 变换&#xff0c;perspective 和 transform-style 这两个属性扮演着至关重要的角色。本文将带您深入了解这两个属性&#xff0c;揭开它们如何协同…...

在 JMeter 中,Active Threads Over Time 是一个非常有用的监听器(Listener)

在 JMeter 中,Active Threads Over Time 是一个非常有用的监听器(Listener),它可以帮助你实时观察测试过程中活跃线程数(并发用户数)的变化趋势,从而分析系统的并发处理能力和负载情况。 1. Active Threads Over Time 的作用 实时监控并发用户数:显示测试过程中活跃线程…...

未来七轴机器人会占据主流?深度解析具身智能方向当前六轴机器人和七轴机器人的区别,七轴力控机器人发展会加快吗?

六轴机器人和七轴机器人在设计、功能和应用场景上存在明显区别。六轴机器人是工业机器人的传统架构&#xff0c;而七轴机器人则在多自由度和灵活性方面进行了增强。 本文将在理解这两者的区别以及为何六轴机器人仍然是市场主流&#xff0c;从多个方面进行深入解读六轴和七轴区…...

spark-SOL简介

Spark-SQL简介 一&#xff0e;Spark-SQL是什么 Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块 二&#xff0e;Hive and SparkSQL SparkSQL 的前身是 Shark&#xff0c;Shark是给熟悉 RDBMS 但又不理解 MapReduce 的技术人员提供的快速上手的工具 …...

【今日三题】经此一役小红所向无敌(模拟) / 连续子数组最大和(动态规划) / 非对称之美(贪心)

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;每日两三题 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 经此一役小红所向无敌(模拟)连续子数组最大和(动态规划)非对称之美(贪心) 经此一役小红所向无敌(模拟) 经此一役小红所向无…...

MYSQL MVCC详解

这里写自定义目录标题 **一、MVCC 解决的核心问题****二、MVCC 的核心实现机制****1. 隐藏字段与版本链****2. Undo Log****3. ReadView&#xff08;一致性视图&#xff09;** **三、MVCC 的可见性判断过程****四、不同隔离级别下的 MVCC 行为****五、MVCC 的优缺点****六、示例…...

Trinity三位一体开源程序是可解释的 AI 分析工具和 3D 可视化

一、软件介绍 文末提供源码和程序下载学习 Trinity三位一体开源程序是可解释的 AI 分析工具和 3D 可视化。Trinity 提供性能分析和 XAI 工具&#xff0c;非常适合深度学习系统或其他执行复杂分类或解码的模型。 二、软件作用和特征 Trinity 通过结合具有超维感知能力的不同交…...

用 Deepseek 写的uniapp血型遗传查询工具

引言 在现代社会中&#xff0c;了解血型遗传规律对于优生优育、医疗健康等方面都有重要意义。本文将介绍如何使用Uniapp开发一个跨平台的血型遗传查询工具&#xff0c;帮助用户预测孩子可能的血型。 一、血型遗传基础知识 人类的ABO血型系统由三个等位基因决定&#xff1a;I…...

展示数据可视化的魅力,如何通过图表、动画等形式让数据说话

在当今信息爆炸的时代&#xff0c;数据的量级和复杂性不断增加。如何从海量数据中提取有价值的信息&#xff0c;并将其有效地传达给用户&#xff0c;成为了一个重要的课题。数据可视化作为一种将复杂数据转化为直观图形、图表和动画的技术&#xff0c;能够帮助用户快速理解数据…...

解决安卓开发“No Android devices detected.”问题

解决安卓开发“No Android devices detected.”问题 ​ 当我们插入移动设备的USB时&#xff0c;却发现这并未显示已连接到的设备 点击右侧的Assistant,根据提示打开移动设备开发者模式并启用USB调试模式,然后发现我们未连接到移动设备的原因是ABD服务的原因 问题确定了&…...

Android13 WIFI调试(rtl8821cs)

一、WiFi框架概述 1、Wi‑Fi 是一种无线通信技术&#xff0c;在 Linux 系统上一般可处于三种工作模式&#xff0c;分别是: STATION、AP、MONITOR。 station &#xff1a;工作sta模式&#xff0c;类比手机主动连网。 ap&#xff1a;工作ap模式&#xff0c;类比手机开热点。 mon…...

Android常见界面控件、程序活动单元Activity练习

第3章 Android常见界面控件、第4章程序活动单元Activity 一. 填空题 1. (填空题)Activity的启动模式包括standard、singleTop、singleTask和_________。 正确答案&#xff1a; (1) singleInstance 2. (填空题)启动一个新的Activity并且获取这个Activity的返回数据&#xff…...

过拟合、归一化、正则化、鞍点

过拟合 过拟合的本质原因往往是因为模型具备方差很大的权重参数。 定义一个有4个特征的输入&#xff0c;特征向量为,定义一个模型&#xff0c;其只有4个参数&#xff0c;表示为。当模型过拟合时&#xff0c;这四个权重参数的方差会很大&#xff0c;可以假设为。当经过这个模型后…...

关于多agent多consumer架构设想

多个agent接入设备 每个agent对接同一个消费队列&#xff0c;非竞争设置&#xff0c;通过判断consumer中的参数如果是发给自己的&#xff0c;则下发&#xff0c;如果不是&#xff0c;则快速跳过。每个消费者接收消息时通过Header中值判断是来着哪个agent服务器的&#xff0c;发…...

国内互联网大厂推出的分布式数据库 的详细对比,涵盖架构、性能、适用场景、核心技术等维度

以下是 国内互联网大厂推出的分布式数据库 的详细对比&#xff0c;涵盖架构、性能、适用场景、核心技术等维度&#xff1a; 一、主流分布式数据库列表 大厂数据库名称类型适用场景发布时间腾讯云TDSQL分布式HTAP金融、电商、游戏、政企2010年阿里云OceanBase分布式HTAP银行核…...

【深度学习】自定义实现DataSet和DataLoader

dataset数据集 作用&#xff1a; 存储数据集的信息获取数据集长度 __len__获取数据集某特定条目的内容 __getitem__ dataloader 数据加载器 作用&#xff1a; 从数据集中随机加载数据, 并拼接为一个 batch实现迭代器, 可以使用时, 迭代获取数据内容 代码实现&#xff1a;…...

spark简介和核心编程

简介 1. Spark-SQL概述&#xff1a;Spark SQL是Spark处理结构化数据的模块&#xff0c;前身是Shark。Shark基于Hive开发&#xff0c;提升了SQL-on-Hadoop的性能&#xff0c;但对Hive的过度依赖制约了Spark发展。SparkSQL抛弃Shark代码&#xff0c;汲取其优点后重新开发&#x…...

47、Spring Boot 详细讲义(四)

六. Spring Boot 与数据库 目录 ​ JDBC 集成 ​ Spring Data JPA ​ MyBatis 集成 ​ 事务管理 1、JDBC 集成 1.1 JDBC简介 1.1.1 定义和作用 JDBC(Java Database Connectivity)是Java中用于与关系型数据库进行交互的API。它为Java程序提供了一个标准的、统一的接口…...

Dify - 整合Ollama + Xinference私有化部署Dify平台(01)

文章目录 总体方案服务器在Ubuntu 20.04上安装Docker更新软件包索引安装一些必要的软件包&#xff0c;以便apt能够通过HTTPS使用仓库&#xff1a;添加Docker的官方GPG密钥设置稳定的仓库再次更新软件包索引从新添加的仓库中安装Docker CE验证Docker是否安装成功&#xff08;可选…...