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

MySQL-数据库约束

1.约束类型

类型说明
NOT NULL非空约束

指定非空约束的列不能存储NULL值

DEFAULT默认约束当没有给列赋值时使用的默认值
UNIQUE唯一约束指定唯一约束的列每行数据必须有唯一的值
PRIMARY KEY主键约束NOT NULL和UNIQUE的结合,可以指定一个列霍多个列,有助于防止数据重复和提高数据的查询性能
FOREIGN KEY外键约束外键约束是一种关系约束,用于定义两个表之间的关联关系,可以确保数据的完整性和一致性
CHECK约束用于限制列或数据在数据库表中的值,确保数据的准确性和可靠性

2.NOT NULL非空约束

定义表时某列不允许为NULL时,可以为列添加非空约束

⽐如创建⼀个学⽣表,学⽣名为NULL时,这条记录是不完整的
drop table if exists student;
create table student(id bigint,name varchar(20)
);# 插⼊数据
insert into student values (1, null);# 查询
select * from student;
+------+------+
| id | name |
+------+------+
| 1 | NULL | # 班级名为NULL,没有意义
+------+------+
1 row in set (0.00 sec)

此时需要约束学生名的列不能为NULL

drop table if exists student;
# 为所有列添加⾮空约束
create table student (id bigint,name varchar(20) NOT NULL
);# 由于name列有⾮空约束,插⼊NULL值时报错
insert into student values (1, null);
ERROR 1048 (23000): Column 'name' cannot be null# 正常值可以成功插⼊
insert into student values (1, '张三');
Query OK, 1 row affected (0.00 sec)
select * from student;
+------+--------+
| id | name |
+------+--------+
| 1 | 张三 |
+------+--------+
1 row in set (0.00 sec)
查看表结构,NULL列为NO表⽰值不允许为NULL,YES表⽰值可以为NULL
desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | bigint | YES | | NULL | |
| name | varchar(10) | NO | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

3.DEFALUT默认值约束

DEFAULT 约束⽤于向列中插⼊默认值,如果没有为列设置值,那么会将默认值设置到该列
重构学⽣表,新增年龄列
drop table student;
# 创建学⽣表,加⼊年龄列
create table student (id bigint,name varchar(20) not null,age int
);
插⼊⼀条记录,没有设置默认约束时,不指定年龄的值时列为NULL
insert into student(id, name) values (1, '张三');select * from student;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 张三 | NULL | # 年龄值为NULL
+------+--------+------+
1 row in set (0.00 sec)
重构学⽣表,为年龄的列加⼊默认约束
drop table student;# 为年龄列加⼊默认约束create table student (id bigint,name varchar(20) not null,age int DEFAULT 18
);
插⼊⼀条记录,不指定年龄的值时列使⽤了默认值
select * from student;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 张三 | 18 |
+------+--------+------+
1 row in set (0.00 sec)
查看表结构,年龄列的默认值为18
desc student;
+-------+-------------+------+-----+---------+-------+
| Field |         Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
|    id |      bigint |   YES |     |    NULL |       |
|  name | varchar(20) |    NO |     |    NULL |       |
|   age |         int |   YES |     |      18 |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

当手动明确值年龄列为NULL时列值为NULL

insert into student(id, name, age) values (2, '李四', NULL);
Query OK, 1 row affected (0.00 sec)
select * from student;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 |  张三 |   18 |
| 2 |  李四 | NULL |
+------+--------+------+
2 rows in set (0.00 sec)

4.UNIQUE唯一约束

指定了唯⼀约束的列,该列的值在所有记录中不能重复,⽐如⼀个⼈的⾝份证号,学⽣的学号等

重构学生表,新增学号列

drop table student;
# 学号列设置唯⼀约束
create table student (id bigint,name varchar(20) not null,age int DEFAULT 18,sno varchar(10)
);

不设置唯⼀约束时,学号可以重复

insert into student(id, name, sno) values (1, '张三', '100001');
Query OK, 1 row affected (0.00 sec)insert into student(id, name, sno) values (2, '李四', '100001');
Query OK, 1 row affected (0.00 sec)select * from student;
+------+--------+------+--------+
| id | name | age | sno |
+------+--------+------+--------+
| 1 | 张三 | 18 | 100001 |
| 2 | 李四 | 18 | 100001 |
+------+--------+------+--------+
2 rows in set (0.00 sec)
重构学⽣表,为学号列设置唯⼀约束
drop table student;
create table student (id bigint,name varchar(20) not null,age int DEFAULT 18,sno varchar(10) UNIQUE # 唯⼀约束
);
插⼊重复的学号时报错,唯⼀约束⽣效
insert into student(id, name, sno) values (1, '张三', '100001');
Query OK, 1 row affected (0.01 sec)insert into student(id, name, sno) values (2, '李四', '100001');
ERROR 1062 (23000): Duplicate entry '100001' for key 'student.sno'select * from student;
+------+--------+------+--------+
| id | name | age | sno |
+------+--------+------+--------+
| 1 | 张三 | 18 | 100001 |
+------+--------+------+--------+
1 row in set (0.00 sec)
查看表结构,Key列显⽰UNI表⽰唯⼀约束
desc student;
+-------+-------------+------+-----+---------+-------+
| Field |        Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
|    id |      bigint |  YES |     |    NULL |       |
|  name | varchar(20) |   NO |     |    NULL |       |
|   age |         int |  YES |     |      18 |       |
|   sno | varchar(10) |  YES | UNI |    NULL |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

5.PRIMARY KEY主键约束

主键约束唯⼀标识数据库表中的每条记录。
主键必须包含唯⼀的值,且不能包含 NULL 值。
每个表只能有⼀个主键,可以由单个列或多个列组成。
通常为每张表都指定⼀个主键,主键列建议使⽤BIGINT类型

 重构学⽣表,为ID列添加⾮空和唯⼀约束

drop table student;
create table student (id bigint not null unique,name varchar(20) not null,age int DEFAULT 18,sno varchar(10) UNIQUE
);
查看表结构,添加了⾮空和唯⼀约束之后Key列显⽰PRI表⽰主键
desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
|   id |    bigint |   NO | PRI |  NULL |     | # 主键
|  name | varchar(20) |   NO |    |  NULL |     |
|   age|      int |  YES |    |  18 |      |
|   sno| varchar(10) |   YES | UNI |  NULL |     |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
当Id列的重复时会发⽣主键冲突
insert into student(id, name, sno) values (1, '张三', '100001');
Query OK, 1 row affected (0.01 sec)insert into student(id, name, sno) values (1, '李四', '100001');
ERROR 1062 (23000): Duplicate entry '1' for key 'student.id'
通常把主键列设置为⾃动增⻓,让数据库维护主键值
drop table student;# 重构学⽣表
create table student (id bigint PRIMARY KEY auto_increment, # 设置⾃增主键name varchar(20) not null,age int DEFAULT 18,sno varchar(10) UNIQUE
);
插⼊数据时不设置主键列的值
# 主键列的值为NULL
insert into student(id, name, sno) values (NULL, '张三', '100001');
Query OK, 1 row affected (0.00 sec)# 不指定主键
insert into student(name, sno) values ('李四', '100002');
Query OK, 1 row affected (0.01 sec)# 主键列的值⾃动⽣成
select * from student;
+----+--------+------+--------+
| id | name | age | sno |
+----+--------+------+--------+
| 1 | 张三 | 18 | 100001 |
| 2 | 李四 | 18 | 100002 |
+----+--------+------+--------+
2 rows in set (0.00 sec)
查看表结构,Extra列显⽰auto_increment 表⽰⾃增
desc student;
+-------+-------------+------+-----+---------+----------------+
| Field |     Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
|   id |    bigint | NO | PRI |   NULL | auto_increment |
|  name | varchar(20) | NO |   |   NULL |          |
|   age |     int | YES |   |    18 |         |
|   sno | varchar(10) | YES | UNI |  NULL |         |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
如果某条记录写⼊失败,新⽣成的主键值将会作废
# 由于学号重复,产⽣了唯⼀冲突,导致插⼊失败,ID为3的主键值作废
insert into student(name, sno) values ('王五', '100002');
ERROR 1062 (23000): Duplicate entry '100002' for key 'student.sno'# 修改学号后成功插⼊数据
insert into student(name, sno) values ('王五', '100003');
Query OK, 1 row affected (0.00 sec)# 查询后发现新记录ID列的值为4
select * from student;
+----+--------+------+--------+
| id | name | age | sno |
+----+--------+------+--------+
| 1 | 张三 | 18 | 100001 |
| 2 | 王五 | 18 | 100002 |
| 4 | 王五 | 18 | 100003 | # 新插⼊的记录
+----+--------+------+--------+
3 rows in set (0.00 sec)
主键值可以不连续
# ⼿动指定⼀个值
insert into student(id, name, sno) values (100, '赵六', '100004');
Query OK, 1 row affected (0.01 sec)select * from student;
+-----+--------+------+--------+
| id | name | age | sno |
+-----+--------+------+--------+
| 1 | 张三 | 18 | 100001 |
| 2 | 王五 | 18 | 100002 |
| 4 | 王五 | 18 | 100003 |
| 100 | 赵六 | 18 | 100004 |
+-----+--------+------+--------+
4 rows in set (0.00 sec)# 下⼀次⾃增从主键的最⼤值开始
insert into student(name, sno) values ('钱七', '100005');
Query OK, 1 row affected (0.01 sec)select * from student;
+-----+--------+------+--------+
| id | name | age | sno |
+-----+--------+------+--------+
| 1 | 张三 | 18 | 100001 |
| 2 | 王五 | 18 | 100002 |
| 4 | 王五 | 18 | 100003 |
| 100 | 赵六 | 18 | 100004 |
| 101 | 钱七 | 18 | 100005 | # ID列的值是101
+-----+--------+------+--------+
5 rows in set (0.00 sec)
主键或唯⼀键冲突时的更新操作,插⼊否则更新
# 语法
INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ...# 插⼊ID为100,学号为100100的学⽣记录时,报主键冲突
insert into student(id, name, sno) values (100, '赵六', '100100');
ERROR 1062 (23000): Duplicate entry '100' for key 'student.PRIMARY'# 可以使⽤以上语法,如果插⼊时有冲突则更新当前列的值
insert into student(id, name, sno) values (100, '赵六', '100100')-> ON DUPLICATE KEY UPDATE name = '赵六', sno = '100100';
Query OK, 2 rows affected (0.01 sec) # 两⾏受影响,表⽰删除了原来的记录,⼜新写⼊了⼀条记录
# 与update student set name = '赵六', sno = '100100' where id = 100; 等效select * from student;
+-----+--------+------+--------+
| id | name | age | sno |
+-----+--------+------+--------+
| 1 | 张三 | 18 | 100001 |
| 2 | 王五 | 18 | 100002 |
| 4 | 王五 | 18 | 100003 |
| 100 | 赵六 | 18 | 100100 | # 学号已修改
| 101 | 钱七 | 18 | 100005 |
+-----+--------+------+--------+
5 rows in set (0.00 sec)
替换,如果存在冲突则替换,不存在冲突则插⼊
# 语法
REPLACE [INTO] table_name[(column [, column] ...)]
VALUES(value_list) [, (value_list)] ...
value_list: value, [, value] ...# 写⼊或更新Id为101的记录
REPLACE into student(id, name, sno) values (101, '钱七', '100101');
Query OK, 2 rows affected (0.01 sec) # 受影响两⾏# 原数据已更新
select * from student;
+-----+--------+------+--------+
| id | name | age | sno |
+-----+--------+------+--------+
| 1 | 张三 | 18 | 100001 |
| 2 | 王五 | 18 | 100002 |
| 4 | 王五 | 18 | 100003 |
| 100 | 赵六 | 18 | 100100 |
| 101 | 钱七 | 18 | 100101 |
+-----+--------+------+--------+
5 rows in set (0.00 sec)# 写⼊⼀条新数据
REPLACE into student(id, name, sno) values (102, '吴⼋', '100102');
Query OK, 1 row affected (0.01 sec) # 受影响⼀⾏# 成功写⼊
select * from student;
+-----+--------+------+--------+
| id | name | age | sno |
+-----+--------+------+--------+
| 1 | 张三 | 18 | 100001 |
| 2 | 王五 | 18 | 100002 |
| 4 | 王五 | 18 | 100003 |
| 100 | 赵六 | 18 | 100100 |
| 101 | 钱七 | 18 | 100101 |
| 102 | 吴⼋ | 18 | 100102 |
+-----+--------+------+--------+
6 rows in set (0.00 sec)

表中不能有多个主键

drop table student;
# 重构学⽣表
create table student (id bigint PRIMARY KEY auto_increment, # 定义主键name varchar(20) PRIMARY KEY # 定义主键
);
ERROR 1068 (42000): Multiple primary key defined # 报错
复合主键:由多个列共同组成的主键,主键是否冲突以多个列的组成进⾏判定
drop table student;
# 重构学⽣表
create table student (id bigint,name varchar(20),PRIMARY KEY (id, name) # 指定复合主键
);# 插⼊数据
insert into student(id, name) values (1, '张三');
Query OK, 1 row affected (0.01 sec)# 重复插⼊主键冲突,此时主键值由id和name两个列共同决定
insert into student(id, name) values (1, '张三');
ERROR 1062 (23000): Duplicate entry '1-张三' for key 'student.PRIMARY'# 修改id值插⼊成功
insert into student(id, name) values (2, '张三');
Query OK, 1 row affected (0.00 sec)select * from student;
+----+--------+
| id | name |
+----+--------+
| 1 | 张三 |
| 2 | 张三 |
+----+--------+
2 rows in set (0.00 sec)

6.FOREIGN KEY外键约束

外键⽤于定义主表和从表之间的关系
外键约束主定义在从表的列上,主表关联的列必须是主键或唯⼀约束
当定义外键后,要求从表中的外键列数据必须在主表的主键或唯⼀列存在或为null。

 

 创建班级表(主表),并初始化数据

drop table if exists class;
# 建表
create table class (id bigint primary key auto_increment,name varchar(20) not null
);# 初始化数据
insert into class (name) values ('java01'), ('java02'), ('java03'), ('C++01'), 
('C++02');
Records: 5 Duplicates: 0 Warnings: 0select * from class;
+----+--------+
| id | name |
+----+--------+
| 1 | java01 |
| 2 | java02 |
| 3 | java03 |
| 4 | C++01 |
| 5 | C++02 |
+----+--------+
5 rows in set (0.00 sec)

重构学生表(从表),加入外键约束

# 语法
foreign key (id) references class(id)drop table if exists student;# 重构表
create table student(id bigint PRIMARY KEY auto_increment, name varchar(20) not null,age int DEFAULT 18,class_id bigint,foreign key (class_id) references class(id) # 创建外键约束
);
查看表结构,Key列的值为MUL表⽰外键约束的列
desc student;
+----------+-------------+------+-----+---------+----------------+
|    Field |        Type | Null | Key | Default |          Extra |
+----------+-------------+------+-----+---------+----------------+
|       id |      bigint |   NO | PRI |    NULL | auto_increment |
|     name | varchar(20) |   NO |     |    NULL |                |
|      age |         int |  YES |     |      18 |                |
| class_id |      bigint |  YES | MUL |    NULL |                |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
正常插⼊数据
# 班级编号在主表中存在
insert into student(name, class_id) values ('张三', 1), ('李四', 2);
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0# 插⼊成功
select * from student;
+----+--------+------+----------+
| id | name | age | class_id |
+----+--------+------+----------+
|  1 | 张三 |  18 |        1 |
|  2 | 李四 |  18 |        2 |
+----+--------+------+----------+
2 rows in set (0.00 sec)
插⼊⼀个班级号为100的学⽣,由于主表中没有这个班级,插⼊失败
# 班级编号在主表中不存在,提⽰外键约束限制导致插⼊失败
insert into student(name, class_id) values ('王五', 100);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint
fails (`java01`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY 
(`class_id`) REFERENCES `class` (`id`))
插⼊班级Id为NULL的记录,可以成功,表⽰当前学⽣还没有分配置班级
# 班级为NULL
insert into student(name, class_id) values ('王五', NULL);
Query OK, 1 row affected (0.00 sec)
select * from student;
+----+--------+------+----------+
| id | name | age | class_id |
+----+--------+------+----------+
|  1 | 张三 |  18 |        1 |
|  2 | 李四 |  18 |        2 |
|  4 | 王五 |  18 |     NULL |
+----+--------+------+----------+
3 rows in set (0.00 sec)
删除主表某条记录时,从表中不能有对该记录的引⽤
# 删除从表中没有引⽤的记录,可以成功
delete from class where name = 'java03';
Query OK, 1 row affected (0.00 sec)select * from class;
+----+--------+
| id | name |
+----+--------+
| 1 | java01 |
| 2 | java02 |
| 4 | C++01 |
| 5 | C++02 |
+----+--------+
4 rows in set (0.00 sec)# 删除从表中引⽤的记录,失败
delete from class where name = 'java01';
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key 
constraint fails (`java01`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY 
(`class_id`) REFERENCES `class` (`id`))
删除主表时要先删除从表
# 从表存在是不能删除主表
drop table class;
ERROR 3730 (HY000): Cannot drop table 'class' referenced by a foreign key 
constraint 'student_ibfk_1' on table 'student'.# 删除从表
drop table student;
Query OK, 0 rows affected (0.02 sec)# 再删除主表,成功
drop table class;
Query OK, 0 rows affected (0.01 sec)

7.CHECK约束

可以应⽤于⼀个或多个列,⽤于限制列中可接受的数据值,从⽽确保数据的完整性和准确性。
在8.0.16开始全⾯⽀持CHECK约束,之前的版本会忽略CHECK的定义
重构学⽣表,有以下要求,年龄不能⼩于16岁,性别只能是男或⼥
drop table if exists student;# 加⼊CHECK约束
create table student(id bigint PRIMARY KEY auto_increment, # 设置⾃增主键name varchar(20) not null,age int DEFAULT 18,gender char(1),check (age >= 16),check (gender = '男' or gender = '⼥')
);# 正常插⼊数据
mysql> insert into student(name, age, gender) values ('张三', 17, '男'), ('李
四', 19, '⼥');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0mysql> select * from student;
+----+--------+------+--------+
| id | name | age | gender |
+----+--------+------+--------+
| 1 | 张三 | 17 | 男 |
| 2 | 李四 | 19 | ⼥ |
+----+--------+------+--------+
2 rows in set (0.00 sec)# 插⼊年龄⼩于16岁的记录,失败
mysql> insert into student(name, age, gender) values ('张三', 15, '男');
ERROR 3819 (HY000): Check constraint 'student_chk_1' is violated.# 插⼊性别的值不是男或⼥的记录,失败
mysql> insert into student(name, age, gender) values ('张三', 17, '1');
ERROR 3819 (HY000): Check constraint 'student_chk_2' is violated.
创建新表,c1的值不能为0,c2的值必须⼤于0,c3的值不⼩于c2
# 列与列之间也可以⽐较,需要在单独⼀⾏中定义
create table t_check (c1 int check(c1 <> 0),c2 int check(c2 > 0),c3 int,check(c3 >= c2)
);# 插⼊正常数据
mysql> insert into t_check values (-1, 3, 10);
Query OK, 1 row affected (0.01 sec)mysql> select * from t_check;
+------+------+------+
| c1 | c2 | c3 |
+------+------+------+
| -1 | 3 | 10 |
+------+------+------+
1 row in set (0.00 sec)# c1 = 0时,失败
mysql> insert into t_check values (0, 5, 6);
ERROR 3819 (HY000): Check constraint 't_check_chk_1' is violated.# c2 <= 0时,失败
mysql> insert into t_check values (2, -10, 10);
ERROR 3819 (HY000): Check constraint 't_check_chk_2' is violated.# c3 < c2时,失败
mysql> insert into t_check values (2, 10, 9);
ERROR 3819 (HY000): Check constraint 't_check_chk_3' is violated.

相关文章:

MySQL-数据库约束

1.约束类型 类型说明NOT NULL非空约束 指定非空约束的列不能存储NULL值 DEFAULT默认约束当没有给列赋值时使用的默认值UNIQUE唯一约束指定唯一约束的列每行数据必须有唯一的值PRIMARY KEY主键约束NOT NULL和UNIQUE的结合&#xff0c;可以指定一个列霍多个列&#xff0c;有助于…...

线性表三——队列queue

#include<bits/stdc.h> using namespace std; int n,m; queue<int> q;int main(){cin>>n>>m;for(int i1;i<n;i) q.push(i);int k0;while(!q.empty()){k;if(k<m)//从队头出来&#xff0c;再次回到队尾{int idq.front();//记录出去的编号 q.pop();…...

算法笔记(十)——队列+宽搜

文章目录 N 叉数的层序遍历二叉树的锯齿形层序遍历二叉树最大宽度在每个树行中找最大值 BFS是图上最基础、最重要的搜索算法之一&#xff1b; 每次都尝试访问同一层的节点如果同一层都访问完了&#xff0c;再访问下一层 BFS基本框架 void bfs(起始点) {将起始点放入队列中;标记…...

webpack配置全面讲解【完整篇】

文章目录 前言webpack 核心包&#xff1a;配置文件导出三种方式&#xff1a;在线配置 webpack配置文件解析&#xff1a;入口&#xff08;Entry&#xff09;&#xff1a;输出&#xff08;Output&#xff09;&#xff1a;加载器&#xff08;Loaders&#xff09;&#xff1a;插件&…...

十、kotlin的协程

协程 基本概念定义组成挂起和恢复结构化并发协程构建器作用域构建器挂起函数阻塞与非阻塞runBlocking全局协程像守护线程 Job的生命周期 常用函数延时和等待启动和取消启动取消 暂停 协程启动调度器启动方式启动模式线程上下文继承的定义继承的公式 协程取消与超时取消挂起点取…...

vscode qt 最新开发环境配置, 基于最新插件 Qt All Extensions Pack

qt 之前发布了vscode qt offical ,但是最新更新中将其升级改为了几个不同的插件&#xff0c;功能更强大 1. 前置条件 qt 已安装 2. 插件安装 打开vscode 插件安装&#xff0c;搜索qt 会看到很多qt插件&#xff0c;直接选择Qt All Extensions Pack 安装 会安装qt环境所需的…...

【MySQL】Ubuntu环境下MySQL的安装与卸载

目录 1.MYSQL的安装 2.MySQL的登录 3.MYSQL的卸载 4.设置配置文件 1.MYSQL的安装 首先我们要看看我们环境里面有没有已经安装好的MySQL 我们发现是默认是没有的。 我们还可以通过下面这个命令来确认有没有mysql的安装包 首先我们得知道我们当前的系统版本是什么 lsb_…...

C# StringBuilder类:高效构建和修改字符串的利器

C# 中的 StringBuilder 类是一个可变的字符序列&#xff0c;用于高效地构建和修改字符串。与字符串&#xff08;string&#xff09;不同&#xff0c;字符串在 C# 中是不可变的&#xff0c;这意味着每次修改字符串&#xff08;如拼接、替换等操作&#xff09;时&#xff0c;都会…...

AVL平衡树(AVL Tree)

**场景&#xff1a;课堂讨论** --- **小明&#xff08;ESFP学生&#xff09;**&#xff1a;张老师&#xff0c;为什么AVL树&#xff08;AVL Tree&#xff09;中的旋转操作这么重要&#xff1f;感觉只是节点的移动&#xff0c;有没有什么实际意义&#xff1f; **张老师&#…...

【python实操】python小程序之两数取大值以及login登录

引言 python小程序之两数取大值以及login登录 文章目录 引言一、两数取大值1.1 题目1.2 代码1.3 代码解释 二、login登录2.1 题目2.2 代码2.3 代码解释 三、思考3.1 两数取大值3.2 login登录 一、两数取大值 1.1 题目 定义一个函数my_max&#xff0c;包含两个参数, 函数的作用…...

Pikachu-File Inclusion-远程文件包含

远程文件包含漏洞 是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的&#xff0c;因此漏洞一旦存在&#xff0c;危害性会很大。但远程文件包含漏洞的利用条件较为苛刻&#xff1b;因此&#xff0c;在web应用系统的功能设计上尽量不要让前端用户直接传变…...

TIM(Timer)定时器的原理

一、介绍 硬件定时器的工作原理基于时钟信号源提供稳定的时钟信号作为计时器的基准。计数器从预设值开始计数&#xff0c;每当时钟信号到达时计数器递增。当计数器达到预设值时&#xff0c;定时器会触发一个中断信号通知中断控制器处理相应的中断服务程序。在中断服务程序中&a…...

Microsoft Visual Studio有多油饼

#1 Microsoft Visual Studio C 2023&#xff1a; 必须安装在C盘 为啥&#xff1f; 安其他盘能亖啊&#xff1f; 真有病 #2 Microsoft Visual Studio C 2013&#xff1a; 每个硬盘必须都腾出至少8个G的空间 不是我安在这个盘不就是为了其他盘没空间吗&#xff1f; 合着…...

Golang | Leetcode Golang题解之第452题用最少数量的箭引爆气球

题目&#xff1a; 题解&#xff1a; func findMinArrowShots(points [][]int) int {if len(points) 0 {return 0}sort.Slice(points, func(i, j int) bool { return points[i][1] < points[j][1] })maxRight : points[0][1]ans : 1for _, p : range points {if p[0] > …...

Python 从入门到实战35(进程-multiprocessing模块)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;可以熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了turtle库绘制图画操作的相关知识。今天学习一下…...

“米哈游悄然布局未来科技:入股星海图,共绘具身智能机器人新篇章“

米哈游悄然入股具身智能机器人公司:技术布局与未来展望 近日,米哈游阿尔戈科技有限公司宣布入股具身智能机器人公司星海图,这一消息在行业内引起了广泛关注。米哈游,这家以游戏开发而闻名的企业,近年来正逐步扩大其在人工智能和新兴科技领域的投资布局,此次入股星海图正是…...

基于spring boot的篮球论坛系统

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…...

华夏ERP账号密码泄露漏洞

漏洞描述 华夏ERP账号密码泄露漏洞 漏洞复现 FOFA "jshERP-boot" POC IP/jshERP-boot/user/getAllList;.ico...

Android问题笔记五十:构建错误-AAPT2 aapt2-7.0.2-7396180-windows Daemon

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…...

CAD 3dsmax maya等autodesk系列专用卸载修复工具AutoRemove,一键完全彻底卸载删除软件的专用卸载工具

AutoRemove 是一款功能强大的软件卸载工具&#xff0c;专门设计用于彻底清除Autodesk系列软件&#xff0c;如AutoCAD、3ds Max、Revit、Maya、Inventor、Navisworks、civil 3d、sketchbook、Architecture、Electrical、Mechanical、、等&#xff0c;从您的系统中。它通过深度清…...

python中的函数介绍

文章目录 1.函数1.1 语法格式1.2 函数参数1.3 函数的返回值1.4 变量作用域1.5 函数的执行过程1.6 链式调用1.7 嵌套调用1.8 函数栈帧1.9 函数递归1.10 参数默认值1.11 关键词参数 1.函数 无论是编程中的函数还是数学中的函数&#xff0c;本质都是差不多的&#xff0c;丢给函数…...

LinuxO(1)调度算法

概念 在Linux中&#xff0c;O(1)调度算法是一种进程调度算法。O(1)表示算法的时间复杂度是常数级别的&#xff0c;与系统中的进程数量无关。 运行队列结构 他采用了两个运行队列&#xff0c;一个活动队列和一个过期队列。活动队列中的进程是有资格获取CPU时间片的进程&#x…...

安防监控/视频系统EasyCVR视频汇聚平台如何过滤134段的告警通道?

视频汇聚/集中存储EasyCVR安防监控视频系统采用先进的网络传输技术&#xff0c;支持高清视频的接入和传输&#xff0c;能够满足大规模、高并发的远程监控需求。平台支持国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为…...

SDKMAN!安装Maven

一、通过SDKMAN!正常安装 查看maven版本 sdk list maven安装maven 3.6.3版本 sdk install maven 3.6.3查看maven 3.6.3安装目录 sdk home maven 3.6.3安装过程中可能会失败&#xff0c;出现tmp临时目录中存在临时文件 # 移除临时文件&#xff0c;不要手动删除&#xff0c;…...

[NeurIPS 2022] STaR: Bootstrapping Reasoning With Reasoning

Contents IntroductionMethodExperimentsReferences Introduction CoT 推理可以有效提升 LLM 推理能力&#xff0c;但 few-shot prompting 无法发挥 CoT 的全部潜力&#xff0c;训练能够生成中间推理步骤 (i.e., rationale) 的 LLM 又需要大量人工标注 rationale&#xff0c;为…...

C++中对象的构造与析构

目录 一、引言 二、构造函数详解 1.构造函数的作用 2.构造函数的调用时机 3.构造函数的分类 三、析构函数详解 1.析构函数的作用 2.析构函数的调用时机 四、实例分析 五、总结 本文将详细讲解C中对象的构造和析构过程&#xff0c;包括构造函数、析构函数的作用及其调用时机…...

算法笔记(九)——栈

文章目录 删除字符串中的所有相邻重复项比较含退格的字符串基本计算机II字符串解码验证栈序列 栈是一种先进后出的数据结构&#xff0c;其操作主要有 进栈、压栈&#xff08;Push&#xff09; 出栈&#xff08;Pop&#xff09; 常见的使用栈的算法题 中缀转后缀逆波兰表达式求…...

动态SLAM总结一

文章目录 方法分类&#xff1a;OctoMap&#xff1a;&#xff08;2013&#xff09;UFOMap&#xff1a;&#xff08;2020&#xff09;Removert&#xff1a;&#xff08;2020&#xff09;ERASOR&#xff1a;&#xff08;2021&#xff09;DynamicFilter&#xff1a;&#xff08;202…...

HTB:Mongod[WriteUP]

连接至HTB服务器并启动靶机 靶机IP&#xff1a;10.129.99.33 分配IP&#xff1a;10.10.16.12 1.How many TCP ports are open on the machine? 使用nmap对靶机进行全端口TCP脚本、服务扫描&#xff1a; nmap -sC -sV -T4 -p- {TARGET_IP} 可以看到靶机共开放TCP端口2个&…...

DenseNet算法:口腔癌识别

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 一 DenseNet算法结构 其基本思路与ResNet一致&#xff0c;但是它建立的是前面所有层和后面层的密集连接&#xff0c;它的另一大特色是通过特征在channel上的连接来实现特征重用。 二 设计理念 三…...