【MySQL学习笔记】(五) 表的约束

news2024/10/7 9:16:47

表的约束

  • 1 什么是约束?
  • 2 空属性
  • 3 默认值
  • 4 列描述
  • 5 zerofill
  • 6 主键
  • 7 自增长
  • 8 唯一键
  • 9 外键

1 什么是约束?

约束是一种限制,它通过对表的行或列的数据做出限制,来确保数据的完整性、一致性。

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。

表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,auto_increment,unique key 。

在笔记(三)介绍表的结构中,下图的字段类型,NULL,索引类型,默认值就是约束。
在这里插入图片描述
下面将对各种约束进行介绍。

2 空属性

两个值:null(默认的)和not null(不为空)
数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。

mysql> select null;
+------+
| NULL |
+------+
| NULL |
+------+

1 row in set (0.00 sec)
mysql> select 1+null;
+--------+
| 1+null |
+--------+
|   NULL |
+--------+

1 row in set (0.00 sec)

案例:
创建一个班级表,包含班级名和班级所在的教室。
站在正常的业务逻辑中:
如果班级没有名字,你不知道你在哪个班级
如果教室名字可以为空,就不知道在哪上课
所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这就是“约束”。

mysql> create table myclass(
   -> class_name varchar(20) not null,
   -> class_room varchar(10) not null);
Query OK, 0 rows affected (0.02 sec)
mysql> desc myclass;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| class_name | varchar(20) | NO   |     | NULL   |       |
| class_room | varchar(10) | NO   |     | NULL   |       |
+------------+-------------+------+-----+---------+-------+

//插入数据时,没有给教室数据,插入失败:

mysql> insert into myclass(class_name) values('class1');
ERROR 1364 (HY000): Field 'class_room' doesn't have a default value

3 默认值

默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,
用户可以选择性的使用默认值。

mysql> create table tt10 (
   -> name varchar(20) not null,
   -> age tinyint unsigned default 0,
   -> sex char(2) default '男'

   -> );
Query OK, 0 rows affected (0.00 sec)
mysql> desc tt10;
+-------+---------------------+------+-----+---------+-------+
| Field | Type               | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| name | varchar(20)         | NO   |     | NULL   |       |
| age   | tinyint(3) unsigned | YES |     | 0       |       |
| sex   | char(2)             | YES |     ||       |
+-------+---------------------+------+-----+---------+-------+

默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值

mysql> insert into tt10(name) values('zhangsan');
Query OK, 1 row affected (0.00 sec)
mysql> select * from tt10;
+----------+------+------+
| name     | age | sex |
+----------+------+------+
| zhangsan |    0 ||
+----------+------+------+

注意:只有设置了default的列,才可以在插入值的时候,对列进行省略

案例:
在创建defa表的时,num1的约束设定为NOT NULL DEFAULT 100
看起来可能是冲突了,因为既然不允许为NULL,就一定要有数值,那么后面的DEFAULT 100就没用了。
其实并不是,它们在这里起到一个互补的作用。

mysql> show create table defa \G
*************************** 1. row ***************************
       Table: defa
Create Table: CREATE TABLE `defa` (
  `num1` int(11) NOT NULL DEFAULT '100',
  `num2` int(11) DEFAULT '10'
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> desc defa;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num1  | int(11) | NO   |     | 100     |       |
| num2  | int(11) | YES  |     | 10      |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

先正常插入

mysql> insert into defa(num1,num2) values(200,300);
Query OK, 1 row affected (0.01 sec)

假如num1列想插入NULL的话,是不被允许的,因为被 not null 限制了

mysql> insert into defa(num1,num2) values(NULL,300);
ERROR 1048 (23000): Column 'num1' cannot be null

假如忽略num1,就插入num2,是可以的

mysql> insert into defa(num2) values(300);
Query OK, 1 row affected (0.00 sec)

mysql> select * from defa;
+------+------+
| num1 | num2 |
+------+------+
|  200 |  300 |//正常插入的情况
|  100 |  300 |//忽略num1,默认值是100
+------+------+

上述案例说明了,not null default 这两条语句放在一起并不冲突
当用户主动插入数据时,不能主动插入NULL,如果不插入该条数据,则用默认值。

4 列描述

列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA(数据库管理员)来进行了解。

mysql> create table tt12 (
   -> name varchar(20) not null comment '姓名',
   -> age tinyint unsigned default 0 comment '年龄',
   -> sex char(2) default '男' comment '性别'
   -> );

通过desc查看不到注释信息:

mysql> desc tt12;
+-------+---------------------+------+-----+---------+-------+
| Field | Type               | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| name | varchar(20)         | NO   |     | NULL   |       |
| age   | tinyint(3) unsigned | YES |     | 0       |       |
| sex   | char(2)             | YES |     ||       |
+-------+---------------------+------+-----+---------+-------+

通过show可以看到:

mysql> show create table tt12\G
*************************** 1. row ***************************
       Table: tt12

Create Table: CREATE TABLE `tt12` (
 `name` varchar(20) NOT NULL COMMENT '姓名',
 `age` tinyint(3) unsigned DEFAULT '0' COMMENT '年龄',
 `sex` char(2) DEFAULT '男' COMMENT '性别'

) ENGINE=MyISAM DEFAULT CHARSET=gbk

1 row in set (0.00 sec)

5 zerofill

刚开始学习数据库时,很多人对数字类型后面的长度很迷茫。通过show看看tt3表的建表语句:

mysql> show create table tt3\G
 ***************** 1. row *****************
       Table: tt3
 Create Table: CREATE TABLE `tt3` (
 `a` int(10) unsigned DEFAULT NULL,
 `b` int(10) unsigned DEFAULT NULL

 ) ENGINE=MyISAM DEFAULT CHARSET=gbk
 1 row in set (0.00 sec)

可以看到int(10),这个代表什么意思呢?整型不是4字节码?这个10又代表什么呢?其实没有zerofill这个属性,括号内的数字是毫无意义的。a和b列就是前面插入的数据,如下:

mysql> insert into tt3 values(1,2);
Query OK, 1 row affected (0.00 sec)
mysql> select * from tt3;
 +------+------+
 | a   | b   |
 +------+------+
 |    1 |    2 |
 +------+------+

但是对列添加了zerofill属性后,显示的结果就有所不同了。修改tt3表的属性:

mysql> alter table tt3 change a a int(5) unsigned zerofill;
mysql> show create table tt3\G
*************************** 1. row ***************************
       Table: tt3

Create Table: CREATE TABLE `tt3` (
 `a` int(5) unsigned zerofill DEFAULT NULL,  --具有了zerofill

 `b` int(10) unsigned DEFAULT NULL

) ENGINE=MyISAM DEFAULT CHARSET=gbk

1 row in set (0.00 sec)

对a列添加了zerofill属性,再进行查找,返回如下结果:

mysql> select * from tt3;
+-------+------+
| a     | b   |
+-------+------+
| 00001 |    2 |
+-------+------+

这次可以看到a的值由原来的1变成00001,这就是zerofill属性的作用,如果宽度小于设定的宽度(这里设置的是5),自动填充0。要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是1。为什么是这样呢?我们可以用hex函数来证明。

mysql> select a, hex(a) from tt3;
+-------+--------+
| a     | hex(a) |
+-------+--------+
| 00001 | 1     |
+-------+--------+

可以看出数据库内部存储的还是1,00001只是设置了zerofill属性后的一种格式化输出而已。

注意:在定义int类型时,如果加上zerofill约束,会自动变成unsigned int

mysql> create table test2(num1 int(5) zerofill,num2 int unsigned zerofill);
Query OK, 0 rows affected (0.01 sec)

mysql> desc test2;
+-------+---------------------------+------+-----+---------+-------+
| Field | Type                      | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+-------+
| num1  | int(5) unsigned zerofill  | YES  |     | NULL    |       |
| num2  | int(10) unsigned zerofill | YES  |     | NULL    |       |
+-------+---------------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

定义类型的时候,如果不指定宽度,则int类型默认为11,unsigned int 默认为10。
因为不论是有符号还是无符号,最大值的位数也就10位,而int类型有个负号,所以是宽度为11。

6 主键

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。

这里说一张表最多只能有一个主键,不意外着只能有一个字段被设为主键,可以有多个字段被设为主键,它们都是同一个主键,叫“复合主键”

一个字段被被设为主键案例:

创建表的时候直接在字段上指定主键

mysql> create table tt13 (
-> id int unsigned primary key comment '学号不能为空',
-> name varchar(20) not null);
Query OK, 0 rows affected (0.00 sec)
mysql> desc tt13;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id   | int(10) unsigned | NO   | PRI | NULL   |       | <= key 中 pri表示该字段是主键
| name | varchar(20)     | NO   |     | NULL   |       |
+-------+------------------+------+-----+---------+-------+

主键约束:主键对应的字段中不能重复,一旦重复,操作失败。

mysql> insert into tt13 values(1, 'aaa');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tt13 values(1, 'aaa');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

当表创建好以后但是没有主键的时候,可以再次追加主键

alter table 表名 add primary key(字段列表)

删除主键

alter table 表名 drop primary key;
mysql> alter table tt13 drop primary key;
mysql> desc tt13;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id   | int(10) unsigned | NO   |     | NULL   |       | 
| name | varchar(20)     | NO   |     | NULL   |       |
+-------+------------------+------+-----+---------+-------+

复合主键案例

在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。

mysql> create table tt14(
-> id int unsigned,
-> course char(10) comment '课程代码',
-> score tinyint unsigned default 60 comment '成绩',
-> primary key(id, course) -- id和course为复合主键

-> );
Query OK, 0 rows affected (0.01 sec)
mysql> desc tt14;
+--------+---------------------+------+-----+---------+-------+
| Field | Type               | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| id     | int(10) unsigned   | NO   | PRI | 0       |       | <= 这两列合成主键

| course | char(10)           | NO   | PRI |         |       |
| score | tinyint(3) unsigned | YES |     | 60     |       |
+--------+---------------------+------+-----+---------+-------+
mysql> insert into tt14 (id,course)values(1, '123');
Query OK, 1 row affected (0.02 sec)
mysql> insert into tt14 (id,course)values(1, '123');
ERROR 1062 (23000): Duplicate entry '1-123' for key 'PRIMARY' -- 主键冲突

7 自增长

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

自增长的特点:

任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
自增长字段必须是整数
一张表最多只能有一个自增长

mysql> create table tt21(
   -> id int unsigned primary key auto_increment,
   -> name varchar(10) not null default ''
   -> );
mysql> insert into tt21(name) values('a');
mysql> insert into tt21(name) values('b');
mysql> select * from tt21;
+----+------+
| id | name |
+----+------+
|  1 | a   |
|  2 | b   |
+----+------+

在插入后获取上次插入的 AUTO_INCREMENT 的值(批量插入获取的是第一个值)

mysql > select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
| 2                 |
+------------------+

8 唯一键

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。
关于唯一键和主键的区别:
我们可以简单理解成,主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息出现重复。乍一听好像没啥区别,我们举一个例子

假设一个场景(当然,具体可能并不是这样,仅仅为了帮助大家理解)

比如在公司,我们需要一个员工管理系统,系统中有一个员工表,员工表中有两列信息,一个身份证号码,一个是员工工号,我们可以选择身份号码作为主键。 而我们设计员工工号的时候,需要一种约束:而所有的员工工号都不能重复。 具体指的是在公司的业务上不能重复,我们设计表的时候,需要这个约束,那么就可以将员工工号设计成为唯 一键。一般而言,我们建议将主键设计成为和当前业务无关的字段,这样,当业务调整的时候,我们可以尽量不会对 主键做过大的调整。

案例:

mysql> create table student (
   -> id char(10) unique comment '学号,不能重复,但可以为空',
   -> name varchar(10)
   -> );
Query OK, 0 rows affected (0.01 sec)
mysql> insert into student(id, name) values('01', 'aaa');
Query OK, 1 row affected (0.00 sec)
mysql> insert into student(id, name) values('01', 'bbb'); --唯一约束不能重复

ERROR 1062 (23000): Duplicate entry '01' for key 'id'

mysql> insert into student(id, name) values(null, 'bbb'); -- 但可以为空

Query OK, 1 row affected (0.00 sec)
mysql> select * from student;
+------+------+
| id   | name |
+------+------+
| 01   | aaa |
| NULL | bbb |
+------+------+

9 外键

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

语法:

foreign key (字段名) references 主表()

案例:
在这里插入图片描述
对上面的示意图进行设计:

先创建主键表

create table myclass (
 id int primary key,
 name varchar(30) not null comment'班级名'
 );

再创建从表

create table stu (
 id int primary key,
 name varchar(30) not null comment '学生名',
 class_id int,
 foreign key (class_id) references myclass(id)
 ); 

正常插入数据

mysql> insert into myclass values(10, '101班'),(20, '102班');
Query OK, 2 rows affected (0.03 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> insert into stu values(100, '张三', 10),(101, '李四',20);
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

插入一个班级号为30的学生,因为没有这个班级,所以插入不成功

mysql> insert into stu values(102, 'wangwu',30);
ERROR 1452 (23000): Cannot add or update a child row: 
a foreign key constraint fails (mytest.stu, CONSTRAINT stu_ibfk_1 
FOREIGN KEY (class_id) REFERENCES myclass (id))

插入班级id为null,比如来了一个学生,目前还没有分配班级

mysql> insert into stu values(102, 'wangwu', null);

如何理解外键约束

首先我们承认,这个世界是数据很多都是相关性的。
理论上,上面的例子,我们不创建外键约束,就正常建立学生表,以及班级表,该有的字段我们都有。
此时,在实际使用的时候,可能会出现什么问题?
有没有可能插入的学生信息中有具体的班级,但是该班级却没有在班级表中?
比如一个学校只有101班,102班,但是在上课的学生里面竟然有比特103班的学生(这个班目前并
不存在),这很明显是有问题的。
因为此时两张表在业务上是有相关性的,但是在业务上没有建立约束关系,那么就可能出现问题。
解决方案就是通过外键完成的。建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Electron快速入门

目录 前言 一、安装需知 二、安装electron 三、开始 3.1 修改package.json文件 3.2 创建main.js文件 3.3 启动预览窗口 3.4 显示内容 四、 热加载 五、主进程和渲染进程概念介绍 六、自定义原生菜单 6.1 自定义菜单 6.2 给菜单添加点击事件 6.3 抽离菜单定义 6.…

基于SpringBoot+vue的社区维修平台设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

信号链噪声分析19

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 用于定量表示 ADC 动态性能的常用指标有六个&#xff0c;分别是&#xff1a;SINAD&#xff08;信纳比&#xff09;、ENOB &#xff08;有效位数&#xff09;、SNR&#xff08;信…

keil_arm 大端小端 寄存器 栈

.text .global _start _start: /* 单寄存器ldr r0,0x40000800ldr r1,0x12345678将r1寄存器中的值&#xff0c;写到r0指向的地址空间中[0x40000800]0x12345678str r1,[r0]将r0指向地址空间中的内容&#xff0c;读到目标寄存器r2中&#xff0c;r20x12345678 ldr r2,[r0] */ /*ldr…

前端设计模式学习

UML类图 1.工厂模式 设计原则&#xff1a;最重要的就是开放封闭原则&#xff0c;对扩展开放&#xff0c;对修改封闭。 1.工厂和类分离&#xff0c;解耦 2.可以扩展多个类 3.工厂的创建逻辑也可以自由扩展 工厂模式可以拆分成三个&#xff0c;分别是工厂方法模式、抽象工厂…

C/C++图形库EasyX保姆级使用教程(二) 图形化窗口设置以及简单图形的绘制

C/C图形库EasyX保姆级使用教程 第一章 Microsoft Visual Studio 2022和EasyX的下载及安装使用 第二章 图形化窗口设置以及简单图形的绘制 文章目录 C/C图形库EasyX保姆级使用教程前言一、窗口&#xff01;1.如何生成一个图形化窗口&#xff1f;1.头文件2.初始化一个图形化窗口…

基于Java+Swing+Mysql人口普查登记系统

基于JavaSwingMysql人口普查登记系统 一、系统介绍二、功能展示1.主页2.新增人口信息3.查询人口信息 三、数据库四、其他系统实现五、获取源码 一、系统介绍 该系统实现了查看列表、新增人口信息、删除人口信息 运行环境&#xff1a;eclipse、idea、jdk1.8 二、功能展示 1.…

常州工学院数字图像处理及应用2022-2023第二学期实验报告 + 期末

《数字图像处理及应用》 课程 实验报告书 专业班级&#xff1a; 21计二 姓 名&#xff1a; 王梓权 学 号&#xff1a; 21030228 指导教师&#xff1a; 徐则中 计算机信息工程学院 《数字图像处理》实验 实验教学目的和要求 《数字图像处理》课程内容是一门综合…

Python MongoDB复习第一章

Python 可以在数据库应用程序中使用。 最受欢迎的 NoSQL 数据库之一是 MongoDB。 MongoDB MongoDB 将数据存储在类似 JSON 的文档中&#xff0c;这使得数据库非常灵活和可伸缩。 为了能够测试本教程中的代码示例&#xff0c;您需要访问 MongoDB 数据库。 您可以在 https:/…

论文学习笔记:增强学习应用于OS调度

【引子】周末&#xff0c;读了一篇同事推荐的论文《STUN: Reinforcement-Learning-Based Optimization of Kernel Scheduler Parameters for Static Workload Performance》&#xff0c;很有启发&#xff0c;遂加入个人思考编译成文。 从小型物联网设备到大型服务器&#xff0c…

VIM编辑器的命令使用总结

&#xff08;该图由AI绘制 关注我 学习AI画图&#xff09; 目录 一、VIM编辑器 1、vi概述 2、vim编辑器 3、vim编辑器的安装 4、vim编辑器的四种模式&#xff08;重点&#xff09; ☆ 命令模式 ☆ 编辑模式或输入模式 ☆ 末行模式 ☆ 可视化模式&#xff08;了解&am…

Apache Doris (十三) :数据存储模型之Duplicate数据存储模型

进入正文之前&#xff0c;欢迎订阅专题、对博文点赞、评论、收藏&#xff0c;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; 在某些多维分析场景下&#xff0c;数据既没有主键&#xff0c;也没有聚合需求&#xff0c;只需要将数据原封不动的存入表中&#xff0c;数据有…

神经网络初谈

文章目录 简介神经网络的发展历程神经网络的初生神经网络的第一次折戟神经网络的新生&#xff0c;Hinton携BP算法登上历史舞台命途多舛&#xff0c;神经网络的第二次寒冬神经网络的重生&#xff0c;黄袍加身&#xff0c;一步封神神经网络的未来&#xff0c;众说纷纭其他时间点 …

【实战】 四、JWT、用户认证与异步请求(下) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(五)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求1~56.用useAuth切换登录与非登录状态7.用fetch抽象通用HTTP请求方法&#xff0c;增强通用性8.用useHt…

基于Hadoop的网上购物行为分析设计与实现

有需要本项目的可以私信博主&#xff0c;提供部署和讲解服务&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 本研究基于淘宝用户行为的开源数据展开大数据分析研究&#xff0c;通过Hadoop大数据分析平台对阿里天池公开的开源数据集进行多维度的用户行为分析&a…

4.1ORB-SLAM3之处理缓存队列中的关键帧

0.简介 该函数主要包括以下几个部分&#xff1a; 计算该关键帧特征点的Bow信息更新当前关键帧新增地图点的属性更新共视图中关键帧间的连接关系将该关键帧插入到地图中 1.计算该关键帧特征点的Bow信息ComputeBoW() vector<cv::Mat> vCurrentDesc Converter::toDescr…

ModaHub魔搭社区:向量数据库功能主要特点和应用场景

目录 主要特点 向量数据库功能 高性能向量搜索 低延迟高召回率 多向量搜索索引 向量数据库可以帮助的领域 图像相似性搜索 视频相似性搜索 音频相似性搜索 主要特点 向量数据库功能 高性能向量搜索 存储、索引和管理由深度神经网络和其他机器学习&#xff08;ML&…

Matlab论文插图绘制模板第106期—带误差棒的堆叠柱状图

在之前的文章中&#xff0c;分享了Matlab带误差棒的折线图绘制模板&#xff1a; 带误差棒的柱状图绘制模板&#xff1a; 进一步&#xff0c;再来分享一下带误差棒的堆叠柱状图的绘制模板。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源…

管理类联考——数学——技巧篇——公式——几何题

三角形 三角形面积公式 S 1 2 b c s i n A 1 2 a c s i n B 1 2 a b s i n C S\frac{1}{2}bcsinA\frac{1}{2}acsinB\frac{1}{2}absinC S21​bcsinA21​acsinB21​absinC(正弦定理)&#xff1b; S p ( p − a ) ( p − b ) ( p − c ) S\sqrt{p(p-a)(p-b)(p-c)} Sp(p−a)…

JAVA-编程基础-06-数组

Lison <dreamlison163.com>, v1.0.0, 2023.03.22 JAVA-编程基础-06-数组 什么是数组 ​ 数组是一种线性数据结构&#xff0c;是一个使用连续的内存空间存放相同的数据类型的集合容器&#xff0c;与其他容器相比&#xff0c;数组的区别主要在于性能与保存基本类型的能力…