【数据库原理】基础篇:MySQL基础入门与实战指南
前言
在当今数字化时代,数据已成为企业运营的核心资产之一。而MySQL作为一款广泛使用的开源关系型数据库管理系统,凭借其高性能、可靠性和易用性,成为众多开发者和企业的首选。本文将从MySQL的基础概念出发,逐步深入到实际操作,涵盖数据库的创建、表的定义、数据的增删改查、多表查询以及事务管理等核心内容。无论是初学者还是有一定基础的开发者,都能从本文中获得实用的知识和技能。
一、数据库基础概念
在深入学习MySQL之前,我们先来了解一下数据库的一些基本概念。
1. 数据库(Database)
数据库是一个存储数据的仓库,数据以有组织的方式进行存储。它类似于一个电子表格,但功能更强大,能够处理海量的数据。数据库的主要作用是高效地存储和检索数据。
2. 数据库管理系统(DBMS)
数据库管理系统是操纵和管理数据库的大型软件。它提供了对数据库进行操作的各种功能,如数据的增删改查等。MySQL就是一种常见的数据库管理系统,它通过SQL语言与用户进行交互。
3. SQL语言
SQL(Structured Query Language)是操作关系型数据库的编程语言。它定义了一套操作关系型数据库的统一标准,无论是MySQL、Oracle还是其他关系型数据库,都使用SQL语言进行操作。SQL语言分为以下几个部分:
DDL(Data Definition Language):数据定义语言,用于定义数据库对象,如数据库、表、字段等。
DML(Data Manipulation Language):数据操作语言,用于对数据库表中的数据进行增删改操作。
DQL(Data Query Language):数据查询语言,用于查询数据库中表的记录。
DCL(Data Control Language):数据控制语言,用于管理数据库用户和控制访问权限。
二、MySQL简介
MySQL是一种开源免费的中小型数据库管理系统,具有高性能、可靠性和易用性。它被广泛应用于各种应用程序中,从简单的网站到复杂的企业级应用。
1. MySQL版本
MySQL官方提供了两种版本:
社区版(MySQL Community Server):免费,但MySQL不提供技术支持。
商业版(MySQL Enterprise Edition):收费,官方提供技术支持。
本教程采用的是MySQL最新的社区版——MySQL Community Server 8.0.26。
2. MySQL安装
安装MySQL非常简单,只需要从官网下载安装包,按照提示进行安装即可。以下是详细的安装步骤:
下载MySQL
访问MySQL官网下载页面:MySQL Downloads,选择适合你操作系统的安装包进行下载。
安装MySQL
双击下载的安装包文件,启动安装程序。
按照安装提示进行操作,安装MySQL的相关组件。这个过程可能需要耗时几分钟,请耐心等待。
在安装过程中,输入MySQL中root用户的密码,并记住该密码,后续连接数据库时会用到。
配置环境变量
安装完成后,还需要配置环境变量,以便在任何目录下都能连接MySQL。
在“此电脑”上,右键选择“属性”。
点击左侧的“高级系统设置”,选择“环境变量”。
找到“Path”系统变量,点击“编辑”。
选择“新建”,将MySQL Server的安装目录下的bin目录添加到环境变量。
MySQL启动与连接
MySQL安装完成后,会自动启动服务。我们可以通过命令行工具连接MySQL,也可以使用图形化界面工具(如DataGrip)进行操作。
启动和停止MySQL服务
以管理员身份运行cmd,进入命令行执行如下指令:
net start mysql80 # 启动MySQL服务
net stop mysql80 # 停止MySQL服务
注意:mysql80是我们在安装MySQL时默认指定的系统服务名,如果你未改动,默认就是mysql80。
使用命令行工具连接MySQL
mysql -u root -p
输入root用户的密码后,即可连接到MySQL服务器。
使用图形化界面工具连接MySQL
推荐使用DataGrip,它是一款轻量级,功能强大的MySQL图形化界面工具,支持多种数据库操作,能够显著提高开发效率。
三、MySQL数据模型
MySQL是一种关系型数据库,基于二维表存储数据。一个数据库服务器可以创建多个数据库,一个数据库中可以包含多张表,而一张表中可以包含多行记录。
1. 关系型数据库特点
使用表存储数据:格式统一,便于维护。
使用SQL语言操作:标准统一,使用方便。
2. 数据模型结构
通过MySQL客户端连接数据库管理系统DBMS(Data Base Management System),然后通过DBMS操作数据库。具体的结构如下图所示:
四、SQL语言基础
SQL语言是操作关系型数据库的核心工具,它分为以下几个部分:
1. DDL(Data Definition Language)
DDL用于定义数据库对象,如数据库、表、字段等。常见的DDL语句包括CREATE、DROP、ALTER等。
创建数据库
CREATE DATABASE datatext;
查询数据库
SHOW DATABASES;
创建表(要先在指定的数据库下才能创建,使用命令:use 数据库;)
CREATE TABLE jd_user (id INT COMMENT '编号',name VARCHAR(50) COMMENT '姓名',age INT COMMENT '年龄',gender VARCHAR(1) COMMENT '性别'
) COMMENT '用户表';
查询表结构
DESC 表名;
查询指定表的建表语句
SHOW CREATE TABLE 表名;
删除数据库
DROP DATABASE itcast;
删除表
DROP TABLE (if exists) jd_user; 删除表
TRUNCATE TABLE jd_user;删除指定表,并重新创建该表
表操作-案例 设计一张员工信息表,要求如下:(不懂mysql数据类型可以先看:五、MySQL数据类型)
- 编号(纯数字)
- 员工工号 (字符串类型,长度不超过10位)
- 员工姓名(字符串类型,长度不超过10位)
- 性别(男/女,存储一个汉字)
- 年龄(正常人年龄,不可能存储负数)
- 身份证号(二代身份证号均为18位,身份证中有X这样的字符)
- 入职时间(取值年月日即可)
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 '员工表';
修改表结构
ALTER TABLE emp ADD nickname VARCHAR(20) COMMENT '昵称'; 添加字段
ALTER TABLE emp MODIFY age TINYINT UNSIGNED COMMENT '年龄'; 修改数据类型
ALTER TABLE emp CHANGE nickname username varchar(30) comment '用户名'; 修改字段名和字段类型
ALTER TABLE emp DROP username; 删除字段
ALTER TABLE emp RENAME TO employee; 修改表名
案例:
为emp表增加一个新的字段”昵称”为nickname,类型为varchar(20)
五、MySQL数据类型
MySQL支持多种数据类型,包括数值类型、字符串类型和日期时间类型。
1. 数值类型
2. 字符串类型
注意:char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和
字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char的性
能会更高些
如:
1). 用户名 username ------> 长度不定, 最长不会超过50
username varchar(50)
2). 性别 gender ---------> 存储值, 不是男,就是女
gender char(1)
3). 手机号 phone --------> 固定长度为11
phone char(11)
3. 日期时间类型
如:
1). 生日字段 birthday
birthday date
2). 创建时间 createtime
createtime datetime
表操作-案例 设计一张员工信息表,要求如下:
- 编号(纯数字)
- 员工工号 (字符串类型,长度不超过10位)
- 员工姓名(字符串类型,长度不超过10位)
- 性别(男/女,存储一个汉字)
- 年龄(正常人年龄,不可能存储负数)
- 身份证号(二代身份证号均为18位,身份证中有X这样的字符)
- 入职时间(取值年月日即可)
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 '员工表';
六、MySQL图形化界面工具
虽然可以通过命令行工具操作MySQL,但图形化界面工具(如DataGrip)更加直观和方便。它可以帮助我们快速创建数据库、表,执行SQL语句,提高开发效率。
1. DataGrip安装
安装可以通过网盘分享的文件:DataGrip 链接: https://pan.baidu.com/s/1065T7XlWcQFWi8-Mp6J3Og
提取码: s4w5
下载DataGrip安装包。
双击安装包,按照提示完成安装。
启动DataGrip,配置数据库连接。
3. DataGrip使用
添加数据源:配置MySQL服务器的连接信息,包括主机名、端口、用户名和密码。
创建数据库:在DataGrip中,右键点击数据库节点,选择“New Database”。
创建表:在指定的数据库上右键,选择“New Table”。
修改表结构:在需要修改的表上右键选择“Modify Table”,可以添加、删除字段,修改字段类型等。
执行SQL语句:在指定的数据库上右键,选择“New Query Console”,在控制台中编写和执行SQL语句。
以下是DataGrip的一些配置
2. DML(Data Manipulation Language)
DML用于对数据库表中的数据进行增删改操作。常见的DML语句包括**INSERT(增)、UPDATE(改)、DELETE(删)**等。
插入数据
INSERT INTO tb_user (id, name, age, gender) VALUES (1, '张三', 18, '男');
更新数据
UPDATE tb_user SET age = 20 WHERE id = 1;
删除数据
DELETE FROM tb_user WHERE id = 1;
- DQL(Data Query Language)
DQL用于查询数据库中表的记录。SELECT是DQL的核心语句。
查询所有记录
SELECT * FROM tb_user;
条件查询
SELECT * FROM tb_user WHERE age > 18;
聚合函数
SELECT COUNT(*) FROM tb_user; -- 统计记录数
SELECT AVG(age) FROM tb_user; -- 计算平均年龄
SELECT MAX(age) FROM tb_user; -- 查询最大年龄
SELECT MIN(age) FROM tb_user; -- 查询最小年龄
SELECT SUM(age) FROM tb_user; -- 求年龄总和
分组查询
SELECT gender, COUNT(*) FROM tb_user GROUP BY gender;
排序查询
SELECT * FROM tb_user ORDER BY age ASC, name DESC;
分页查询
SELECT * FROM tb_user LIMIT 0, 10; -- 查询第1页,每页10条
SELECT * FROM tb_user LIMIT 10, 10; -- 查询第2页,每页10条
- DCL(Data Control Language)
DCL用于管理数据库用户和控制访问权限。常见的DCL语句包括GRANT、REVOKE等。
创建用户
CREATE USER 'itcast'@'localhost' IDENTIFIED BY '123456';
授予权限
GRANT ALL PRIVILEGES ON itcast.* TO 'itcast'@'localhost';
撤销权限
REVOKE ALL PRIVILEGES ON itcast.* FROM 'itcast'@'localhost';
七、多表查询
在实际应用中,我们经常需要从多张表中查询数据。多表查询包括内连接、外连接、自连接和子查询等。
4. 内连接
内连接查询的是两张表交集部分的数据。
隐式内连接
SELECT e.name, d.name FROM emp e, dept d WHERE e.dept_id = d.id;
显式内连接
SELECT e.name, d.name FROM emp e INNER JOIN dept d ON e.dept_id = d.id;
- 外连接
外连接分为左外连接和右外连接。
左外连接
SELECT e.*, d.name FROM emp e LEFT JOIN dept d ON e.dept_id = d.id;
右外连接
SELECT e.*, d.name FROM emp e RIGHT JOIN dept d ON e.dept_id = d.id;
- 自连接
自连接是当前表与自身的连接查询。
SELECT a.name, b.name FROM emp a, emp b WHERE a.managerid = b.id;
- 子查询
子查询是SQL语句中嵌套的SELECT语句。
标量子查询
SELECT * FROM emp WHERE dept_id = (SELECT id FROM dept WHERE name = '研发部');
列子查询
SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE name IN ('研发部', '市场部'));
表子查询
SELECT e.*, d.* FROM (SELECT * FROM emp WHERE entrydate > '2006-01-01') e LEFT JOIN dept d ON e.dept_id = d.id;
八、事务管理
事务是一组操作的集合,它是一个不可分割的工作单位。事务的四大特性(ACID)保证了数据的一致性和完整性。
- 事务四大特性
原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。 - 事务操作
查看事务提交方式
SELECT @@autocommit;
设置事务提交方式
SET @@autocommit = 0; -- 设置为手动提交
开启事务
START TRANSACTION;
提交事务
COMMIT;
回滚事务
ROLLBACK;
- 并发事务问题
并发事务可能导致以下问题:
脏读:一个事务读到另一个事务未提交的数据。
不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同。
幻读:一个事务按照条件查询数据时,没有对应的数据行,但在插入数据时,发现这行数据已经存在。 - 事务隔离级别
为了解决并发事务所引发的问题,MySQL提供了以下几种事务隔离级别:
Read Uncommitted:允许脏读、不可重复读和幻读。
Read Committed:不允许脏读,但允许不可重复读和幻读。
Repeatable Read(默认级别):不允许脏读和不可重复读,但允许幻读。
Serializable:不允许脏读、不可重复读和幻读。
查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
设置事务隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
九、实战案例
为了更好地理解MySQL的使用,我们通过一个实际案例来展示如何使用MySQL进行数据库设计和操作。假设我们正在开发一个简单的员工管理系统,需要存储员工信息、部门信息以及员工的薪资等级。
- 数据库设计
我们设计以下几张表:
dept表:存储部门信息
emp表:存储员工信息
salgrade表:存储薪资等级信息
创建dept表
CREATE TABLE dept (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '部门ID',name VARCHAR(50) NOT NULL COMMENT '部门名称'
) COMMENT '部门表';
创建emp表
CREATE TABLE emp (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '员工ID',name VARCHAR(50) NOT NULL COMMENT '员工姓名',age INT COMMENT '员工年龄',job VARCHAR(20) COMMENT '职位',salary INT COMMENT '薪资',entrydate DATE COMMENT '入职时间',managerid INT COMMENT '直属领导ID',dept_id INT COMMENT '部门ID',FOREIGN KEY (dept_id) REFERENCES dept(id)
) COMMENT '员工表';
创建salgrade表
CREATE TABLE salgrade (grade INT PRIMARY KEY COMMENT '薪资等级',losal INT COMMENT '最低薪资',hisal INT COMMENT '最高薪资'
) COMMENT '薪资等级表';
- 插入测试数据
插入部门数据
INSERT INTO dept (name) VALUES ('研发部'), ('市场部'), ('财务部'), ('销售部'), ('总经办');
插入员工数据
INSERT INTO emp (name, age, job, salary, entrydate, managerid, dept_id) VALUES
('金庸', 66, '总裁', 20000, '2000-01-01', NULL, 5),
('张无忌', 20, '项目经理', 12500, '2005-12-05', 1, 1),
('杨逍', 33, '开发', 8400, '2000-11-03', 2, 1),
('韦一笑', 48, '开发', 11000, '2002-02-05', 2, 1),
('常遇春', 43, '开发', 10500, '2004-09-07', 3, 1),
('小昭', 19, '程序员鼓励师', 6600, '2004-10-12', 2, 1),
('灭绝', 60, '财务总监', 8500, '2002-09-12', 1, 3),
('周芷若', 19, '会计', 48000, '2006-06-02', 7, 3),
('丁敏君', 23, '出纳', 5250, '2009-05-13', 7, 3),
('赵敏', 20, '市场部总监', 12500, '2004-10-12', 1, 2),
('鹿杖客', 56, '职员', 3750, '2006-10-03', 10, 2),
('鹤笔翁', 19, '职员', 3750, '2007-05-09', 10, 2),
('方东白', 19, '职员', 5500, '2009-02-12', 10, 2),
('张三丰', 88, '销售总监', 14000, '2004-10-12', 1, 4),
('俞莲舟', 38, '销售', 4600, '2004-10-12', 14, 4),
('宋远桥', 40, '销售', 4600, '2004-10-12', 14, 4),
('陈友谅', 42, NULL, 2000, '2011-10-12', 1, NULL);
插入薪资等级数据
INSERT INTO salgrade (grade, losal, hisal) VALUES
(1, 0, 3000),
(2, 3001, 5000),
(3, 5001, 8000),
(4, 8001, 10000),
(5, 10001, 15000),
(6, 15001, 20000),
(7, 20001, 25000),
(8, 25001, 30000);
- 查询操作
查询员工的姓名、年龄、职位、部门信息(隐式内连接)
SELECT e.name, e.age, e.job, d.name AS department_name
FROM emp e, dept d
WHERE e.dept_id = d.id;
查询年龄小于30岁的员工的姓名、年龄、职位、部门信息(显式内连接)
SELECT e.name, e.age, e.job, d.name AS department_name
FROM emp e
INNER JOIN dept d ON e.dept_id = d.id
WHERE e.age < 30;
查询拥有员工的部门ID、部门名称
SELECT DISTINCT d.id, d.name
FROM emp e
INNER JOIN dept d ON e.dept_id = d.id;
查询所有年龄大于40岁的员工及其归属的部门名称;如果员工没有分配部门,也需要展示出来(外连接)
SELECT e.*, d.name AS department_name
FROM emp e
LEFT JOIN dept d ON e.dept_id = d.id
WHERE e.age > 40;
查询所有员工的工资等级
SELECT e.*, s.grade
FROM emp e
INNER JOIN salgrade s ON e.salary BETWEEN s.losal AND s.hisal;
查询“研发部”所有员工的信息及工资等级
SELECT e.*, s.grade
FROM emp e
INNER JOIN dept d ON e.dept_id = d.id
INNER JOIN salgrade s ON e.salary BETWEEN s.losal AND s.hisal
WHERE d.name = '研发部';
查询“研发部”员工的平均工资
SELECT AVG(e.salary) AS average_salary
FROM emp e
INNER JOIN dept d ON e.dept_id = d.id
WHERE d.name = '研发部';
查询“研发部”员工的平均工资
SELECT AVG(e.salary) AS average_salary
FROM emp e
INNER JOIN dept d ON e.dept_id = d.id
WHERE d.name = '研发部';
查询工资比“灭绝”高的员工信息
SELECT *
FROM emp
WHERE salary > (SELECT salary FROM emp WHERE name = '灭绝');
查询比平均薪资高的员工信息
SELECT *
FROM emp
WHERE salary > (SELECT AVG(salary) FROM emp);
查询低于本部门平均工资的员工信息
SELECT e1.*
FROM emp e1
WHERE e1.salary < (SELECT AVG(e2.salary) FROM emp e2 WHERE e2.dept_id = e1.dept_id);
查询所有的部门信息,并统计部门的员工人数
SELECT d.id, d.name, COUNT(e.id) AS employee_count
FROM dept d
LEFT JOIN emp e ON d.id = e.dept_id
GROUP BY d.id, d.name;
- 事务管理
假设我们需要实现一个员工薪资调整的功能,要求在调整薪资时,同时更新员工的薪资等级。如果在更新过程中出现任何错误,需要回滚事务,确保数据的一致性。
开启事务
START TRANSACTION;
更新员工薪资
UPDATE emp SET salary = 15000 WHERE name = '张无忌';
更新员工薪资等级
UPDATE emp e
INNER JOIN salgrade s ON e.salary BETWEEN s.losal AND s.hisal
SET e.grade = s.grade
WHERE e.name = '张无忌';
提交事务
COMMIT;
如果在更新过程中出现错误,可以回滚事务:
ROLLBACK;
十、总结
通过本文的详细介绍,我们从MySQL的基础概念出发,逐步深入到实际操作,涵盖了数据库的创建、表的定义、数据的增删改查、多表查询以及事务管理等核心内容。希望本文能够帮助读者快速掌握MySQL的使用方法,为后续的开发工作打下坚实的基础。
如果你对MySQL还有其他疑问,或者在实际操作中遇到了问题,欢迎在评论区留言!
相关文章:
【数据库原理】基础篇:MySQL基础入门与实战指南
前言 在当今数字化时代,数据已成为企业运营的核心资产之一。而MySQL作为一款广泛使用的开源关系型数据库管理系统,凭借其高性能、可靠性和易用性,成为众多开发者和企业的首选。本文将从MySQL的基础概念出发,逐步深入到实际操作&a…...
使用Python解析PPT文件并生成JSON结构详解
引言 PowerPoint(PPT)文件的自动化处理是办公自动化和数据提取的常见需求。本文将介绍如何通过Python的python-pptx库,将PPT文件的样式、结构、文本内容等信息解析为标准化的JSON格式,为后续的自动化处理、数据迁移或样式复用提供…...
C#:第一性原理拆解属性(property)
目录 第一步:从最基本的需求出发 第二步:引入控制需求 第三步:优化访问方式 第四步:剖析属性的本质 第五步:进一步简化和演化 自动属性的定义和作用 自动属性的特点和限制 第六步:总结属性的第一性…...
nacos 2.x使用java语言实现自定义Loadbalance
一、核心实现思路 Nacos 2.x 的负载均衡自定义支持两种模式: 基于 Ribbon 的兼容方案(适用于 Spring Cloud 2020 之前版本)基于 Spring Cloud LoadBalancer 的方案(推荐,适配最新 Spring Cloud 2023 和 Nacos 2.x&am…...
torch.nn.Conv2d介绍——Pytorch中的二维卷积层
torch.nn.Conv2d是torch.nn模块中的二维卷积层类,用于构建神经网络中的二维卷积层。 1、基本语法 torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue, padding_modezeros, deviceNone, dtypeNone)将 2D …...
ubuntu虚拟机裁剪img文件系统
1. 定制文件系统前期准备 将rootfs.img文件准备好,并创建target文件夹2. 挂载文件系统 sudo mount rootfs.img target #挂载文件系统 sudo chroot target #进入chroot环境3. 内裁剪文件系统 增删裁剪文件系统 exit #退出chroot环境 sudo umount target…...
一文详细讲解Python(详细版一篇学会Python基础和网络安全)
引言 在当今数字化时代,Python 作为一种简洁高效且功能强大的编程语言,广泛应用于各个领域,从数据科学、人工智能到网络安全等,都能看到 Python 的身影。而网络安全作为保障信息系统和数据安全的关键领域,其重要性不言…...
使用QT调试LidarView
前段时间使用VeloView想进行点云的显示,后来发现VeloView的尺子测距不好用,也没有筛选点的功能,就放弃了。kitware同家的还有LidarView,功能多一些,更新的时间更晚,而且还兼容速腾、禾赛等多家点云设备可以…...
JAVA:使用 Curator 进行 ZooKeeper 操作的技术指南
1、简述 Apache Curator 是一个基于 ZooKeeper 的 Java 客户端库,它极大地简化了使用 ZooKeeper 的开发工作。Curator 提供了高层次的 API,封装了很多复杂的 ZooKeeper 操作,例如连接管理、分布式锁、Leader 选举等。 在分布式系统中&#…...
【SpringCloud】LoadBalance-负载均衡
4. 负载均衡-LoadBalance 4.1 为什么需要负载均衡? 不知道各位心中有没有女神,通常来说一个女神就会有多个舔狗,那这些舔狗呢,就会心甘情愿的帮女神干活,假设女神小美现在有三个舔狗,小美喜欢让这三个舔狗…...
[250401] OpenAI 向免费用户开放 GPT-4o 图像生成功能 | Neovim 0.11 新特性解读
目录 OpenAI 向免费用户开放 GPT-4o 图像生成功能Neovim 0.11 新特性解读更简化的 LSP 设置和配置内置自动补全改进的悬停文档诊断信息增强更多默认键映射终端模拟器改进其他改进 OpenAI 向免费用户开放 GPT-4o 图像生成功能 2025年4月1日早上,OpenAI CEO Sam Altm…...
VBA数据库解决方案第二十讲:SQL在VBA中几种常见的表达方式
《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…...
SAIL-RK3588J 核心板技术方案——高精度装配式建筑机器人控制
(本方案契合《建筑机器人产业目录》政策要求) 一、方案背景与政策支持 政策驱动 2025年2月《建筑机器人产业目录》明确将“高精度建筑机器人控制设备”纳入重点补贴范围,要求定位精度≤0.5mm、支持实时质检与多机协同,…...
人工智能在生物医药领域的应用地图:AIBC2025将于6月在上海召开!
人工智能在生物医药领域的应用地图:AIBC2025将于6月在上海召开! 近年来,人工智能在生物医药行业中的应用受到广泛关注。 2024年10月,2024诺贝尔化学奖被授予“计算蛋白质设计和蛋白质结构预测”,这为行业从业人员带来…...
C#高级:利用LINQ进行实体列表的集合运算
问题引入: Teacher实体的唯一标识符是Name和Classes字段(或者说这两个字段唯一确定一条数据),如何对两个实体列表做交集、差集运算呢?(并集直接调用AddRange方法即可) 一、重写方法实现 1.原…...
Python项目-基于Flask的个人博客系统设计与实现(2)
源代码 续 {% extends base.html %}{% block title %}评论管理{% endblock %}{% block content %} <div class"container py-4"><div class"row"><div class"col-md-3"><div class"list-group mb-4"><a h…...
2023第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(真题题解)(C++/Java题解)
记录刷题的过程、感悟、题解。 希望能帮到,那些与我一同前行的,来自远方的朋友😉 大纲: 1、日期统计-(解析)-暴力dfs(😉蓝桥专属 2、01串的熵-(解析)-不要chu…...
前端界面在线excel编辑器 。node编写post接口获取文件流,使用传参替换表格内容展示、前后端一把梭。
首先luckysheet插件是支持在线替换excel内容编辑得但是浏览器无法调用本地文件,如果只是展示,让后端返回文件得二进制文件流就可以了,直接使用luckysheet展示。 这里我们使用xlsx-populate得node简单应用来调用本地文件,自己写一个…...
在 Fedora 系统下备份远程 Windows SQL Server 数据库的完整方案
一、环境准备与工具安装 1. 安装 Microsoft SQL Server 命令行工具 Fedora 需安装 mssql-tools 和 ODBC 驱动: # 添加 Microsoft 仓库 sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo# 安装工具包 …...
从24GHz到71GHz:Sivers半导体的广泛频率范围5G毫米波产品解析
在5G技术的浪潮中,Sivers半导体推出了创新的毫米波无线产品,为通信行业带来高效、可靠的解决方案。这些产品支持从24GHz到71GHz的频率,覆盖许可与非许可频段,适应高速、低延迟的通信场景。 5G通信频段的一点事儿及Sivers毫米波射频…...
从【抖音安全与信任中心】观察企业如何做算法透明
抖音主动公开算法原理树立行业新标杆: “抖音安全与信任中心”网站(95152.douyin.com) 1 算法透明的几点准则 需涵盖技术逻辑公开、治理机制可查、用户参与共建等维度。以下是基于抖音案例总结的可行路径,以及几个准则࿱…...
html处理Base文件流
处理步骤 从服务返回的字符串中提取文件流数据,可能是Base64或二进制。将数据转换为Blob对象。创建对象URL。创建<a>元素,设置href和download属性。触发点击事件以下载文件。删除缓存数据 代码 // 假设这是从服务返回的Base64字符串(…...
MySQL内存管理机制详解
目录标题 MySQL内存管理机制详解1. **内存组成与核心组件**2. **RSS与共享内存的关系**3. **OOM问题排查步骤**4. **典型案例** Buffer Pool(缓冲池) 确实属于共享内存(Shared Memory)的核心组成部分?1. **Buffer Pool…...
《算法笔记》9.7小节——数据结构专题(2)->堆 问题 C: 合并果子(堆)
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,…...
化繁为简解决leetcode第1289题下降路径最小和II
1289.下降路径最小和II 难度:困难 问题描述: 给你一个nxn整数矩阵grid,请你返回非零偏移下降路径数字和的最小值。 非零偏移下降路径定义为:从grid数组中的每一行选择一个数字,且按顺序选出来的数字中,…...
蓝桥杯省模拟赛 数位和
问题描述 只能被 1 和本身整除的数称为质数。 请问在 1 (含)到 1000000 (含)中,有多少个质数的各个数位上的数字之和为 2323 。 提示:599 就是这样一个质数,各个数位上的数字之和为 59923 。…...
MySQL和Oracle批量插入SQL差异详解
文章目录 MySQL和Oracle批量插入SQL差异详解1. 基本批量插入语法1.1 MySQL批量插入1.2 Oracle批量插入 2. 带序列的批量插入2.1 MySQL带自增ID的批量插入2.2 Oracle带序列的批量插入 3. 条件批量插入3.1 MySQL条件批量插入3.2 Oracle条件批量插入 MySQL和Oracle批量插入SQL差异…...
YOLOv5配置训练以及华为昇腾910B推理
参考文章: 保姆式yolov5教程,训练你自己的数据集 - 知乎 Windows 10|11下安装mmyolo-0.5.0版本 - 知乎 Ubuntu22.04安装教程&基于华为Ascend AI处理器的om模型atc转换环境安装_ubuntu安装atc工具-CSDN博客嵌入式AI---在华为昇腾推理自己的yolov5目标…...
Visual Studio Code配置自动规范代码格式
目录 前言1. 插件安装2. 配置个性化设置2.1 在左下角点击设置按钮 ,点击命令面板(或者也可以之间按快捷键CtrlShiftP)2.2 在弹出的搜索框输入 settings.json,打开首选项:打开工作区设置;2.3 在settings.jso…...
【网安面经合集】42 道高频 Web 安全面试题全解析(附原理+防御+思路)
对于正在准备 安全岗求职或实习的同学们来说,Web 安全面试题几乎是必问项。 尤其是一些经常出现的考点,比如 SQL 注入、XSS、CSRF、反序列化、逻辑漏洞、WAF 绕过等等,不仅需要你知道“是什么”,还得能“讲清楚原理、分类、修复和…...
论文笔记(七十五)Auto-Encoding Variational Bayes
Auto-Encoding Variational Bayes 文章概括摘要1 引言2 方法2.1 问题场景2.2 变分下界2.3 SGVB估计器与AEVB算法2.4 重参数化技巧 3 示例:变分自编码器(Variational Auto-Encoder)4 相关工作5 实验6 结论7 未来工作 文章概括 引用࿱…...
前端学习记录之HTML
1. 网页 1.1 什么是网页 网站是指在因特网上根据一定的规则,使用HTML等制作的用于展示特定内容相关的网页集合。 网页是网站中的一“页”,通常是HTML格式的文件,它要通过浏览器来阅读 网页是构成网站的基本元素。它通常由图片,…...
程序化广告行业(39/89):广告投放的数据分析与优化秘籍
程序化广告行业(39/89):广告投放的数据分析与优化秘籍 在程序化广告的领域中,数据分析与优化调整是实现精准投放、提升广告效果的核心环节。作为一名热衷于探索程序化广告的学习者,我希望通过这篇博客,和大…...
蓝桥杯 01游戏
问题描述 小蓝最近玩上了 01 游戏,这是一款带有二进制思想的棋子游戏。 游戏在一个大小为 N N 的棋盘上进行。棋盘上的每个位置都需要放置一个数字 0 或 1。初始情况下,棋盘上有一部分位置已经放置了固定的数字,玩家不可以更改这些位置。其…...
NoSQL 数据库的适用场景与局限性分析
NoSQL(Not Only SQL)数据库是一类非关系型数据库,通过灵活的数据模型和分布式架构解决传统关系型数据库在扩展性、性能和数据多样性上的瓶颈。以下从技术特性、适用场景、不适用场景及行业实践展开分析: 一、NoSQL数据库的核心技术特性 四大数据模型 文档型:以JSON/BSON格…...
个人网站:基于html、css、js网页开发界面
1、注册 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>注册页面</title><link rel&qu…...
嵌入式图像采集与显示系统实战详解:基于V4L2与Framebuffer的实现
在嵌入式Linux开发中,图像采集与显示是非常典型的一类应用场景。本文将基于 ARM9(S3C2410) 平台,深入讲解如何使用 V4L2 框架从 USB 摄像头采集图像数据,并通过 Framebuffer 接口实时显示到 LCD 屏幕。内容涵盖驱动架构…...
庙算兵棋推演AI开发初探(6-神经网络开发)
碎碎念: 老师让我和同学组队参加10月底截止报名的庙算比赛,我俩走运进了64强,打的过程中发现了一个重要问题——为什么别人总能打我,但是我都看不见!就像玩dota被对面英雄莫名其妙单杀了但是他就一直隐身我都不知道怎…...
嵌入式硬件篇---嘉立创PCB绘制
文章目录 前言一、PCB绘制简介1.1绘制步骤1.1.1前期准备1.1.2原理图设计1.1.3原理图转PCB1.1.4PCB布局1.1.5布线1.1.6布线优化和丝印1.1.7制版 1.2原理1.2.1电气连接原理1.2.2信号传输原理1.2.3电源和接地原理 1.3注意事项1.3.1元件封装1.3.2布局规则1.3.3过孔设计1.3.4DRC检查…...
AI与.NET技术实操系列(四):使用 Semantic Kernel 和 DeepSeek 构建AI应用
1. 引言 在人工智能技术飞速发展的今天,大型语言模型(Large Language Models, LLMs)已成为智能应用开发的核心驱动力。从智能客服到自动化内容生成,LLMs的应用正在深刻改变我们的工作和生活方式。 对于.NET开发者而言,…...
Vue 组件 - Slot 内容分发
Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue组件 - Slot 内容分发 目录 Slot内容分发 旧版slot 单插槽 使用插槽 具名插槽 插槽实现导航 使用插槽优点 新版slot Or 插槽版抽屉 总结 Slot内容分发 混合父组件的内容和子组件自己模板 -- 内容分发 父组件模…...
Mysql之事务(下)
🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 5. 事务的隔离级别与并发控制 5.1事务的隔离级别 5.2查看与设置事务的…...
LabVIEW液压控制系统开发要点
液压控制系统开发需兼顾高实时性、强抗干扰性和安全性,尤其在重工业场景中,毫秒级响应延迟或数据异常都可能导致设备损坏。本文以某钢厂液压升降平台项目为例,从硬件选型、控制算法、安全机制三方面,详解LabVIEW开发中的关键问题与…...
mybatis-genertor(代码生成)源码及扩展笔记
文章目录 生成过程MyBatisGenerator.generate()代码入口 pid0,id0context.generateFiles()代码 pid0,id1introspectedTable.getGeneratedJavaFiles() java部分生成 pid1,id11introspectedTable.getGeneratedXmlFiles() xml部分生成 pid1,id12这里是一波三连调用XMLMapperGenera…...
Mysql-数据库、安装、登录
一. 数据库 1. 数据库:DataBase(DB),是存储和管理数据的仓库。 2. 数据库管理系统:DataBase Management System(DBMS),操纵管理数据库的大型软件 3. SQL:Structured Query Language&…...
HTTP 请求方法
HTTP 请求方法 引言 HTTP(超文本传输协议)是互联网上应用最为广泛的网络协议之一。它定义了客户端与服务器之间通信的规则。HTTP请求方法,也称为HTTP动词,是客户端向服务器发送请求时使用的操作类型。本文将详细介绍HTTP请求方法的概念、分类、常用方法及其在实际应用中的…...
群体智能优化算法-算术优化算法(Arithmetic Optimization Algorithm, AOA,含Matlab源代码)
摘要 算术优化算法(Arithmetic Optimization Algorithm, AOA)是一种新颖的群体智能优化算法,灵感来源于加、减、乘、除四种基本算术运算。在优化过程中,AOA 通过乘除操作实现全局探索,通过加减操作强化局部开发&#…...
4.1-python操作wrod/pdf 文件
1.读取word文件 首先安装软件包 pip3 install python-docx from docx import Documentimport os path os.path.join(os.getcwd(),你的文档名字.docx)# 加载文档 doc Document(path)# 遍历数据 for p in doc.paragraphs:print(p.text)# 遍历文档中所有表格 for t in doc.t…...
C# 窗体应用(.FET Framework) 线程操作方法
一、Thread线程使用方法 初始化方法 Thread th1; th1 new Thread(方法名); th1.IsBackground true; th1.Start();传参 ///定义一个object接受参数的方法 private void Test(object n){string str1 n as string; MessageBox.Show(str1); }// 调用方法 Thread th2 string s…...
vscode/cursor编辑器中vue3文件里面的css不能注释解决办法
升级了cursor后发现css或者html里面的代码不能单行注释了,真的很烦人,找了很多解决办法,还是定位到插件上,有一个vue的插件,把它禁用掉就可以注释了,然后再把这个插件启用,就可以使用了…...