[SQL Statements] 基本的SQL知识 之DDL针对表结构和表空间的基本操作
[SQL Statements] 基本的SQL知识 之DDL针对表结构和表空间的基本操作
什么是数据库的表以及表空间
在MySQL中,一个数据库可以包含多个表,每个表是由若干个列(column)和行(row)组成的。表是存储数据的基本单位,用于组织、管理和存储数据。
MySQL中的表空间(Tablespace)是一个逻辑存储单元,它是由若干个数据文件(data files)组成的。表空间用于存储表和索引数据,每个表和索引都有一个关联的表空间。在MySQL中,每个表和索引都必须属于一个表空间,而每个表空间可以包含多个表和索引。
MySQL中的表空间有两种类型:系统表空间和用户表空间。系统表空间是MySQL内部使用的表空间,包括InnoDB的数据文件和redo log文件。用户表空间是由用户创建的,用于存储用户定义的表和索引数据。
在MySQL中,创建表时可以指定它所属的表空间。如果没有指定表空间,则会使用默认的表空间。
你可以这样理解数据库中的表,可以简单地理解这就是一个excel表格,而表空间就是一个或多个表组成一个表空间。
我们常说的一个表中有多个字段,这个字段其实就表示一列。
如图所示:

其中,表结构规定了这一列存放什么类型的数据,这就涉及到表的设计了。
如何进行表结构设计?
设计的主要步骤如下:
- 确定表的目的和需求:确定表的用途和需求,包括需要存储哪些数据、如何组织数据等方面的内容。
- 确定表的列和数据类型:确定表的列,包括列名、数据类型、长度、是否允许为空等属性。通常需要根据数据的类型和业务需求进行选择。
- 设计表的主键和索引:主键是用于标识表中每个记录的唯一标识符,通常使用自增长整数作为主键。索引可以提高查询性能,通常需要根据查询需求设计相应的索引。
- 设计表的约束:约束用于限制表中数据的取值范围,包括主键约束、唯一约束、非空约束、默认值约束等。
- 设计表之间的关系:如果有多个表需要进行关联,需要确定表之间的关系,包括一对一、一对多和多对多关系。
- 进行数据类型和范式的优化:对于大型和复杂的数据库,需要进行数据类型和范式的优化,以提高性能和减少数据冗余。
- 进行表的命名和注释:为表设置一个有意义的名称,并对表进行适当的注释,以方便后续的管理和维护。
在进行表结构设计时,需要根据具体的业务需求和数据库规模进行调整。同时,需要遵循一定的设计原则,如避免数据冗余、优化数据类型、保持表的一致性和正确性等。
举例
假设我们需要创建一个简单的学生信息管理系统,包括以下两个表:学生信息表和课程成绩表。
- 学生信息表包括以下列:
- 学生ID(student_id):整数类型,作为主键
- 学生姓名(student_name):字符串类型,最大长度为50
- 学生年龄(student_age):整数类型
- 学生性别(student_gender):字符串类型,最大长度为10
- 学生专业(student_major):字符串类型,最大长度为50
- 课程成绩表包括以下列:
- 成绩ID(score_id):整数类型,作为主键
- 学生ID(student_id):整数类型,作为外键关联学生信息表中的学生ID列
- 课程名称(course_name):字符串类型,最大长度为50
- 课程成绩(course_score):浮点数类型
对于学生信息表和课程成绩表之间的关系,我们可以使用一对多关系,即一个学生可以对应多个成绩。在这种情况下,学生信息表中的学生ID列作为主键,课程成绩表中的学生ID列作为外键。同时,我们需要在学生ID列上创建索引,以提高查询性能。
为了遵循设计原则,我们可以将学生姓名、年龄、性别和专业信息拆分成一个独立的表,从而避免数据冗余。此外,我们还可以将学生信息表和课程成绩表拆分成不同的表空间,以便于管理和维护。最后,我们可以为表设置有意义的名称和注释,如学生信息表(students)和课程成绩表(scores),以方便后续的管理和维护。
查看某个数据库中有哪些表
使用show tables;
例如,我在test2数据库下查看我有哪些表

数据类型
在去创建表之前,我们需要知道mysql中有哪些数据类型,以方便创建指定的字段时使用正确的数据类型进行存储
数字类型
数字类型数据主要包括两种,和其他编程语言的数据类型一样,分为精确数和浮点数。
这每种数据类型均可以指定参数,用来表示这个数有多长
精确数
又分为两种:整数(integer) 和 定点数(Fixed-Point)
Integer类型 - INTEGER, INT, SMALLINT, TINYINT,MEDIUMINT, BIGINT
| 类型 | 字节长度 | 最小值 | 无符号情况下最小值 | 最大值 | 无符号情况下最大值 |
|---|---|---|---|---|---|
| TINYINT | 1 | -128 | 0 | 127 | 255 |
| SMALLINT | 2 | -32768 | 0 | 32767 | 65535 |
| MEDIUMINT | 3 | -8388608 | 0 | 8388607 | 16777215 |
| INT 最常用 | 4 | -2147483648 | 0 | 2147483647 | 4294967295 |
| BIGINT | 8 | -2^63 | 0 | 2^63 -1 | 2^64 -1 |
定点数据 - DECIMAL, NUMERIC
存在这种固定的数据是很有必要的,在需要保持精确度很高的情况下就得用到这种类型,例如用户的金钱余额、交易金额等数据,就必须要保持极高的数据准确的。对于这种数据采用浮点显然不合适,因此需要用到定点数据
在MySQL里面,NUMERIC类型的实现就是DECIMAL.
DECIMAL:可以指定 精度和小数位
例如:对于薪资(salary)这一列,设置精度为6,小数位为2的数据类型
salary DECIMAL(6,2) 这意味着该字段的数据存储范围是 -9999.99 到 9999.99
标准SQL中的 DECIMAL(M) 等价于 DECIMAL(M,0) ,MySQL支持这两种写法
浮点类型 - FLOAT, DOUBLE
和其他编程语言的一样,表示的数据是一个近似值,没有特别特别要求精确的小数就用这种类型
FLOAT:单精度 4byte
DOUBLE: 双精度 8byte
位值类型 - BIT
用来存储1位的值 范围1~64
对于上述数据类型,最容易出现的问题便是,超出范围和溢出
当MySQL将一个值存储在列数据类型的允许范围之外的数字列中时,该结果取决于当时有效的SQL模式:
- 如果启用了严格的SQL模式,则MySQL将拒绝带有错误的超出范围的值,并且按照SQL标准,插入将失败。
- 如果没有启用限制性模式,MySQL会将该值剪辑到列数据类型范围的适当端点,并存储结果值。
当将超出范围的值分配给一个整数列时,MySQL将存储表示列数据类型范围的相应端点的值。
其实说实话,一般的解决方案就是,修改该列的数据类型,存得更大更多一点。
日期和时间类型
表示日期和时间的数据类型如下:
DATE, TIME, DATETIME,TIMESTAMP, YEAR
在使用日期和时间类型时,请记住以下一般注意事项:
- MySQL以标准输出格式检索给定日期或时间类型的值,但它试图解释您提供的输入值的各种格式(例如,当您指定要分配给日期或时间类型或与日期或时间类型进行比较的值时)。我们期望您提供有效的值。如果您使用其他格式的值,则可能会出现不可预测的结果。
- 尽管MySQL尝试以几种格式解释值,但必须始终给出日期部分 year-month-day 顺序,而不是其他地方的 month-day-year 或 day-month-year 顺序,将其他顺序的字符串转换为年-月-日的顺序,可以使用 STR_TO_DATE() 方法
- 年份不要只用后两位代替,因为无法知道你到底是1999年还是2099年。虽然这种存储是可以的,但极度不建议。
- 默认情况下,当MySQL遇到一个日期或时间类型的值超出范围或对该类型无效时,它会将该值转换为该类型的“零”值。
- 通过将SQL模式设置为适当的值,您可以更准确地指定您希望MySQL支持的日期类型。
- MySQL允许在DATE 或DATETIME列中存储日期或月和日期为零的日期。比如在你不需要确切知道出生日期的时候,只需要知道年月时,可以存储’1998-02-00’,但这样的数据就不要拿来进行运算了。
- MySQL允许将“0000-00-00”的“0”值存储为“虚拟日期”。在某些情况下,这比使用NULL值更方便,并且使用更少的数据和索引空间。如要不允许存“0000-00-00”,请启用NO_ZERO_DATE模式。
- ‘ZERO’在走 Connector/ODBC 的时候会自动转化为NULL
ZERO数据:
| 日期类型 | 零值(你也可以通过这个零值知道存储的格式) |
|---|---|
| DATE | 0000-00-00 |
| TIME | 00:00:00 |
| DATETIME | 0000-00-00 00:00:00 |
| TIMESTAMP | 0000-00-00 00:00:00 |
| YEAR | 0000 |
datetime和timestamp区别:
datetime范围是1000-01-01 00:00:00.000000 到 9999-12-31 23:59:59.999999
timestamp范围是 1970-01-01 00:00:01.000000 到 2038-01-19 03:14:07.999999
字符和字符串类型数据
CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM, 以及SET
char 和 varchar
两者的差别在于存储和检索方式不同,在最大长度和是否保留尾随空间的方面也不同
| 要存储的值 | char(4) | 存储空间 | varchar(4) | 存储空间 |
|---|---|---|---|---|
| ‘’ | ’ ’ | 4byte | ‘’ | 1byte |
| ‘ab’ | 'ab ’ | 4byte | ‘ab’ | 3byte |
| ‘abcd’ | ‘abcd’ | 4byte | ‘abcd’ | 5byte |
| ‘abcdefghijkklm’ | ‘abcd’ | 4byte | ‘abcd’ | 5byte |
char类型: 长度 0~255
varchar类型:长度 0~65535
BINARY 和 VARBINARY
这两者和char varchar很像,这个存储的是 字节字符串 而不是 字符串。也就是说它们有二进制字符集、排序比较等方式
而且最大长度也对应相同
blob 和 text
BLOB是一个二进制的大对象,它可以保存可变量的数据。
blob有四个类型: tinyblob、blob、mebiumblob、longblob
text是MySQL对Blob类型的具体实现,四个类型不同就在于对最大的数据值支持情况不同
也就是说:
text对应的也有四个类型:tinytext、text、mebiumtext、longtext
Enum
ENUM是一个字符串对象,其值从在表创建时在列规范中明确枚举的允许值列表中选择。
比如
ENUM('Mercury', 'Venus', 'Earth')
每个值对应的索引如下:
| 值 | 索引 |
|---|---|
| NULL | NULL |
| ‘’ | 0 |
| ‘Mercury’ | 1 |
| ‘Venus’ | 2 |
| ‘Earth’ | 3 |
SET
SET是一个字符串对象,它可以有零个或多个值,每个值都必须从创建表时指定的允许值列表中选择。
一个SET列最多可以有64个不同的成员
创建表
-- 直接创建表
create [Temporary] table [if not exists] 表名
(建表定义, ...) [表选项] [分区选项]-- 通过一个查询表达式创建表
create [Temporary] table [if not exists] 表名
[(建表定义, ...)] [表选项] [分区选项] [as] 查询表达式-- 通过一个旧表创建
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 表名
{ like 旧表名| (like 旧表名) }
将创建一个具有给定名称的表。您必须具有对该表的创建权限。默认情况下,将使用InnoDB存储引擎在默认数据库中创建表。如果该表存在、没有默认数据库或该数据库不存在,则会发生错误。
在创建表时,您可以使用 TEMPORARY关键字。临时表仅在当前会话中可见,并且在会话关闭时会自动删除。
使用CREATE TABLE ... LIKE,根据另一个表的定义创建一个空表,包括在原始表中定义的任何列属性和索引
-
建表定义:
主要是指创建表中的每个字段 通过
字段名 字段定义进行创建 -
字段定义:
字段定义中又主要是指定义字段的类型,除此之外,还可以定义字段是否为空,默认值,是否自增,是否是外键,是否是主键,注释信息等
数据类型 [not null | null] [default (值)] [auto_increment] [unique [key]] [primary [key]] [comment '注释信息'] -
表选项:
用来设置表的属性,比如存储引擎,字符集,压缩方式等

-
分区选项:

举例
- 直接创建表的示例:
CREATE TABLE IF NOT EXISTS my_table (id INT PRIMARY KEY,name VARCHAR(50),age INT,address VARCHAR(100)
) CHARSET=utf8mb4;
该语句创建一个名为 my_table 的表,有四个列,分别为 id、name、age 和 address,其中 id 是主键。存储引擎为 InnoDB,字符集为 utf8mb4。
- 通过一个查询表达式创建表的示例:
CREATE TEMPORARY TABLE IF NOT EXISTS my_temp_table AS
SELECT name, age, address FROM my_table WHERE age >= 18;
该语句创建一个名为 my_temp_table 的临时表,列名为 name、age 和 address,与 my_table 中对应列的数据类型相同,数据来自于 my_table 中 age 大于等于 18 的记录。
- 通过一个旧表创建的示例:
CREATE TABLE IF NOT EXISTS my_new_table LIKE my_table;
该语句创建一个名为 my_new_table 的表,与 my_table 的结构完全一致,但不包括索引和数据。
修改表
alter table 表名
[修改操作,...]
alter table 将会更改表的结构,例如,可以添加或删除列、创建或销毁索引、更改现有列的类型,或重命名列或表本身。
举例说明
- 添加列:
ALTER TABLE my_table ADD COLUMN email VARCHAR(50) AFTER address;
该语句在 my_table 表中添加一个名为 email 的列,数据类型为 VARCHAR(50),在 address 列之后。
- 修改列:
ALTER TABLE my_table MODIFY COLUMN age INT UNSIGNED NOT NULL DEFAULT 0;
该语句将 my_table 表中的 age 列修改为无符号整数类型,非空且默认值为 0。
- 删除列:
ALTER TABLE my_table DROP COLUMN address;
该语句删除 my_table 表中的 address 列。
- 添加主键:
ALTER TABLE my_table ADD PRIMARY KEY (id);
该语句在 my_table 表中添加一个名为 id 的主键。
- 添加外键:
ALTER TABLE orders ADD CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES customers(id);
该语句在 orders 表中添加一个名为 fk_customer_id 的外键,引用 customers 表中的 id 列。
- 添加索引:
ALTER TABLE my_table ADD INDEX idx_name (name);
该语句在 my_table 表中为 name 列添加一个名为 idx_name 的普通索引。
- 删除索引:
ALTER TABLE my_table DROP INDEX idx_name;
该语句删除 my_table 表中名为 idx_name 的索引。
- 更改表名:
ALTER TABLE my_table RENAME TO new_table;
该语句将 my_table 表的名称更改为 new_table。
这些操作只是 ALTER TABLE 语句的一部分,实际使用时可以根据需要选择相应的操作。
删除表
drop [temporary] table [if exists] 表名[,表名...] [restrict|cascade]
这个操作将会删除一个或者多个表
举例
- 删除表:
DROP TABLE my_table;
该语句将 my_table 表从数据库中删除。
- 判断表是否存在:
DROP TABLE IF EXISTS my_table;
该语句先判断 my_table 表是否存在,如果存在则删除,否则不执行任何操作。
- 删除表的同时删除关联的索引:
DROP TABLE my_table CASCADE;
该语句将 my_table 表从数据库中删除,并删除与其关联的所有索引。
- 删除表的同时删除关联的触发器:
DROP TABLE my_table CASCADE CONSTRAINTS;
该语句将 my_table 表从数据库中删除,并删除与其关联的所有索引和触发器。
一个安全的删表方式
-- 创建备份表并复制数据
CREATE TABLE my_table_backup LIKE my_table;
INSERT INTO my_table_backup SELECT * FROM my_table;-- 删除原表
DROP TABLE my_table;-- 如果删除了错误的表,可以使用备份表恢复数据
-- INSERT INTO my_table SELECT * FROM my_table_backup;-- 如果不再需要备份表,可以删除
-- DROP TABLE my_table_backup;
联的所有索引。
- 删除表的同时删除关联的触发器:
DROP TABLE my_table CASCADE CONSTRAINTS;
该语句将 my_table 表从数据库中删除,并删除与其关联的所有索引和触发器。
一个安全的删表方式
-- 创建备份表并复制数据
CREATE TABLE my_table_backup LIKE my_table;
INSERT INTO my_table_backup SELECT * FROM my_table;-- 删除原表
DROP TABLE my_table;-- 如果删除了错误的表,可以使用备份表恢复数据
-- INSERT INTO my_table SELECT * FROM my_table_backup;-- 如果不再需要备份表,可以删除
-- DROP TABLE my_table_backup;
相关文章:
[SQL Statements] 基本的SQL知识 之DDL针对表结构和表空间的基本操作
[SQL Statements] 基本的SQL知识 之DDL针对表结构和表空间的基本操作 什么是数据库的表以及表空间 在MySQL中,一个数据库可以包含多个表,每个表是由若干个列(column)和行(row)组成的。表是存储数据的基本…...
Git版本控制工具(详解)
Git版本控制工具 Git常见命令速查表 集中式版本控制 cvs和svn都是属于集中式版本控制系统 他们的主要特点是单一的集中管理服务器 保存所有文件的修订版本协同开发人员通过客户端连接到这台服务器 取出最新的文件或者提交更新 优点每个人都可以在一定程度上看到项目中的其他…...
408考研计算机之计算机组成与设计——知识点及其做题经验篇目2:指令系统
今天我们来讲一讲指令系统里面的知识点以及做题技巧 1、定义 考点1:指令定义 指令是指示计算机执行某种操作的命令,一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。指令系统是指令集体系结构ISA中最核心的部分,ISA…...
Java语法中的方法引用::是个什么鬼?
1.函数式接口 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法(通俗来说就是只有一个方法要去被实现,因此我们也能通过这个去动态推断参数类型),但是可以拥有多个非抽象方法的接口。函数式接…...
【使用vue init和vue create的区别以及搭建vue项目的教程】
vue init 是vue-cli2.x的初始化方式,可以使用github上面的一些模板来初始化项目 webpack是官方推荐的标准模板名 使用方式:vue init webpack 项目名称 例如使用github上面electron-vue的模板使用方式:vue init electron-vue 项目名称教程目…...
二、HTTP协议02
文章目录一、HTTP状态管理Cookie和Session二、HTTP协议之身份认证三、HTTP长连接与短连接四、HTTP中介之代理五、HTTP中介之网关六、HTTP之内容协商七、断点续传和多线程下载一、HTTP状态管理Cookie和Session HTTP的缺陷无状态。Cookie和Session就用来弥补这个缺陷的。 Cooki…...
免费Api接口汇总(亲测可用,可写项目)
免费Api接口汇总(亲测可用)1. 聚合数据2. 用友API3. 天行数据4. Free Api5. 购物商城6. 网易云音乐API7. 疫情API8. 免费Api合集1. 聚合数据 https://www.juhe.cn/ 2. 用友API http://iwenwiki.com/wapicovid19/ 3. 天行数据 https://www.tianapi.com…...
12.并发编程
1.并发并发:逻辑流在时间时重叠构造并发程序:进程:每个逻辑控制流是一个进程,由内核调度和维护进程有独立的虚拟地址空间,想要通信,控制流必须使用某种显式的进程间通信机制(IPC)I/O多路复用:程…...
C/C++指针与数组(一)
预备知识 1、数据的存储 2、基本内建类型 1)类型的大小 C offers a flexible standard with some guaranteed minimum sizes, which it takes from C: A short integer is at least 16 bits wide.An int integer is at least as big as short.A long integer is a…...
Android使用移动智能终端补充设备标识获取OAID
官网http://www.msa-alliance.cn/col.jsp?id120首先到官网注册账号,申请下载相关sdk和授权证书2.把 oaid_sdk_x.x.x.aar 拷贝到项目的 libs 目录,并设置依赖,其中x.x.x 代表版本号3.supplierconfig.json 拷贝到项目 assets 目录下࿰…...
极目智能与锐算科技达成战略合作,4D毫米波成像雷达助力智能驾驶落地
近日,智能驾驶方案提供商武汉极目智能技术有限公司(以下简称“极目智能”)宣布与毫米波成像雷达公司锐算(上海)科技有限公司(以下简称“锐算科技”)达成战略合作,双方将合作开发基于…...
OpenCV基础(一)
1.认识图像(彩色图中每一个像素点都包含三个颜色通道RGB,数值范围为0~255,0代表黑色,255代表白色) import cv2 #opencv 读取的格式为BGRimg cv2.imread(cat.png) #读取图像 cv2.imshow(cat, img) #显示图像img&#x…...
pinia 的使用(笔记)
文章目录1. Pinia 与 Vuex 的区别2. pinia 安装与搭建3. pinia 的使用3.1 基本使用3.2 订阅状态3.3 订阅 actions1. Pinia 与 Vuex 的区别 Pinia 是 Vue 的状态管理库,相当于 Vuex 取消了 mutations,取消了 Module 模块化命名空间现在的 pinia 采用的是…...
DolphinDB 机器学习在物联网行业的应用:实时数据异常率预警
数据异常率预警在工业安全生产中是一项重要工作,对于监控生产过程的稳定性,保障生产数据的有效性,维护生产设备的可靠性具有重要意义。随着大数据技术在生产领域的深入应用,基于机器学习的智能预警已经成为各大生产企业进行生产数…...
新建vite+vue3+ts项目,以及解决过程中遇到的问题
目录 一、新建vitevue3ts项目 二、解决过程中遇到的问题 解决报错:Module ‘“xx.vue“‘ has no default export. 解决报错:Error [ERR_MODULE_NOT_FOUND]: Cannot find package ‘uuid’ imported from xxx的解决 解决报错:[plugin:vi…...
pyppeteer中文文档
目录 1.命令 2.环境变量 3.Launcher(启动器) 4.浏览器类 5.浏览器上下文类 6.页面类 7.Worker 类 8.键盘类 9.鼠标类 10.Tracing类 11.对话框类 12.控制台消息类 13.Frame 类 14.执行上下文类 15.JSHandle 类 16.元素句柄类…...
(二十四)操作系统-吸烟者问题
文章目录一、问题描述二、问题分析1.关系分析2.整理思路3.设置信号量三、实现四、总结一、问题描述 假设一个系统有三个抽烟者进程和一个供应者进程。每个抽烟者不停地卷烟并抽掉它,但是要卷起并抽掉一支烟,抽烟者需要…...
ReentranLock(可重入锁)
一、ReentranLock ReentranLock属于JUC并发工具包下的类,相当于 synchronized具备如下特点 ● 可中断 ● 可以设置超时时间 ● 可以设置为公平锁(防止线程出现饥饿的情况) ● 支持多个条件变量 与 synchronized一样,都支持可重…...
Kafka 入门 (一)
Kafka 入门(一) Apache Kafka起源于LinkedIn,后来于2011年成为开源Apache项目,然后于2012年成为First-class Apache项目。Kafka是用Scala和Java编写的。 Apache Kafka是基于发布订阅的容错消息系统。 它是快速,可扩展…...
linux内核开发入门二(内核KO模块介绍、开发流程以及注意事项)
linux内核开发入门二(内核KO模块介绍、开发流程以及注意事项) 一、什么是内核模块 内核模块:ko模块(Kernel Object Module)是Linux内核中的可加载模块,它可以动态地向内核添加功能。在运行时,可…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
“Reactive Stream Processing in Industrial IoT using DDS and Rx” 是指在工业物联网(IIoT)场景中,结合 DDS(Data Distribution Service) 和 Rx(Reactive Extensions) 技术,实现 …...
