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;

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【阅读记录-章节5】Build a Large Language Model (From Scratch)

目录 5. Pretraining on unlabeled data5.1 Evaluating generative text models5.1.1 Evaluating generative text models5.1.2 Calculating the text generation loss评估模型生成文本的质量 5.1.3 Calculating the training and validation set losses 5.2 Training an LLM5.…

【JMX JVM监控】Prometheus读取Trino的JMX数据到Grafana展示

trino运行拥有自己的UI来监控资源使用率,但领导需要更好的展示做些图表出来放到PPT里面,选择了用prometheus收集数据和grafana来展示图表。本文就trino的数据采集和展示做记录,对于prometheus和grafana的安装不做介绍。 首先要采集trino的数据…

网络安全框架及模型-PPDR模型

网络安全框架及模型-PPDR模型 概述: 为了有效应对不断变化的网络安全环境,人们意识到需要一种综合性的方法来管理和保护网络安全。因此,PPDR模型应运而生。它将策略、防护、检测和响应四个要素结合起来,提供了一个全面的框架来处理网络安全问题。 工作原理: PPDR模型的…

渗透测试之Web基础之Linux病毒编写——泷羽sec

声明: 学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章。本文只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频 (bilibili.com)https://space.bilibili.com/350329294 导读: 时刻…

Qt几何数据类型:QLine类型详解(基础向)

QLine类 QLine 是 Qt 提供的一个简单的几何类,适用于整数精度的线段表示,用于表示二维空间中的直线段。它主要用于计算和绘图中的基本几何处理。 如果需要更复杂的功能(如角度计算或长度的浮点表示),可以转为 QLineF。…

Ubuntu22.04上kdump和crash的使用

0.前言 1.引用: 解决Linux内核问题实用技巧之 - Crash工具结合/dev/mem任意修改内存-腾讯云开发者社区-腾讯云 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 ubuntu内核转储分析——kdump和crash的下载和使用_ubuntu kdump-CSDN博客 U…

构建自己的docker的ftp镜像

aarch64系统可运行的docker镜像 构建自己的vsftpd镜像,我是在windows系统下的docker desktop中构建运行于aarch64 GNU/Linux系统的ftp镜像。 系统环境: Welcome to Debian GNU/Linux with Linux x.x.x dockerfile FROM ubuntu:latestUSER rootRUN ap…

【北京迅为】iTOP-4412全能版使用手册-第三十二章 网络通信-TCP套字节

iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、…

JavaScript(JS)的对象

目录 1.array 数组对象 2.String 字符串对象 3.JSON 对象(数据载体,进行数据传输) 4.BOM 浏览器对象 5.DOM 文档对象(了解) 1.array 数组对象 定义方式1:var 变量名 new Array(元素列表); 定义方式…

Cannot resolve symbol ‘ActivityThread‘ | Android 语法

背景 ActivityThread 是 Android 系统内部使用的一个类,它位于 android.app 包中,但在 Android SDK 的公共 API 中并没有公开。 由于 ActivityThread 是隐藏的内部类,因此在编写单元测试或功能开发时,无法直接引用它。可以使用反射来访问内部 API,或者使用依赖注入的方式…

AI论文速读 | TimeXer:让 Transformer能够利用外部变量进行时间序列预测

题目: TimeXer: Empowering Transformers for Time Series Forecasting with Exogenous Variables 作者:Yuxuan Wang ; Haixu Wu(吴海旭) ; Jiaxiang Dong ; Yong Liu ; Yunzhong Qiu ; Haoran Zhang ; Jianmin Wang(…

Zustand的学习和应用

Zustand 是一个轻量级的状态管理库,适用于 React 应用程序。它以简单易用、高性能和无模板代码的特性受到开发者的喜爱。 https://zustand.docs.pmnd.rs/guides/tutorial-tic-tac-toe 以下是 Zustand 的核心特点和用法简介: Zustand 核心特点 轻量简…

【从零开始的LeetCode-算法】3274. 检查棋盘方格颜色是否相同

给你两个字符串 coordinate1 和 coordinate2,代表 8 x 8 国际象棋棋盘上的两个方格的坐标。 以下是棋盘的参考图 如果这两个方格颜色相同,返回 true,否则返回 false。 坐标总是表示有效的棋盘方格。坐标的格式总是先字母(表示列…

常见问题QA的前端代码

这个的后端代码参见此文 使用语言向量建立常见问题的模糊搜索-CSDN博客https://blog.csdn.net/chenchihwen/article/details/144207262?spm1001.2014.3001.5501 这段代码实现了一个简单的问答页面,页面分为左右两部分,左侧用于展示对话记录&#xff0c…

互联网 Java 面试八股文汇总(2025 最新整理)

我分享的这份 Java 后端开发面试总结包含了 JavaOOP、Java 集合容器、Java 异常、并发编程、Java 反射、Java 序列化、JVM、Redis、Spring MVC、MyBatis、MySQL 数据库、消息中间件 MQ、Dubbo、Linux、ZooKeeper、 分布式 &数据结构与算法等 25 个专题技术点,都…

CTF之密码学(密码特征分析)

一.MD5,sha1,HMAC,NTLM 1.MD5:MD5一般由32/16位的数字(0-9)和字母(a-f)组成的字符串 2.sha1:这种加密的密文特征跟MD5差不多,只不过位数是40(sha256:64位;sha512:128位) 3.HMAC:这…

Linux 入门——基本指令2

目录 1. 通配符的使用 1)基本使用 2) 拓展使用 2. cp 文件拷贝 基本使用 3. mv :文件剪切或者文件重命名 4. more 指令 5. less 指令 6. cat ,more , less 指令的区别 7. head 8. tail 9. date 日期,时间相关的指令 1&…

2024年12月3日Github流行趋势

项目名称:Lobe Chat 项目维护者:arvinxx, semantic-release-bot, canisminor1990, lobehubbot, renovate项目介绍:一个开源的、现代化设计的人工智能聊天框架。支持多种AI提供商(OpenAI / Claude 3 / Gemini / Ollama / Qwen / De…

vue2+cesium初始化地图

目录 1、在vue2项目中下载cesium 2、安装loader 3、更改vue.config.js中的配置 4、main.js中引入 5、App.vue中设置样式 6、新建map.vue 其中代码如下: 7、在App.vue中使用Map组件 8、效果展示: 1、在vue2项目中下载cesium npm install cesium 可…

CTF-PWN: WEB_and_PWN [第一届“吾杯”网络安全技能大赛 Calculator] 赛后学习(不会)

附件 calculate.html <!DOCTYPE html> <html lang"en"> <head><!-- 设置字符编码为 UTF-8&#xff0c;支持多语言字符集 --><meta charset"UTF-8"><!-- 设置响应式视图&#xff0c;确保页面在不同设备上自适应显示 --&…