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

SQLite:DDL(数据定义语言)的基本用法

SQLite:DDL(数据定义语言)的基本用法

  • 1 主要内容说明
  • 2 相关内容说明
    • 2.1 创建表格(create table)
      • 2.1.1 SQLite常见的数据类型
        • 2.1.1.1 integer(整型)
        • 2.1.1.2 text(文本型)
        • 2.1.1.3 real(浮点型)
        • 2.1.1.4 datetime(日期时间)
      • 2.1.2 源码1 (创建表格)
      • 2.1.3 源码1运行效果
    • 2.2 修改表(alter table)
      • 2.2.1 添加列(add column)
        • 2.2.1.1 语法
        • 2.2.1.2 添加列,源码2
      • 2.2.2 重命名表(rename to)
        • 2.2.2.1 语法
        • 2.2.2.2 重命名表,源码3
      • 2.2.3 重命名列(rename column)
        • 2.2.3.1 语法
        • 2.2.3.2 重命名列,源码4
      • 2.2.4 重建表实现--删除列
        • 2.2.4.1 间接删除列步骤
          • 2.2.4.1.1 创建旧表(包含age列),源码5如下:
          • 2.2.4.1.2 源码5具体效果图
          • 2.2.4.1.3 创建新表(没有age列),源码6如下:
          • 2.2.4.1.4 源码6具体效果图
          • 2.2.4.1.5 将旧表的数据复制到新表(insert into)
          • 2.2.4.1.6 删除旧表
          • 2.2.4.1.7 将新表重命名为旧表名
    • 2.3 删除表(drop table)
      • 2.3.1 删除表基本语法
      • 2.3.2 删除表相关内容
        • 2.3.2.1 删除表
        • 2.3.2.2 删除表(如果存在的话)
      • 2.3.3 删除表时的注意事项
        • 2.3.3.1 不可恢复
        • 2.3.3.2 删除表与依赖关系
        • 2.3.3.3 删除索引和触发器
        • 2.3.3.4 删除多个表
      • 2.3.4 源码7(删除表)
    • 2.4 创建索引(create index)
      • 2.4.1 索引对照说明
        • 2.4.1.1 全表扫描
        • 2.4.1.2 索引查找
      • 2.4.2 创建索引语法
        • 2.4.2.1 创建普通索引
        • 2.4.2.2 创建唯一索引
        • 2.4.2.3 创建复合索引
      • 2.4.3 创建索引举例
        • 2.4.3.1 创建示例表并插入数据,源码9
        • 2.4.3.2 源码9表格样式效果
        • 2.4.3.3 创建索引
        • 2.4.3.4 查询性能的对比
          • 2.4.3.4.1 不使用索引的查询
          • 2.4.3.4.2 使用索引的查询
          • 2.4.3.4.3 查看是否使用了索引
    • 2.5 删除索引(drop index)
    • 2.6 创建视图(create view)
      • 2.6.1 创建视图的语法
      • 2.6.2 创建视图举例
        • 2.6.2.1 创建表格,用以视图显示,使用源码9
        • 2.6.2.2 源码9效果图
        • 2.6.2.3 创建视图,显示表users中年龄>22的内容
        • 2.6.2.4 查询视图
        • 2.6.2.5 查询视图效果
        • 2.6.2.6 再添加一条信息
        • 2.6.2.7 再次查询视图
    • 2.7 删除视图(drop view)
      • 2.7.1 语法
      • 2.7.2 举例
  • 3.结语
  • 4.定位日期

1 主要内容说明

SQLite 的 DDL 语句主要用于数据库对象的定义和修改,包括创建和删除表、索引、视图等。常用的 DDL 操作包括:

  • 创建表 (CREATE TABLE):用于定义表结构和约束。
  • 修改表 (ALTER TABLE):用于修改表结构,添加列。
  • 删除表 (DROP TABLE):删除表及其数据。
  • 创建索引 (CREATE INDEX):提高查询效率。
  • 删除索引 (DROP INDEX):删除索引。
  • 创建视图 (CREATE VIEW):定义一个虚拟表,简化查询。
  • 删除视图 (DROP VIEW):删除视图定义。

本文使用的工具为dbeaver编辑器,dbeaver编辑器下载地址。开发者同样也可以另外使用终端等其他方式来编写数据库相关内容的代码。

数据库代码通常情况下不区分大小写的,本文为了方便观察都将代码以小写的方式编写。

2 相关内容说明

2.1 创建表格(create table)

  • 在 SQLite 中,creat table 语句用于定义新表的结构。

2.1.1 SQLite常见的数据类型

2.1.1.1 integer(整型)
  • 用于存储整数值。
  • 大小范围:支持从 -263 到 263-1 的范围(8 字节)。
  • 常见用途:用于表示 ID、计数、年龄等没有小数的数值。
  • 示例如下
	stock integer default 0 -- 表示库存数量,默认为 0age integer check(age >= 0) -- 表示年龄,必须大于等于 0
2.1.1.2 text(文本型)
  • 用于存储字符串或文本。
  • 长度没有限制。
  • 常见用途:用于存储名称、描述、电子邮件地址等字符数据。
  • 示例如下:
	product_name text not null -- 表示商品名称,不能为空email text unique -- 表示电子邮箱,必须唯一
2.1.1.3 real(浮点型)
  • 用于存储浮点数(带小数点的数值)。
  • 以 8 字节的 IEEE 754 双精度存储。
  • 常见用途:表示价格、重量、长度等带有小数的数值。
  • 示例如下:
	price real check(price >= 0) -- 表示商品价格,必须大于等于 0
2.1.1.4 datetime(日期时间)
  • SQLite 没有专门的日期时间类型,但可以使用 text、real 或 integer 存储日期时间。
  • 如果为 text,通常存储为 ISO8601 格式(YYYY-MM-DD HH:MM:SS)。
  • 如果为 real,表示自公元 0 年以来的天数。
  • 如果为 integer,表示自 Unix 纪元(1970-01-01)以来的秒数。
  • 常见用途:记录时间戳。
  • 示例如下:
	created_at datetime default current_timestamp -- 表示记录的创建时间,默认为当前时间

2.1.2 源码1 (创建表格)

-- 创建一个名为 products 的表,用于存储商品信息
create table products (product_id integer primary key autoincrement,  -- 商品 ID,主键,自动递增product_name text not null,                    -- 商品名称,必填字段price real check(price >= 0),                  -- 商品价格,必须大于等于 0stock integer default 0,                       -- 库存数量,默认为 0created_at datetime default current_timestamp  -- 创建时间,默认为当前时间
);

2.1.3 源码1运行效果

  • 表格创建成功后得到一个如下图的表格
    在这里插入图片描述

2.2 修改表(alter table)

  • 在 SQLite 中,alter table 语句用于修改现有表的结构。

2.2.1 添加列(add column)

  • SQLite 支持在表中添加新列,但不能删除或直接修改现有列。
2.2.1.1 语法
  • 添加列的语法如下:
	alter table table_name add column_name datatype [constraint];
2.2.1.2 添加列,源码2
  • 假设已有一个表users,结构如下:
create table users (id integer primary key autoincrement,name text not null,age integer
);
  • 效果如下
    在这里插入图片描述

  • 现在要为users表添加一个email列:

	-- 向表 users 添加新列 email,用于存储用户邮箱-- 新列的默认值为 NULL,因为 SQLite 在添加列时不允许直接设置非空或唯一约束alter table users add column email text;	
  • 执行后,users表可以得到如下表结构:
    在这里插入图片描述

2.2.2 重命名表(rename to)

  • 表名从 users 改为 customers,但表内数据和结构保持不变。
2.2.2.1 语法
  • 重命名表格的语法如下:
	alter table old_table_name rename to new_table_name;
2.2.2.2 重命名表,源码3
  • 假设已有一个表users,结构如下:
create table users (id integer primary key autoincrement,name text not null,age integer
);
  • 将 users 表重命名为 customers,如下
	-- 将表 users 重命名为 customers(顾客)alter table users rename to customers;
  • 表名称变化效果如下:
    在这里插入图片描述

2.2.3 重命名列(rename column)

重命名列(SQLite 3.25.0+)

2.2.3.1 语法
  • 重命名列的语法如下
	alter table table_name rename column old_column_name to new_column_name;
2.2.3.2 重命名列,源码4
  • 假设已有一个表users,结构如下:
create table users (id integer primary key autoincrement,name text not null,age integer
);
  • 效果如下
    在这里插入图片描述
  • 将 users 表中的 name 列重命名为 full_name,如下
	-- 将列 name 重命名为 full_namealter table users rename column name to full_name;
  • 重命名列后效果如下
    在这里插入图片描述

2.2.4 重建表实现–删除列

SQLite 不支持直接删除列,可以通过以下步骤间接实现。

2.2.4.1 间接删除列步骤

目标:从 users 表格中 删除 age 列

2.2.4.1.1 创建旧表(包含age列),源码5如下:
-- 创建旧表 old_users,包含 age 列
create table old_users (id integer primary key autoincrement, -- 用户 ID,主键,自动递增age integer check(age >=0),			  -- 用户年龄,约束检查大于等于0	name text not null,                   -- 用户名,必填字段email text,                           -- 用户邮箱created_at datetime default current_timestamp, -- 用户创建时间is_active integer default 1          -- 用户是否激活
);
2.2.4.1.2 源码5具体效果图
  • 新建一个旧表,包含age列
    在这里插入图片描述
2.2.4.1.3 创建新表(没有age列),源码6如下:
-- 创建新表 new_users,其结构与 users 表类似,但不包含 age 列
create table new_users (id integer primary key autoincrement, -- 用户 ID,主键,自动递增name text not null,                   -- 用户名,必填字段email text,                           -- 用户邮箱created_at datetime default current_timestamp, -- 用户创建时间is_active integer default 1          -- 用户是否激活
);
2.2.4.1.4 源码6具体效果图
  • 新建一个新表,不包含age列
    在这里插入图片描述
2.2.4.1.5 将旧表的数据复制到新表(insert into)
  • 将旧表的数据复制到新表,源码如下:
-- 复制数据到新表,忽略 age 列insert into new_users (id, name, email, created_at, is_active)select id, name, email, created_at, is_active from old_users;
2.2.4.1.6 删除旧表
  • 删除旧表,源码如下:
	-- 删除旧表 old_usersdrop table old_users;
2.2.4.1.7 将新表重命名为旧表名
  • 将新表重命名为旧表名,源码如下:
	-- 将新表 new_users 重命名为 old_usersalter table new_users rename to old_users;

2.3 删除表(drop table)

DROP TABLE 是用来删除 SQLite 数据库中指定表的语句。使用该语句时,表的数据、结构以及与该表相关的所有约束(如索引、触发器)都会被永久删除,无法恢复。因此,在执行 DROP TABLE 之前,确保已备份重要数据。

2.3.1 删除表基本语法

删除表基本语法如下:

	drop table [if exists] table_name;
  • table_name:要删除的表的名称。
  • if exists:可选项,表示在删除表之前检查该表是否存在。如果表不存在,SQLite 不会抛出错误,而是忽略该语句。如果表存在,它会被删除。

2.3.2 删除表相关内容

2.3.2.1 删除表
	-- 删除表 usersdrop table users;
  • 说明:这将完全删除 users 表,包括表中的所有数据和结构。
2.3.2.2 删除表(如果存在的话)
	-- 删除表 users,如果表不存在则不抛出错误drop table if exists users;

说明:如果 users 表存在,它会被删除;如果不存在,SQLite 会忽略此命令,且不会抛出错误。

2.3.3 删除表时的注意事项

2.3.3.1 不可恢复

使用 drop table 删除表后,表中的所有数据都会被永久删除,无法恢复。执行之前请确认已做好备份。

2.3.3.2 删除表与依赖关系

如果表被其他表的外键约束引用,则在删除表时可能会引发错误。可以考虑先删除或更新外键约束。

2.3.3.3 删除索引和触发器

删除表时,所有与该表相关的索引和触发器也会被自动删除。

2.3.3.4 删除多个表

SQLite 不支持在单一 drop table 语句中删除多个表。如果需要删除多个表,必须分别执行多个 drop table 语句。例如:

	-- orders 订单drop table if exists users;drop table if exists orders;

2.3.4 源码7(删除表)

说明:

  • 先创建表 users,插入了两条记录。
  • 然后使用 DROP TABLE 删除 users 表及其所有数据。
-- 创建 users 表
create table users (id integer primary key autoincrement,name text not null,email text unique
);-- 插入数据
insert into users (name, email) values ('小蜗牛764号', 'xiaowoniu764@example.com');
insert into users (name, email) values ('小蜗牛765号', 'xiaowoniu765@example.com');-- 删除表 users
drop table if exists users;

2.4 创建索引(create index)

2.4.1 索引对照说明

举例,假设users表有 100,000 条记录

2.4.1.1 全表扫描
	select * from users where age > 30;
  • 如果age字段没有索引,SQLite 会扫描 100,000 条记录。
  • 范围:整张表。
  • 性能:随着数据量增长,性能下降明显。
2.4.1.2 索引查找
	create index idx_users_age on users(age);select * from users where age > 30;
  • 如果age字段有索引,SQLite 会通过索引快速定位age > 30的记录。
  • 范围:仅扫描索引中满足条件的部分记录。
  • 性能:即使表中有百万条记录,索引查找依然高效。

2.4.2 创建索引语法

	create [unique] index index_nameon table_name (column1, column2, ...);
  • unique:可选项,表示索引将强制列值唯一,即该列的每个值只能出现一次。如果尝试插入重复的值,则会报错。
  • index_name:要创建的索引的名称。
  • table_name:索引所属的表。
  • column1, column2, …:要为其创建索引的列。
2.4.2.1 创建普通索引
  • 这个索引将加速 users 表中基于 name 列的查询。
	-- 创建一个名为 idx_users_name 的索引,索引将基于 users 表的 name 列create index idx_users_name on users(name);
2.4.2.2 创建唯一索引
  • 这个索引不仅加速基于 email 列的查询,还强制 email 列中的值唯一。如果尝试插入重复的 email 值,将会报错。
	-- 创建一个名为 idx_users_email 的唯一索引,索引基于 users 表的 email 列create unique index idx_users_email on users(email);
2.4.2.3 创建复合索引
  • 这个索引可以加速基于 name 和 age 列的查询。
复制代码-- 创建一个基于 users 表的 name 和 age 列的复合索引create index idx_users_name_age on users(name, age);

2.4.3 创建索引举例

2.4.3.1 创建示例表并插入数据,源码9
-- 创建一个 users 表
create table users (id integer primary key autoincrement, 		-- 用户 ID,主键,自动递增name varchar(20) not null,                  -- 用户名,必填字段,最多20个字符email varchar(30) unique,                   -- 用户邮箱,必须唯一,最多30个字符age integer                                 -- 用户年龄,可为空
);-- 插入示例数据
insert into users (name, email, age) values 
('小蜗牛763号', 'xiaowoniu763@example.com', 25),   -- 插入第1条用户数据
('小蜗牛764号', 'xiaowoniu764@example.com', 5),    -- 插入第2条用户数据
('小蜗牛765号', 'xiaowoniu765@example.com', 23),   -- 插入第3条用户数据
('小蜗牛766号', 'xiaowoniu766@example.com', 21),   -- 插入第4条用户数据
('小蜗牛767号', 'xiaowoniu767@example.com', 22);   -- 插入第5条用户数据
2.4.3.2 源码9表格样式效果
  • 效果如下
    在这里插入图片描述
2.4.3.3 创建索引
  • 为 name 列创建一个索引以加速查询:
	-- 为 users 表的 name 列创建索引create index idx_users_name on users(name);
2.4.3.4 查询性能的对比
2.4.3.4.1 不使用索引的查询
  • 如果没有索引,查询 name 为 ‘小蜗牛764号’ 的用户时,SQLite 需要扫描整个表(即全表扫描)。
	-- 查询 name 为 'xiaowoniu764号' 的用户select * from users where name = '小蜗牛764号';
  • 执行此查询时,SQLite 会依次检查每一行的 name 列,直到找到匹配的行。
2.4.3.4.2 使用索引的查询
  • 有了索引后,SQLite 可以直接使用索引快速定位目标行,而不需要扫描整个表。
	-- 同样查询 name 为 '小蜗牛764号' 的用户select * from users where name = '小蜗牛764号';
  • 执行此查询时,SQLite 会利用索引 idx_users_name,只需从索引中查找匹配的行即可,大大提高查询速度。
2.4.3.4.3 查看是否使用了索引
  • 可以通过explain query plan 查看查询是否使用了索引
  • 查询计划(假设未创建索引)
	explain query plan select * from users where name = '小蜗牛764号';
  • 使用索引则输出,SEARCH TABLE users USING INDEX idx_users_name (name=?),如下:
    在这里插入图片描述
    表示 SQLite 使用了索引 idx_users_name 来加速查询。

  • 未使用索引时,效果如下
    在这里插入图片描述
    表示 SQLite 对 users 表进行了全表扫描。

2.5 删除索引(drop index)

  • 如果索引不再需要,可以将其删除:
	-- 删除 idx_users_name 索引drop index idx_users_name;

2.6 创建视图(create view)

  • 视图 是基于一个或多个表的查询结果定义的虚拟表。它不存储实际数据,只保存 SQL 查询逻辑。
  • 每次访问视图时,数据库会动态执行视图定义中的查询语句,生成结果集。

2.6.1 创建视图的语法

	create [temp | temporary] view view_name asselect statement;
  • TEMP 或 TEMPORARY:可选项,创建临时视图,视图只在当前数据库连接中有效。
  • view_name:视图的名称。
  • SELECT statement:定义视图的数据查询语句。

2.6.2 创建视图举例

2.6.2.1 创建表格,用以视图显示,使用源码9
-- 创建一个 users 表
create table users (id integer primary key autoincrement, 		-- 用户 ID,主键,自动递增name varchar(20) not null,                  -- 用户名,必填字段,最多20个字符email varchar(30) unique,                   -- 用户邮箱,必须唯一,最多30个字符age integer                                 -- 用户年龄,可为空
);-- 插入示例数据
insert into users (name, email, age) values 
('小蜗牛763号', 'xiaowoniu763@example.com', 25),   -- 插入第1条用户数据
('小蜗牛764号', 'xiaowoniu764@example.com', 5),    -- 插入第2条用户数据
('小蜗牛765号', 'xiaowoniu765@example.com', 23),   -- 插入第3条用户数据
('小蜗牛766号', 'xiaowoniu766@example.com', 21),   -- 插入第4条用户数据
('小蜗牛767号', 'xiaowoniu767@example.com', 22);   -- 插入第5条用户数据
2.6.2.2 源码9效果图

在这里插入图片描述

2.6.2.3 创建视图,显示表users中年龄>22的内容
-- 创建视图 view_adult_users
-- 该视图筛选出 users 表中年龄大于 22 的用户
create view view_adult_users as
select *          -- 查询 users 表的所有列
from users         -- 数据来源于 users 表
where age > 22;    -- 只包含年龄大于 22 的用户
2.6.2.4 查询视图
  • 查询视图
	select * from view_user_age_group;
2.6.2.5 查询视图效果

在这里插入图片描述

2.6.2.6 再添加一条信息
	insert into users (name, email, age) values ('小蜗牛768号', 'xiaowoniu768@example.com', 28)
2.6.2.7 再次查询视图
	select * from view_user_age_group;
  • 视图可以根据表格的更新,而更新添加内容,通过保存的逻辑显示方式展示表格内容。
    在这里插入图片描述

2.7 删除视图(drop view)

2.7.1 语法

	drop view [if exists] view_name;

2.7.2 举例

	-- 删除视图 view_adult_usersdrop view if exists view_adult_users;

3.结语

DDL关于表格的内容,DML关于数据的内容,DQL关于查询的内容。如果是鸿蒙开发者,重心主要放在数据的查询和使用上。

本文关于DDL的内容只是简单基本的用法,用以基础入门,以及为了后续的重新拾起少花时间而编写的。因为放于网络上查找的观看效率,比在电脑本地对内容的观看效率要高。

由于笔者的能力有限,创作的内容有所不足在所难免,也敬请读者包涵和指出,万分感谢!

4.定位日期

完成创建表、修改表、删除表的内容;
2024-12-3;
1:03;

2024-12-4;
00:03;

相关文章:

SQLite:DDL(数据定义语言)的基本用法

SQLite:DDL(数据定义语言)的基本用法 1 主要内容说明2 相关内容说明2.1 创建表格(create table)2.1.1 SQLite常见的数据类型2.1.1.1 integer(整型)2.1.1.2 text(文本型)2…...

Spring-Smart-DI !动态切换实现类框架

背景 一般我们系统同一个功能可能会对接多个服务商,防止某个服务商的服务不可用快速切换或者收费不同需要切换,那我们一般做快速切换逻辑传统无非就是先将每个服务商实现,然后在配置点(数据库或者nacos)配置当前正在使…...

【SCT71401】3V-40V Vin, 150mA, 2.5uA IQ,低压稳压器,替代SGM2203

SCT71401 3V-40V Vin, 150mA, 2.5uA IQ,低压稳压器,替代SGM2203 描述 SCT71401系列产品是一款低压差线性稳压器,设计用于3 V至40 V (45V瞬态输入电压)的宽输入电压范围和150mA输出电流。SCT71401系列产品使用3.3uF…...

浅谈网络 | 应用层之流媒体与P2P协议

目录 流媒体名词系列视频的本质视频压缩编码过程如何在直播中看到帅哥美女?RTMP 协议 P2PP2P 文件下载种子文件 (.torrent)去中心化网络(DHT)哈希值与 DHT 网络DHT 网络是如何查找 流媒体 直播系统组成与协议 近几年直播比较火,…...

Brain.js(六):构建FNN神经网络实战教程 - 用户喜好预测

在前文不同的神经网络类型和对比 针对不同的神经网络类型做了对比,本章将对FNN稍作展开 测试环境: chrome 版本 131.0.6778.86(正式版本) (64 位) 一、引言 Brain.js 是一个简单易用的 JavaScript 神经网…...

重学设计模式-建造者模式

本文介绍一下建造者模式,相对于工厂模式来说,建造者模式更为简单,且用的更少 定义 建造者模式是一种创建型设计模式,它使用多个简单的对象一步一步构建成一个复杂的对象。这种模式的主要目的是将一个复杂对象的构建过程与其表示…...

linux下c++调用opencv3.4.16实战技巧

目录 参考:在图像上绘框在图像上绘圆在图像上绘文字在图像上绘制线灰度图rgb转yuvOpenCV 读取视频,设置起始帧、结束帧及帧率获取(1.1)简介(1.2)Mat类型(1.3)IplImage类型将OpenCV抓拍的图片进行x264编码并保存到文件c++调用opencv,读取rtsp视频流参考: https://blog…...

记录css模糊程度的属性

记录需要模糊以及透明化图片需求: opacity: (0到1之间数字,dom透明程度)。 filter: blur() 括号里需数字,单位为px,值越大模糊程度越大。 关于css中filter属性记录 filter 滤镜属性: blur&…...

K8S的监控与告警配置有哪些最佳实践

在 Kubernetes (K8s) 集群中实现有效的监控与告警是确保集群稳定性、性能以及及时响应潜在问题的关键。以下是 K8s 监控与告警配置的最佳实践,涵盖了监控工具的选择、告警规则的配置、数据存储与可视化等方面。 1. 选择合适的监控工具 Kubernetes 生态系统有多种监…...

如何在Ubuntu 20.04上安装和使用PostgreSQL:一步步指南

如何在Ubuntu 20.04上安装和使用PostgreSQL:一步步指南 在Ubuntu 20.04上安装和使用PostgreSQL数据库包括几个明确的步骤:安装、配置、创建用户和数据库、以及基本的数据库操作。下面,我将详细解释每个步骤,并提供具体的命令行示…...

PostGis学习笔记

– 文本方式查看几何数据 SELECT ST_AsText(geom)FROM nyc_streets WHERE name ‘Avenue O’; – 计算紧邻的街区 SELECT name,ST_GeometryType(geom) FROM nyc_streets WHERE ST_DWithin( geom,ST_GeomFromText(‘LINESTRING(586782 4504202,586864 4504216)’,26918),0.1); …...

JDK17 线程池 ThreadPoolExecutor

文章目录 线程池ThreadPoolExecutor状态向线程池添加任务 executeWorker线程池新建工作线程 addWorker 拒绝策略 线程池 线程池将创建线程和使用线程解耦。优点是 避免重复创建和销毁线程,降低资源消耗。任务不用等待创建线程的时间,提高响应速度。统一…...

Dify+Docker

1. 获取代码 直接下载 (1)访问 langgenius/dify: Dify is an open-source LLM app development platform. Difys intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more, …...

分布式会话 详解

分布式会话详解 在分布式系统中,用户的会话状态需要在多个服务器或节点之间共享或存储。分布式会话指的是在这种场景下如何管理和存储会话,以便在多个节点上都能正确识别用户状态,从而保证用户体验的一致性。 1. 为什么需要分布式会话 在单…...

Java进阶

Java进阶 java注解 java中注解(Annotation),又称为java标注,是一种特殊的注释,可以添加在包,类,成员变量,方法,参数等内容上面.注解会随同代码编译到字节码文件中,在运行时,可以通过反射机制获取到类中的注解,然后根据不同的注解进行相应的解析. 内置注解 Java 语言中已经定…...

Qt/C++实现帧同步播放器/硬解码GPU绘制/超低资源占用/支持8K16K/支持win/linux/mac/嵌入式/国产OS等

一、前言 首先泼一盆冷水,在不同的电脑上实现完完全全的帧同步理论上是不可能的,市面上所有号称帧同步的播放器,同一台电脑不同拼接视频可以通过合并成一张图片来绘制实现完完全全的帧同步,不同电脑,受限于网络的延迟…...

hhdb数据库介绍(10-33)

管理 数据归档 归档记录查询 功能入口:“管理->数据归档->归档记录查询” 需要确保配置的归档用户对数据归档规则所在的逻辑库具备CREATE权限,以及对原数据表具有所有权限。 清理归档数据 (一)功能入口:“…...

UE4_材质节点_有关距离的_流体模拟

一、材质节点介绍: 特别注意:距离场需要独立显卡支持。 1、什么是距离场? 想象一下空间中只有两个实体, 一个球,一个圆柱. 空间由无数个点组成, 取其中任何一个点, 比如,它跟球面的最近距离是3, 跟圆柱面的最近距离是2, 那么这个点的值就…...

SpringBoot集成 SpringDoc (SpringFox 和 Swagger 的升级版)

阅读 SpringDoc 官网 - Migrating from SpringFox 只需要导入以下一个依赖即可&#xff1a; <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.7.0</version>…...

分布式推理框架 xDit

1. xDiT 简介 xDiT 是一个为大规模多 GPU 集群上的 Diffusion Transformers&#xff08;DiTs&#xff09;设计的可扩展推理引擎。它提供了一套高效的并行方法和 GPU 内核加速技术&#xff0c;以满足实时推理需求。 1.1 DiT 和 LLM DiT&#xff08;Diffusion Transformers&am…...

《Vue零基础入门教程》第十七课:侦听器

往期内容 《Vue零基础入门教程》第九课&#xff1a;插值语法细节 《Vue零基础入门教程》第十课&#xff1a;属性绑定指令 《Vue零基础入门教程》第十一课&#xff1a;事件绑定指令 《Vue零基础入门教程》第十二课&#xff1a;双向绑定指令 《Vue零基础入门教程》第十三课&…...

【人工智能-基础】SVM中的核函数到底是什么

文章目录 支持向量机(SVM)中的核函数详解1. 什么是核函数?核函数的作用:2. 核技巧:从低维到高维的映射3. 常见的核函数类型3.1 线性核函数3.2 多项式核函数3.3 高斯径向基函数(RBF核)4. 总结支持向量机(SVM)中的核函数详解 支持向量机(SVM,Support Vector Machine)…...

RoBERTa- 稳健优化的 BERT 预训练模型详解

一、引言 自 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;问世&#xff0c;预训练语言模型在自然语言处理&#xff08;NLP&#xff09;领域掀起革命浪潮&#xff0c;凭卓越表现大幅刷新诸多任务成绩。RoBERTa 承继 BERT 架构&#x…...

20.(开发工具篇github)Git上次超过100M单文件

1:安装lfs git lfs install 2: 撤销所有更改&#xff08;包括未暂存的更改&#xff09; git reset --hard 3:查找大于100M的文件 find ./ -size 100M 4:加入到 track git lfs track “./data/geo_tif_zzjg/2023年_种植结构影像.tif” git lfs track “./data/geo_tif_zz…...

Redis使用场景-缓存-缓存击穿

前言 之前在针对实习面试的博文中讲到Redis在实际开发中的生产问题&#xff0c;其中缓存穿透、击穿、雪崩在面试中问的最频繁&#xff0c;本文加了图解&#xff0c;希望帮助你更直观的了解缓存击穿&#x1f600; &#xff08;放出之前写的针对实习面试的关于Redis生产问题的博…...

uniapp Electron打包生成桌面应用exe文件

1.uniapp Electron打包生成桌面应用exe文件 随着跨平台开发的需求日益增长,UniApp 成为了开发者们的首选之一。通过 UniApp,你可以使用 Vue.js 的语法结构和组件系统来构建原生应用、Web 应用甚至是桌面应用。本文将详细介绍如何使用 UniApp 将你的项目打包成 Windows 桌面端…...

【机器学习】Sigmoid函数在深层神经网络中存在梯度消失问题,如何设计一种改进的Sigmoid激活函数,既能保持其概率预测优势,又能避免梯度消失?

为了解决 Sigmoid 函数在深层神经网络中的梯度消失问题&#xff0c;可以设计一种改进的 Sigmoid 激活函数&#xff0c;使其同时具备以下特性&#xff1a; 减缓梯度消失问题&#xff1a;避免在输入值远离零时梯度趋于零的问题。保持概率预测能力&#xff1a;保留 Sigmoid 的单调…...

SpringBoot中实现EasyExcel实现动态表头导入(完整版)

前言 最近在写项目的时候有一个需求&#xff0c;就是实现动态表头的导入&#xff0c;那时候我自己也不知道动态表头导入是什么&#xff0c;查询了大量的网站和资料&#xff0c;终于了解了动态表头导入是什么。 一、准备工作 确保项目中引入了处理 Excel 文件的相关库&#xff…...

前端用到的一些框架

拖拽框架&#xff1a;Vue.Draggable Vue.Draggable是一款基于Sortable.js拖拽插件 官网&#xff1a;https://github.com/SortableJS/Vue.Draggable 分屏插件&#xff1a;fullPage.js fullPage.js 是一个基于 jQuery 的插件&#xff0c;它能够很方便、很轻松的制作出全屏网站…...

“量子跃迁与数据织网:深入探索K最近邻算法在高维空间中的优化路径、神经网络融合技术及未来机器学习生态系统的构建“

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…...

10个Word自动化办公脚本

在日常工作和学习中&#xff0c;我们常常需要处理Word文档&#xff08;.docx&#xff09;。 Python提供了强大的库&#xff0c;如python-docx&#xff0c;使我们能够轻松地进行文档创建、编辑和格式化等操作。本文将分享10个使用Python编写的Word自动化脚本&#xff0c;帮助新…...

【青牛科技】D35摄氏温度传感器芯片,低功耗,静态工作电流小于60 μA

概述&#xff1a; D35是基于模拟电路的一种基本摄氏温度传感器&#xff0c;其作用是将感测的环境温度/物体温度精确的以电压的形式输出&#xff0c;且输出电压与摄氏温度成线性正比关系&#xff0c;转换公式为Vo0 10 mV / ℃*T&#xff08;℃&#xff09;&#xff0c;0C时输出为…...

无分类编址的IPv4地址

/20含义&#xff1a;前20比特位为网络号&#xff0c;后面32-2012为主机号 路由聚合&#xff1a;找共同前缀 所有可分配地址的主机都能接收广播地址&#xff0c;...

LeetCode - #150 逆波兰表达式求值

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅&#xff08;Netflix 增长黑客&#xff0c;《iOS 面试之道》作者&#xff0c;ACE 职业健身教练。&#xff09;的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…...

如何避免数据丢失:服务器恢复与预防策略

在当今数字时代&#xff0c;数据对于个人和企业来说都至关重要。数据丢失可能会导致严重的财务损失、业务中断甚至法律责任。因此&#xff0c;采取措施防止数据丢失至关重要。本文将讨论服务器数据丢失的常见原因以及如何防止数据丢失的有效策略。 服务器数据丢失的常见原因 服…...

pytorch中model.eval的理解

在复现simsam的过程中&#xff0c;看到在线性评估部分的训练函数中设置了model.eval,不太理解&#xff0c;印象中一直觉得&#xff0c;model.eval会影响梯度的回传&#xff0c;这里来拨乱反正一下。 事实上&#xff0c;model.eval()主要影响 BatchNorm 和 Dropout 层的行为&am…...

【AI+教育】一些记录@2024.11.19-11.25

通向AGI之路&#xff1a;大型语言模型&#xff08;LLM&#xff09;技术精要 https://zhuanlan.zhihu.com/p/597586623 在Bert和GPT模型出现之前&#xff0c;NLP领域流行的技术是深度学习模型&#xff0c;而NLP领域的深度学习&#xff0c;主要依托于以下几项关键技术&#xff1…...

CSS变量用法及实践

目录 一、基本用法 1.1、定义变量 1.2、使用变量 1.3 、修改变量的值 二、命名规范 2.1、使用有意义的名称 2.2、使用命名空间 三、变量值类型 3.1、如果变量值是一个字符串&#xff0c;可以与其他字符串拼接&#xff0c;例如&#xff1a; 3.2、 如果变量值是数值&a…...

【Python网络爬虫笔记】8- (BeautifulSoup)抓取电影天堂2024年最新电影,并保存所有电影名称和链接

目录 一. BeautifulSoup的作用二. 核心方法介绍2.1 构造函数2.2 find()方法2.3 find_all()方法2.4 select()方法 三. 网络爬虫中使用BeautifulSoup四、案例爬取结果 一. BeautifulSoup的作用 解析HTML/XML文档&#xff1a;它可以将复杂的HTML或XML文本转换为易于操作的树形结构…...

STM32 ADC --- 知识点总结

STM32 ADC — 知识点总结 文章目录 STM32 ADC --- 知识点总结cubeMX中配置注解单次转换模式、连续转换模式、扫描模式单通道采样的情况单次转换模式&#xff1a;连续转换模式&#xff1a; 多通道采样的情况禁止扫描模式&#xff08;单次转换模式或连续转换模式&#xff09;单次…...

使用PHP脚本实现GitHub API搜索与数据库同步

在现代软件开发中&#xff0c;自动化数据收集和同步是提高效率的关键。今天&#xff0c;我将分享一个我最近开发的PHP脚本&#xff0c;它能够自动从GitHub API搜索特定关键词的仓库&#xff0c;并将这些数据同步到MySQL数据库中。这个过程不仅涉及到API调用和数据处理&#xff…...

使用docker-compese部署SFTPGo详解

官网&#xff1a;SFTP & FTP as a Managed Service (SaaS) and On-premise 一、SFTPGo简介 SFTPGo 是一款功能强大的文件传输服务器软件。它支持多种协议&#xff08;SFTP、SCP、FTP/S、WebDAV、HTTP/S&#xff09;和多个存储后端。 借助 SFTPGo&#xff0c;您可以利用本地…...

JavaScript根据数据生成柱形图

分析需求 // 定义一个数组来存储四个季度的数据 dataArray = []// 循环4次,获取用户输入的数据并存储到数组中 for i from 0 to 3// 获取用户输入的数据inputData = 获取用户输入的第(i + 1)季度的数据// 将数据存入数组dataArray[i] = inputData// 遍历数组,根据数据生成柱…...

Android笔记【12】脚手架Scaffold和导航Navigation

一、前言 学习课程时&#xff0c;对于自己不懂的点的记录。 对于cy老师第二节课总结。 二、内容 1、PPT介绍scaffold 2、开始代码实操 先新建一个screen包&#xff0c;写一个Homescreen函数&#xff0c;包括四个页面。 再新建一个compenent包&#xff0c;写一个displayText…...

VirtualBox注册已有虚拟机:未能打开位于虚拟电脑E_INVALIDARG (0X80070057)

错误如下 解决办法1 产生虚拟机的机器&#xff0c;与当前使用机器不兼容。建议在当前机器重新产生虚拟机。比如我家里电脑是WIN7&#xff0c;公司电脑是WIN11。 原来的虚拟机内容&#xff0c;找老机器导出。 解决办法2&#xff08;存疑&#xff09; 搜索到一个说法&#xf…...

开发中使用UML的流程_08 PIM-4:定义操作及方法

目录 1、序列图概述 2、序列图调用方式 3、创建消息与销毁消息 4、几项建议 1、序列图概述 在PIM-4中&#xff0c;系统分析员可以用序列图来表达&#xff0c;系统内部一群对象合力完成某一个系统用例时&#xff0c;执行期间的交互情形。之后&#xff0c;序列图可能通过设计…...

软件设计 —— 检测按键单击、多击、长按或组合动作

目 录 按键单一动作识别按键组合动作识别 按键单一动作识别 带有按键的作品设计时&#xff0c;按键动作检测是必不可少的&#xff0c;如何判断按键是单击、双击、三击和长按动作呢&#xff1f; 1、定时器定时一个10ms周期 2、把按键检测函数放到这个周期内执行&#xff0c;即…...

【GPT】主要影响代谢的因素

代谢的快慢受到多种因素的影响&#xff0c;包括遗传、生活习惯和健康状况等。以下是主要影响代谢的因素&#xff1a; 1. 年龄 影响&#xff1a;年龄增长会导致基础代谢率&#xff08;BMR&#xff09;逐渐降低&#xff0c;这是因为随着年龄增加&#xff0c;肌肉量减少&#xff…...

LLM Agents can Autonomously Hack Websites 论文阅读

paper:LLM Agents can Autonomously Hack Websites abstract:近年来,大型语言模型(llm)已经变得越来越有能力,现在可以与工具交互(例如,调用函数),读取文档,并递归地调用自己。因此,这些llm现在可以作为代理自主运行。随着这些代理能力的提高,最近的工作推测了LLM代…...

STM32标准库-FLASH

FLASH模仿EEPROM STM32本身没有自带EEPROM&#xff0c;但是自带了FLASH存储器。 STM32F103ZET6自带 1M字节的FLASH空间&#xff0c;和 128K64K的SRAM空间。 STM32F4 的 SPI 功能很强大&#xff0c;SPI 时钟最高可以到 37.5Mhz&#xff0c;支持 DMA&#xff0c;可以配置为 SPI协…...