MySQL数据库:表的约束

目录

一. 空属性null

二. 默认值default

三. 列描述comment

四. 填充零zerofill

五. 主键primary key

六. 自增长auto_increment

七. 唯一键unique

八. 外键foreign key


一. 空属性null

对于表中的数据,如果在进行插入的时候不显示地给定值,那么默认就取null表示空。空(非空)属性有两个值可以表示:null 和 not null。

如果在创建表的时候,声明某个成员为not null,那么在向表中插入数据的时候,这个成员的值不能是null,在实际项目中会存在某些字段不能为空场景,例如:调查问卷中的某些必填选项。

语法:Field DataType not null 

如下代码,在表t1中,字段id不能为空,如果在向t1插入数据时,不显示给出id的值,那么默认就认为id为null,而not null属性会拦截id为null的插入或修改操作。

mysql> create table t1 (-> id int not null,-> name varchar(20)-> );
Query OK, 0 rows affected (0.25 sec)mysql> insert into t1 values (1, 'zhangsan');
Query OK, 1 row affected (0.03 sec)mysql> insert into t1 (name) values (2);  -- 声明not null,没有默认值,插入失败
ERROR 1364 (HY000): Field 'id' doesn't have a default value
mysql> insert into t1 values (null, 'lisi'); -- id不可以为空
ERROR 1048 (23000): Column 'id' cannot be null

二. 默认值default

如果表中的某个字段有经常被使用的值,那么可以在建表的时候就声明这个字段的默认值,在向表中插入数据时,如果用户给定数据值就用用户给定的,如果用户没有显示给定就用默认值

语法:Field DataType default 默认值

如下代码中的表t2,设置成员age的默认值为20,gender的默认值为'男',插入数据时,可以忽略age和gender字段,这样就会使用默认数据。如果显示给定被default声明的字段值为null,那么就使用用户给定的null值而不是使用默认值

mysql> create table t2 (-> id int not null,-> age tinyint unsigned default 20,-> gender varchar(2) default '男'-> );
Query OK, 0 rows affected (0.32 sec)mysql> desc t2;
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| id     | int(11)             | NO   |     | NULL    |       |
| age    | tinyint(3) unsigned | YES  |     | 20      |       |
| gender | varchar(2)          | YES  |     | 男      |       |
+--------+---------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)mysql> insert into t2 values (10, 13, '女');  -- 用户显示给定值就使用用户给定的
Query OK, 1 row affected (0.02 sec)mysql> insert into t2 (id) values (11); -- 如果省略值就采用默认的
Query OK, 1 row affected (0.01 sec)mysql> insert into t2 (id, age) values (11, 19);
Query OK, 1 row affected (0.05 sec)mysql> insert into t2 (id, age) values (12, null); -- 插入null不会采用default值
Query OK, 1 row affected (0.05 sec)mysql> select * from t2;
+----+------+--------+
| id | age  | gender |
+----+------+--------+
| 10 |   13 | 女     |
| 11 |   20 | 男     |
| 11 |   19 | 男     |
| 12 | NULL | 男     |
+----+------+--------+
4 rows in set (0.00 sec)

三. 列描述comment

comment:列描述,仅仅是作为注释来使用的,类似于C/C++中的代码注释。

语法:Field DataType comment '描述信息'

 由于comment描述信息完全不影响表的属性,因此:

  • 通过desc TableName 无法查询到comment信息。
  • 通过show create table TableName 能够看到comment信息。
mysql> create table t3 (-> id int comment '标号',-> message varchar(30) comment '属性信息'-> );
Query OK, 0 rows affected (0.24 sec)mysql> desc t3;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | YES  |     | NULL    |       |
| message | varchar(30) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)mysql> show create table t3 \G
*************************** 1. row ***************************Table: t3
Create Table: CREATE TABLE `t3` (`id` int(11) DEFAULT NULL COMMENT '标号',`message` varchar(30) DEFAULT NULL COMMENT '属性信息'
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)

四. 填充零zerofill

如下代码,当用户创建 整形/字符串 类型字段的时候,通过desc查看详细的表属性信息,可以看到类型信息后面有一对圆括号,里面有一个数字。对于 char/varchar 很好理解,表示字符串的长度,但是,整形类型后面括号里的数字又有什么含义呢?

mysql> create table t4 (-> c1 char(10),-> c2 varchar(5),-> n1 tinyint unsigned,-> n2 int unsigned-> );
Query OK, 0 rows affected (0.25 sec)mysql> desc t4;
+-------+---------------------+------+-----+---------+-------+
| Field | Type                | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| c1    | char(10)            | YES  |     | NULL    |       |
| c2    | varchar(5)          | YES  |     | NULL    |       |
| n1    | tinyint(3) unsigned | YES  |     | NULL    |       |
| n2    | int(10) unsigned    | YES  |     | NULL    |       |
+-------+---------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

对于整形类型,如果不声明zerofill,那么括号里的数字是没有意义的。zerofill的作用是当前端显示的数据长度不足指定长度时,通过前导0来补充,如果超过指定长度,按照原本的格式显示,不会将超过设定长度的部分截断。整形类型括号后面的数字,就是默认的显示长度,如果没有声明zerofill,那么这个数字会被忽略。

语法:Field DataType(M) zerofill

解释:如果显示长度不足M,那么就使用前导0补充到M 

如下代码,在表t5中定义字段val int(5) unsigned,插入1、12、123、1234、12345、123456,之后使用select * from t5输出表t5中全部的val信息,可以观察到长度不足5的数据,前面都填充了0,而123456的长度超过了5,显示其原本的值,没有被截断。

声明zerofill不影响数据在数据库中存储的内容,受影响的仅是在前端的输出格式。 

mysql> create table t5 (-> val int(5) unsigned zerofill-> );
Query OK, 0 rows affected (0.10 sec)mysql> insert into t5 values(1);
Query OK, 1 row affected (0.04 sec)mysql> insert into t5 values(12);
Query OK, 1 row affected (0.03 sec)mysql> insert into t5 values(123);
Query OK, 1 row affected (0.04 sec)mysql> insert into t5 values(1234);
Query OK, 1 row affected (0.03 sec)mysql> insert into t5 values(12345);
Query OK, 1 row affected (0.03 sec)mysql> insert into t5 values(123456);
Query OK, 1 row affected (0.03 sec)mysql> select * from t5;
+--------+
| val    |
+--------+
|  00001 |
|  00012 |
|  00123 |
|  01234 |
|  12345 |
| 123456 |
+--------+
6 rows in set (0.00 sec)

五. 主键primary key

主键是MySQL数据库中用于数据检索的关键字,一张表中只能有一个主键,并且主键不能重复,不能为null,主键一般是整形数据。

语法:Field DataType primary key

解释:primary key 为主键声明的关键字

如下代码,定义表stu1,其中包含int unsigned类型数据id,将id设置为主键,如果试图插入重复的主键,或者主键值为null,那么MySQL会拦截这样的操作。

mysql> create table stu1 (-> id int unsigned primary key comment '学号作为主键,不能重复',-> name varchar(10) not null comment '学生姓名,不能为空',-> gender enum('男','女') comment '学生性别'-> );
Query OK, 0 rows affected (0.21 sec)mysql> desc stu1;
+--------+-------------------+------+-----+---------+-------+
| Field  | Type              | Null | Key | Default | Extra |
+--------+-------------------+------+-----+---------+-------+
| id     | int(10) unsigned  | NO   | PRI | NULL    |       |
| name   | varchar(10)       | NO   |     | NULL    |       |
| gender | enum('男','女')   | YES  |     | NULL    |       |
+--------+-------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)mysql> insert into stu1 values (1,'zhangsan','男');
Query OK, 1 row affected (0.04 sec)mysql> insert into stu1 values (2,'lisi','男');
Query OK, 1 row affected (0.04 sec)mysql> insert into stu1 values (3,'wangwu','女');
Query OK, 1 row affected (0.03 sec)mysql> insert into stu1 values (1,'wangwu','女');  -- 不允许有重复的主键
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> insert into stu1 values (3,'wangwu','女');
ERROR 1062 (23000): Duplicate entry '3' for key 'PRIMARY'
mysql> insert into stu1 values (null,'wangwu','女');  -- 主键不能为null
ERROR 1048 (23000): Column 'id' cannot be null
mysql> select * from stu1;
+----+----------+--------+
| id | name     | gender |
+----+----------+--------+
|  1 | zhangsan | 男     |
|  2 | lisi     | 男     |
|  3 | wangwu   | 女     |
+----+----------+--------+
3 rows in set (0.00 sec)

主键可以被删除,也可以在完成表的基本结构创建后再添加主键:

  • 删除主键:alter table 表名称 drop primary key;
  • 添加主键:alter table 表名称 add primary key(字段名);

下面的代码以上面的表stu1为操作对象,先删除主键,通过desc查看表属性信息,在重新设置id为主键,再通过desc查看表属性信息,观察到了主键被成功删除和添加。

mysql> alter table stu1 drop primary key;
Query OK, 3 rows affected (0.68 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> desc stu1;
+--------+-------------------+------+-----+---------+-------+
| Field  | Type              | Null | Key | Default | Extra |
+--------+-------------------+------+-----+---------+-------+
| id     | int(10) unsigned  | NO   |     | NULL    |       |
| name   | varchar(10)       | NO   |     | NULL    |       |
| gender | enum('男','女')   | YES  |     | NULL    |       |
+--------+-------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)mysql> alter table stu1 add primary key(id);
Query OK, 0 rows affected (0.56 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc stu1;
+--------+-------------------+------+-----+---------+-------+
| Field  | Type              | Null | Key | Default | Extra |
+--------+-------------------+------+-----+---------+-------+
| id     | int(10) unsigned  | NO   | PRI | NULL    |       |
| name   | varchar(10)       | NO   |     | NULL    |       |
| gender | enum('男','女')   | YES  |     | NULL    |       |
+--------+-------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

主键一般用于检索,通过唯一的主键,用户可以实现对数据库中某行数据的查询、修改或删除:

  • 通过主键进行检索:select * from 表名称 where 主键字段=XXX;
  • 通过主键更改某行数据:update 表名称 set 待修改字段=XXX where 主键字段=XXX;
  • 通过主键删除某行数据:delete from 表名称 where 主键字段=XXX;
mysql> select * from stu1;
+----+----------+--------+
| id | name     | gender |
+----+----------+--------+
|  1 | zhangsan | 男     |
|  2 | lisi     | 男     |
|  3 | wangwu   | 女     |
+----+----------+--------+
3 rows in set (0.00 sec)mysql> select * from stu1 where id=1;  -- 检索id=1的行
+----+----------+--------+
| id | name     | gender |
+----+----------+--------+
|  1 | zhangsan | 男     |
+----+----------+--------+
1 row in set (0.00 sec)mysql> update stu1 set name='zhaoliu' where id=3; -- 更改id=3的行的name字段
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> delete from stu1 where id=2; -- 删除id=2的数据
Query OK, 1 row affected (0.02 sec)mysql> select * from stu1;
+----+----------+--------+
| id | name     | gender |
+----+----------+--------+
|  1 | zhangsan | 男     |
|  3 | zhaoliu  | 女     |
+----+----------+--------+
2 rows in set (0.00 sec)

复合主键:表中两个或两个以上字段共同充当主键。

如下代码,定义了表stu2,使用字段id和字段class_id组合来充当主键,向表中插入数据时,允许id或class_id这两个字段其中之一出现重复,但不允许两行数据的id和class_id全部重复即:以复合主键用所有参与组合的字段的值作为比较依据,而不限制单个字段出现重复

mysql> create table stu2 (-> id int unsigned,-> class_id int unsigned,-> name varchar(10) not null,-> primary key(id, class_id)  -- id和class_id作为复合主键-> );
Query OK, 0 rows affected (0.25 sec)mysql> insert into stu2 values (1,101,'zhangsan');
Query OK, 1 row affected (0.04 sec)mysql> insert into stu2 values (1,102,'zhangsan');  -- id重复,class_id不重复,允许插入
Query OK, 1 row affected (0.04 sec)mysql> insert into stu2 values (2,102,'zhangsan');  -- id不重复,class_id重复,允许插入
Query OK, 1 row affected (0.05 sec)mysql> insert into stu2 values (1,101,'lisi'); -- id和class_id全部重复,禁止插入
ERROR 1062 (23000): Duplicate entry '1-101' for key 'PRIMARY'

六. 自增长auto_increment

自增长,必须配合主键来使用。如果一张表中,找不出一个合适的字段(唯一、方便检索)作为主键,那么就应当引入自增长字段。

自增长字段具有以下特点:

  • 自增长auto_increment必须配合primary key使用,否则MySQL会拦截建表操作。
  • 如果用户显示给定了值,那么就使用用户给定的,如果用户没有显示给出值,那么自增长字段的值就是 当前表中最大值 + 1
  • 如果用户没有显示给定值,表中也没有数据,那么默认自增长字段的值为1。如果在创建表的时候显示给定了起始值,那么就采用用户给出的起始值。
mysql> desc t6;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10)      | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)mysql> insert into t6 (name) values ('zhangsan');
Query OK, 1 row affected (0.00 sec)mysql> insert into t6 (name) values ('lisi');
Query OK, 1 row affected (0.04 sec)mysql> insert into t6 (id,name) values (100,'wangwu');
Query OK, 1 row affected (0.03 sec)mysql> insert into t6 (name) values ('zhaoliu');
Query OK, 1 row affected (0.03 sec)mysql> select * from t6;
+-----+----------+
| id  | name     |
+-----+----------+
|   1 | zhangsan |
|   2 | lisi     |
| 100 | wangwu   |
| 101 | zhaoliu  |
+-----+----------+
4 rows in set (0.00 sec)

如果不想使用默认值1为自增长主键的起始值,那么也可以在建表的时候声明起始值。

显示给定auto_increment起始值语法:

create table 表名称 (

        Field DataType primary key auto_increment,

        // ... ...

)auto_increment=起始值;

如下代码,创建表t7,显示给定自增长字段的起始值为10,依次省略自增长字段值插入两行数据,可见两行数据的自增长字段值为10和11。

mysql> create table t7 (-> id int unsigned primary key auto_increment,-> name varchar(10) not null-> )auto_increment=10;
Query OK, 0 rows affected (0.26 sec)mysql> insert into t7 (name) values ('zhangsan');
Query OK, 1 row affected (0.03 sec)mysql> insert into t7 (name) values ('lisi');
Query OK, 1 row affected (0.02 sec)mysql> select * from t7;
+----+----------+
| id | name     |
+----+----------+
| 10 | zhangsan |
| 11 | lisi     |
+----+----------+
2 rows in set (0.01 sec)

七. 唯一键unique

唯一键,用于表示一张表中不允许出现重复的字段,如果尝试向表中插入唯一键重复的数据,那么MySQL会拦截操作,唯一键与主键十分类似,但又有所不同。

唯一键和主键的区别:

  • 一张表中可以有多个唯一键,但只能有一个主键。
  • 唯一键可以为null,主键不能为null。
  • 主键最重要的功能是用于数据检索,而唯一键一般只是为了避免数据重复。

注意:唯一键为null时不进行重复性比较,即:一张表中可以有多行唯一键为null的数据存在。

mysql> insert into t8 values (1,10,'hello');
Query OK, 1 row affected (0.05 sec)mysql> insert into t8 values (1,12,'good');
ERROR 1062 (23000): Duplicate entry '1' for key 'u_val1'  -- 尝试插入相同的唯一键,插入失败
mysql> insert into t8 values (2,10,'good');
ERROR 1062 (23000): Duplicate entry '10' for key 'u_val2'
mysql> insert into t8 values (2,null,'haha');
Query OK, 1 row affected (0.03 sec)mysql> insert into t8 values (3,null,'bye');  -- 插入两个值为null的唯一键插入成功
Query OK, 1 row affected (0.05 sec)mysql> select * from t8;
+--------+--------+-------+
| u_val1 | u_val2 | val3  |
+--------+--------+-------+
|      1 |     10 | hello |
|      2 |   NULL | haha  |
|      3 |   NULL | bye   |   -- null不进行唯一性比较
+--------+--------+-------+
3 rows in set (0.00 sec)

八. 外键foreign key

外键通常用于定义主表字段和从表字段之间的约束关系,外键约束具有以下特点:

  • 外键定义必须在从表中,其所关联的主表字段必须是唯一键或者主键。
  • 从表中的外键约束字段值,要么为主表对应字段存在的值,要么为null。

语法:foreign key (字段名) references 主表名(字段名) 

图8.1为外键约束的案例,定义两张表stu和class,存储学生信息和班级信息,如果在学生信息的表中附加班级信息,那么会造成大量的数据冗余,因此在学生信息表stu中定义字段class_id关联到表class的id字段,这样就建立起了表stu和class的关联。

如果企图在从表中,插入主表不存在的外键约束字段,那么MySQL会拦截这种插入操作。

图8.1 外键约束案例
// 1.创建主表
mysql> create table class (  -> id int unsigned primary key,-> name varchar(10) not null-> );
Query OK, 0 rows affected (0.16 sec)// 2.创建从表
mysql> create table student (-> id int unsigned primary key,-> class_id int unsigned,-> name varchar(10),-> foreign key(class_id) references class(id) -- 定义外键约束-> );
Query OK, 0 rows affected (0.27 sec)

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

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

相关文章

vp与vs联合开发-通过FrameGrabber连接相机

添加控件 1.CogRecordDisplay 控件 用于显示图像 初始化相机对象方法 //启动窗体时 调用初始化相机方法 //封装相机关闭方法 //窗体关闭时 调用相机关闭方法 拍照 设置采图事件 // 保存图像 设置曝光按钮事件 1.可变参数

css实现0.5px宽度/高度显——属性: transform: scale

在大多数设备上,实际上无法直接使用 CSS 来精确地创建 0.5 像素的边框。因为大多数屏幕的最小渲染单位是一个物理像素,所以通常只能以整数像素单位渲染边框。但是,有一些技巧可以模拟出看起来像是 0.5 像素的边框。 这里介绍使用&#xff1a…

云原生系列2-GitLab和Jenkins

1、GitLab类似github,是个私有仓库 1、GitLab安装,至少8G内存4核cpu # 查找Gitlab镜像 docker search gitlab/gitlab-ce # gitlab镜像拉取 docker pull gitlab/gitlab-ce # 查看镜像 docker images # 本机先建3个目录,为了gitlab容器通过挂…

新增工具箱管理功能、重构网站证书管理功能,1Panel开源面板v1.9.0发布

2023年12月18日,现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.9.0版本。 在这一版本中,1Panel引入了新的工具箱管理功能,包含Swap分区管理、Fail2Ban管理等功能。此外,1Panel针对网站证书管理功能进行了全面重构&…

【数据结构】迷宫问题报告+源码C/C++

之前帮别人写的一个报告,是关于栈的迷宫问题。内容不多,代码在最后。分享给大家,喜欢可以点赞关注。原创无偿分享,勿商用。 迷宫求解 设计目的 仅认识到栈是一种特殊的线性表是远远不够的,本次实习的目的在于使学生…

【Linux基础】3. 文件基本属性

文章目录 【 1. 文件的属主和属组 】【 2. 显示文件的类型、权限 】2.1 文件类型2.2 文件权限 【 3. 更改文件属性 】3.1 chgrp 更改文件属组3.2 chown 更改文件所有者3.3 更改文件权限3.3.1 数字法更改文件权限3.3.2 符号法更改文件权限 【 1. 文件的属主和属组 】 Linux 系统…

Vue的脚手架

脚手架配置 脚手架文档:Vue CLI npm config set registry https://registry.npm.taobao.org vue.config.js配置选项: 配置参考 | Vue CLI ref选项 ref和id类似,给标签打标识。 document.getElementById(btn); this.$ref.btn; 父子组…

Kafka 分级存储在腾讯云的实践与演进

导语 腾讯云消息队列 Kafka 内核负责人鲁仕林为大家带来了《Kafka 分级存储在腾讯云的实践与演进》的精彩分享,从 Kafka 架构遇到的问题与挑战、Kafka 弹性架构方案类比、Kafka 分级存储架构及原理以及腾讯云的落地与实践四个方面详细分享了 Kafka 分级存储在腾讯云…

基于JAVA的海南旅游景点推荐系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

STM32 RTC总结

RTC入侵检测Tamper RTC Tamper功能就是,MCU在Tamper管脚检测到一个指定边缘信号(可配置)时,就主动清除所有备份寄存器数据的功能。如果需要,可以使能Tamper中断,在每次检测到Tamper信号后执行指定代码。 在…

用23种设计模式打造一个cocos creator的游戏框架----(二十一)组合模式

1、模式标准 模式名称:组合模式 模式分类:结构型 模式意图:将对象组合成树型结构以表示“部分-整体”的层次结构。Composite 使得用户对单个对象和组合对象的使用具有一致性。 结构图: 适用于: 1、想表示对象的部分…

算法通关村第十关—快速排序(青铜)

快速排序 快排的基本过程 快速排序是将分治法运用到排序问题的典型例子  快速排序基本思想是:通过一个标记pivot元素将n个元素的序列划分为左右两个子序列left和right,.其中left中的元素都比pivot小,right的都比pivot的大,然后再次对Ieft和r…

关于折线回归

一、说明 今天的帖子主要是关于使用折线回归找到最佳值。即将某条曲线分解成包络线段,然后用分段回归方式优化。但它也涉及使用 SAS 和 R 的剂量反应研究和样条曲线。这不是第一篇关于这些主题的文章,但我确实想在其中添加折线。只是因为它还在使用。 二…

使用docker-compose搭建docker私服与配置WebUI

简介 本文介绍了使用docker compose 搭建 docker私服 环境 Docker version 24.0.6, build ed223bc Docker Compose version v2.21.0 正文 一、创建registry文件夹 我的路径是/usr/loca/docker/registry 二、创建并编写docker-compose.yml version: "3.9" services…

ios备忘录怎么导入华为 方法介绍

作为一个常常需要在不同设备间切换的人,我深知备忘录的重要性。那些突如其来的灵感、重要的会议提醒、甚至是生活中的琐碎小事,我们都习惯性地记录在备忘录里。但当我决定从iPhone转向华为时,一个问题困扰了我:如何将那些珍贵的备…

智能优化算法应用:基于学校优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于学校优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于学校优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.学校优化算法4.实验参数设定5.算法结果6.…

Axure中继器完成表格的增删改查的自定义元件(三列表格与十列表格)

目录 一、中继器 1.1 定义 1.2 特点 1.3 适用场景 二、三列表格增删改查 2.1 实现思路 2.2 效果演示 三、十列表格增删改查 3.1 实现思路 3.2 效果演示 一、中继器 1.1 定义 在Axure中,"中继器"通常指的是界面设计中的一个元素,用…

IntelliJ IDE 插件开发 | (三)消息通知与事件监听

系列文章 IntelliJ IDE 插件开发 |(一)快速入门IntelliJ IDE 插件开发 |(二)UI 界面与数据持久化IntelliJ IDE 插件开发 |(三)消息通知与事件监听 前言 在前两篇文章中讲解了关于插件开发的基础知识&…

【linux】解决matplotlib中文显示乱码

一、Debian操作系统版本号 $ cat /etc/debian_version 12.4 二、问题 matplotlib中文显示乱码。 三、解决方法: plt.rcParams["font.sans-serif"] "Noto Sans CJK JP" 四、解决过程 1.问GPT 回答了一些相关问题,但是好像用…

Python tkinter 初探Toplevel控件搭建父子窗口

目录 Toplevel控件搭建父子窗口 最简明的父子窗口框架 改进一:屏蔽和开放按钮 改进二:子窗口始终在主窗口之上 改进三:增加子窗口的关闭协议 改进四:使子窗口长获焦点 总结 Toplevel控件搭建父子窗口 最近,用P…