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

[SQL Statements] 基本的SQL知识 之DDL针对表结构和表空间的基本操作

[SQL Statements] 基本的SQL知识 之DDL针对表结构和表空间的基本操作

什么是数据库的表以及表空间

在MySQL中,一个数据库可以包含多个表,每个表是由若干个列(column)和行(row)组成的。表是存储数据的基本单位,用于组织、管理和存储数据。

MySQL中的表空间(Tablespace)是一个逻辑存储单元,它是由若干个数据文件(data files)组成的。表空间用于存储表和索引数据,每个表和索引都有一个关联的表空间。在MySQL中,每个表和索引都必须属于一个表空间,而每个表空间可以包含多个表和索引。

MySQL中的表空间有两种类型:系统表空间和用户表空间。系统表空间是MySQL内部使用的表空间,包括InnoDB的数据文件和redo log文件。用户表空间是由用户创建的,用于存储用户定义的表和索引数据。

在MySQL中,创建表时可以指定它所属的表空间。如果没有指定表空间,则会使用默认的表空间。

你可以这样理解数据库中的表,可以简单地理解这就是一个excel表格,而表空间就是一个或多个表组成一个表空间。

我们常说的一个表中有多个字段,这个字段其实就表示一列。

如图所示:

在这里插入图片描述

其中,表结构规定了这一列存放什么类型的数据,这就涉及到表的设计了。

如何进行表结构设计?

设计的主要步骤如下:
  1. 确定表的目的和需求:确定表的用途和需求,包括需要存储哪些数据、如何组织数据等方面的内容。
  2. 确定表的列和数据类型:确定表的列,包括列名、数据类型、长度、是否允许为空等属性。通常需要根据数据的类型和业务需求进行选择。
  3. 设计表的主键和索引:主键是用于标识表中每个记录的唯一标识符,通常使用自增长整数作为主键。索引可以提高查询性能,通常需要根据查询需求设计相应的索引。
  4. 设计表的约束:约束用于限制表中数据的取值范围,包括主键约束、唯一约束、非空约束、默认值约束等。
  5. 设计表之间的关系:如果有多个表需要进行关联,需要确定表之间的关系,包括一对一、一对多和多对多关系。
  6. 进行数据类型和范式的优化:对于大型和复杂的数据库,需要进行数据类型和范式的优化,以提高性能和减少数据冗余。
  7. 进行表的命名和注释:为表设置一个有意义的名称,并对表进行适当的注释,以方便后续的管理和维护。

在进行表结构设计时,需要根据具体的业务需求和数据库规模进行调整。同时,需要遵循一定的设计原则,如避免数据冗余、优化数据类型、保持表的一致性和正确性等。

举例

假设我们需要创建一个简单的学生信息管理系统,包括以下两个表:学生信息表和课程成绩表。

  1. 学生信息表包括以下列:
  • 学生ID(student_id):整数类型,作为主键
  • 学生姓名(student_name):字符串类型,最大长度为50
  • 学生年龄(student_age):整数类型
  • 学生性别(student_gender):字符串类型,最大长度为10
  • 学生专业(student_major):字符串类型,最大长度为50
  1. 课程成绩表包括以下列:
  • 成绩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

类型字节长度最小值无符号情况下最小值最大值无符号情况下最大值
TINYINT1-1280127255
SMALLINT2-3276803276765535
MEDIUMINT3-83886080838860716777215
INT 最常用4-2147483648021474836474294967295
BIGINT8-2^6302^63 -12^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数据:

日期类型零值(你也可以通过这个零值知道存储的格式)
DATE0000-00-00
TIME00:00:00
DATETIME0000-00-00 00:00:00
TIMESTAMP0000-00-00 00:00:00
YEAR0000

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')

每个值对应的索引如下:

索引
NULLNULL
‘’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 '注释信息']

  • 表选项:

    用来设置表的属性,比如存储引擎,字符集,压缩方式等

    在这里插入图片描述

  • 分区选项:

    在这里插入图片描述

举例

  1. 直接创建表的示例:
CREATE TABLE IF NOT EXISTS my_table (id INT PRIMARY KEY,name VARCHAR(50),age INT,address VARCHAR(100)
) CHARSET=utf8mb4;

该语句创建一个名为 my_table 的表,有四个列,分别为 idnameageaddress,其中 id 是主键。存储引擎为 InnoDB,字符集为 utf8mb4。

  1. 通过一个查询表达式创建表的示例:
CREATE TEMPORARY TABLE IF NOT EXISTS my_temp_table AS
SELECT name, age, address FROM my_table WHERE age >= 18;

该语句创建一个名为 my_temp_table 的临时表,列名为 nameageaddress,与 my_table 中对应列的数据类型相同,数据来自于 my_tableage 大于等于 18 的记录。

  1. 通过一个旧表创建的示例:
CREATE TABLE IF NOT EXISTS my_new_table LIKE my_table;

该语句创建一个名为 my_new_table 的表,与 my_table 的结构完全一致,但不包括索引和数据。

修改表

alter table 表名
[修改操作,...]

alter table 将会更改表的结构,例如,可以添加或删除列、创建或销毁索引、更改现有列的类型,或重命名列或表本身。

举例说明

  1. 添加列:
ALTER TABLE my_table ADD COLUMN email VARCHAR(50) AFTER address;

该语句在 my_table 表中添加一个名为 email 的列,数据类型为 VARCHAR(50),在 address 列之后。

  1. 修改列:
ALTER TABLE my_table MODIFY COLUMN age INT UNSIGNED NOT NULL DEFAULT 0;

该语句将 my_table 表中的 age 列修改为无符号整数类型,非空且默认值为 0。

  1. 删除列:
ALTER TABLE my_table DROP COLUMN address;

该语句删除 my_table 表中的 address 列。

  1. 添加主键:
ALTER TABLE my_table ADD PRIMARY KEY (id);

该语句在 my_table 表中添加一个名为 id 的主键。

  1. 添加外键:
ALTER TABLE orders ADD CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES customers(id);

该语句在 orders 表中添加一个名为 fk_customer_id 的外键,引用 customers 表中的 id 列。

  1. 添加索引:
ALTER TABLE my_table ADD INDEX idx_name (name);

该语句在 my_table 表中为 name 列添加一个名为 idx_name 的普通索引。

  1. 删除索引:
ALTER TABLE my_table DROP INDEX idx_name;

该语句删除 my_table 表中名为 idx_name 的索引。

  1. 更改表名:
ALTER TABLE my_table RENAME TO new_table;

该语句将 my_table 表的名称更改为 new_table

这些操作只是 ALTER TABLE 语句的一部分,实际使用时可以根据需要选择相应的操作。

删除表

drop [temporary] table [if exists] 表名[,表名...] [restrict|cascade] 

这个操作将会删除一个或者多个表

举例

  1. 删除表:
DROP TABLE my_table;

该语句将 my_table 表从数据库中删除。

  1. 判断表是否存在:
DROP TABLE IF EXISTS my_table;

该语句先判断 my_table 表是否存在,如果存在则删除,否则不执行任何操作。

  1. 删除表的同时删除关联的索引:
DROP TABLE my_table CASCADE;

该语句将 my_table 表从数据库中删除,并删除与其关联的所有索引。

  1. 删除表的同时删除关联的触发器:
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;

联的所有索引。

  1. 删除表的同时删除关联的触发器:
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 目录下&#xff0…...

极目智能与锐算科技达成战略合作,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内核中的可加载模块,它可以动态地向内核添加功能。在运行时,可…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

【机器视觉】单目测距——运动结构恢复

ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛&#xf…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...