Mysql数据库约束的概述 , 逐渐约束 , 主键自增 , 表关系的概念和外键 ,多表关系约束介绍和使用

news2025/1/16 15:42:22

约束和表设计

1、DQL查询语句-limit语句(掌握)

目标

能够掌握limit语句的使用

讲解

作用:

LIMIT限制的意思,所以LIMIT`的作用就是限制查询记录的条数。

LIMIT语句格式:

select * from 表名 limit  offset, row_count;
mysql中limit的用法:返回前几条或者中间某几行数据
-- 1 表示分页查询的索引,对应数据表是第二行数据,4表示每页显示4条数据
select * from 表名 limit 1,41表示索引,注意这里的索引从0开始。对应表中第一行数据
4表示查询记录数。
上述就表示从第2条记录开始查询,一共查询4条,即到第5条。

具体步骤:

准备数据:

CREATE TABLE student3 (
  id int,
  name varchar(20),
  age int,
  sex varchar(5),
  address varchar(100),
  math int,
  english int
);

INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);
  • 查询学生表中数据,跳过前面1条,显示4条
我们可以认为跳过前面1条,取4条数据
SELECT * FROM student3 LIMIT 1,4;

在这里插入图片描述

LIMIT的使用场景:分页

比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的条数。假设我们一每页显示5条记录的方式来分页。

在这里插入图片描述

假设我们一每页显示5条记录的方式来分页,SQL语句如下:

-- 每页显示5条
-- 第一页: LIMIT 0,5;	跳过0条,显示5条
-- 第二页: LIMIT 5,5;  跳过5条,显示5条
-- 第三页: LIMIT 10,5; 跳过10条,显示5条
SELECT * FROM student3 LIMIT 0,5;
SELECT * FROM student3 LIMIT 5,5;
SELECT * FROM student3 LIMIT 10,5;

在这里插入图片描述

注意

  • 如果第一个参数是0可以简写:
    SELECT * FROM student3 LIMIT 0,5;
    SELECT * FROM student3 LIMIT 5;
  • LIMIT 10,5; – 不够5条,有多少显示多少

小结

  1. LIMIT语句的使用格式?

    SELECT 字段 FROM 表名 LIMIT 索引, 显示条数;
    索引:从0开始,一直变化
    显示条数:每页显示的行数,固定不变的
    
  2. SELECT 字段名(5) FROM 表名(1) WHERE 条件(2) GROUP BY 分组列名(3) HAVING 条件(4) ORDER BY 排序列名(6) LIMIT 跳过行数, 返回行数(7);
    执行顺序:1234567
    

2、数据库约束的概述

目标

能够说出数据库约束的作用

讲解

数据库约束的作用

​ 对表中的数据进行进一步的限制,保证数据的正确性有效性完整性

约束种类
  • PRIMARY KEY: 主键约束
  • UNIQUE: 唯一约束
  • NOT NULL: 非空约束
  • DEFAULT: 默认值 了解
  • FOREIGN KEY: 外键约束

小结

  1. 数据库约束的作用?
    对表中的数据进行进一步的限制,保证数据的正确性有效性完整性

3、主键约束(掌握)

目标

  1. 能够说出主键约束的作用
  2. 能够添加主键

讲解

主键的作用

用来唯一标识一条记录

为什么需要主键约束

有些记录的 name,age,score 字段的值都一样时,那么就没法区分这些数据,造成数据库的记录不唯一,这样就不方便管理数据。
在这里插入图片描述
在这里插入图片描述

每张表都应该有一个主键,并且每张表只能有一个主键。

哪个字段作为表的主键

​ 通常不用业务字段作为主键,单独给每张表设计一个id的字段,把id作为主键。主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行。

创建主键

主键:PRIMARY KEY
主键的特点

  • 主键必须包含唯一的值
  • 主键列不能包含NULL值

创建主键方式

  1. 在创建表的时候给字段添加主键

    字段名 字段类型 PRIMARY KEY
    
  2. 在已有表中添加主键(了解)

    ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
    

具体操作:

  • 创建表学生表st5, 包含字段(id, name, age)将id做为主键
CREATE TABLE st5 (
	id INT PRIMARY KEY, -- id是主键
	NAME VARCHAR(20),
	age INT
);

在这里插入图片描述

  • 添加数据
INSERT INTO st5 (id, NAME,age) VALUES (1, '唐伯虎',20);
INSERT INTO st5 (id, NAME,age) VALUES (2, '周文宾',24);
INSERT INTO st5 (id, NAME,age) VALUES (3, '祝枝山',22);
INSERT INTO st5 (id, NAME,age) VALUES (4, '文征明',26);
  • 插入重复的主键值
-- 主键是唯一的不能重复:Duplicate entry '1' for key 'PRIMARY'
INSERT INTO st5 (id, NAME,age) VALUES (1, '文征明2',30);
  • 插入NULL的主键值
-- 主键是不能为空的:Column 'id' cannot be null
INSERT INTO st5 (id, NAME,age) VALUES (NULL, '文征明3',18);

小结

  1. 说出主键约束的作用?唯一,区分一条记录

  2. 主键的特点?唯一,不能为NULL

  3. 添加主键?
    字段名 字段类型 PRIMARY KEY

    ALTER TABLE 表名 ADD PRIMARY KEY(字段名);

4、主键自增

目标

能够设置主键为自动增长

讲解

​ 主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值

字段名 字段类型 PRIMARY KEY AUTO_INCREMENT

AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)

具体操作:

  • 创建学生表st6, 包含字段(id, name, age)将id做为主键并自动增长
CREATE TABLE st6 (
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20),
	age INT
);
  • 插入数据
-- 主键默认从1开始自动增长
INSERT INTO st6 (NAME, age) VALUES ('唐僧', 22);
INSERT INTO st6 (NAME, age) VALUES ('孙悟空', 26);
INSERT INTO st6 (NAME, age) VALUES ('猪八戒', 25);
INSERT INTO st6 (NAME, age) VALUES ('沙僧', 20);

在这里插入图片描述

DELETE和TRUNCATE的区别

  • DELETE 删除表中的数据,但不重置AUTO_INCREMENT的值。
    在这里插入图片描述

  • TRUNCATE 摧毁表,重建表,AUTO_INCREMENT重置为1
    在这里插入图片描述

小结

  1. 设置主键为自动增长格式?
    字段名 数据类型 PRIMARY KEY AUTO_INCREMENT

5、唯一约束

目标

  1. 能够说出唯一约束的作用
  2. 能够添加唯一约束

讲解

唯一约束的作用

在这张表中这个字段的值不能重复

唯一约束的基本格式
字段名 字段类型 UNIQUE

具体步骤:

  • 创建学生表st7, 包含字段(id, name),name这一列设置唯一约束,不能出现同名的学生
CREATE TABLE st7 (
	id INT,
	NAME VARCHAR(20) UNIQUE
);
  • 添加一些学生
INSERT INTO st7 VALUES (1, '貂蝉');
INSERT INTO st7 VALUES (2, '西施');
INSERT INTO st7 VALUES (3, '王昭君');
INSERT INTO st7 VALUES (4, '杨玉环');

-- 插入相同的名字出现name重复: Duplicate entry '貂蝉' for key 'name'
INSERT INTO st7 VALUES (5, '貂蝉');

-- 出现多个null的时候会怎样?因为null是没有值,所以不存在重复的问题
INSERT INTO st3 VALUES (5, NULL);
INSERT INTO st3 VALUES (6, NULL);

小结

  1. 说出唯一约束的作用?让这个字段的值不能重复,多个null不算重复
  2. 添加唯一约束格式?字段名 字段类型 UNIQUE

6、非空约束

目标

  1. 能够说出非空约束的作用
  2. 能够添加非空约束

讲解

非空约束的作用

这个字段必须设置值,不能是NULL

非空约束的基本语法格式
字段名 字段类型 NOT NULL

具体操作:

  • 创建表学生表st8, 包含字段(id,name,gender)其中name不能为NULL
CREATE TABLE st8 (
	id INT,
	NAME VARCHAR(20) NOT NULL,
	gender CHAR(2)
);
  • 添加一些完整的记录
INSERT INTO st8 VALUES (1, '郭富城', '男');
INSERT INTO st8 VALUES (2, '黎明', '男');
INSERT INTO st8 VALUES (3, '张学友', '男');
INSERT INTO st8 VALUES (4, '刘德华', '男');

-- 姓名不赋值出现姓名不能为null: Column 'name' cannot be null
INSERT INTO st8 VALUES (5, NULL, '男');

小结

1.非空约束的格式:

​ 字段名 数据类型 NOT NULL

2.问题:
主键约束和唯一约束并且非空的区别:
id primary key 主键约束 可以实现主键自增,一般数据表只有id是主键约束
name unique not null 唯一并且非空 不能实现主键自增 数据表中很多字段都可以是唯一 非空

7、默认值(了解)

目标

  1. 能够说出默认值的作用
  2. 能够给字段添加默认值

讲解

默认值的作用

往表中添加数据时,如果不指定这个字段的数据,就使用默认值

默认值格式
字段名 字段类型 DEFAULT 默认值

具体步骤:

  • 创建一个学生表 st9,包含字段(id,name,address), 地址默认值是广州
CREATE TABLE st9 (
	id INT,
	NAME VARCHAR(20),
	address VARCHAR(50) DEFAULT '广州'
);
  • 添加一条记录,使用默认地址
INSERT INTO st9 (id, NAME) VALUES (1, '刘德华');

在这里插入图片描述

  • 添加一条记录,不使用默认地址
INSERT INTO st9 VALUES (2, '张学友', '香港'); 

小结

  1. 说出默认值的作用?不添加这个字段,就会使用默认值
  2. 给字段添加默认值格式? 字段名 字段类型 DEFAULT 默认值

8、表关系的概念和外键约束

在真实的开发中,一个项目中的数据,一般都会保存在同一个数据库中,但是不同的数据需要保存在不同的数据表中。这时不能把所有的数据都保存在同一张表中。

那么在设计保存数据的数据表时,我们就要根据具体的数据进行分析,然后把同一类数据保存在同一张表中,不同的数据进行分表处理。

数据之间必然会有一定的联系,我们把不同的数据保存在不同的数据表中之后,同时还要在数据表中维护这些数据之间的关系。这时就会导致表和表之间必然会有一定的联系。这时要求设计表的人员,就需要考虑不同表之间的具体关系。

在数据库中,表总共存在三种关系,这三种关系如下描述:真实的数据表之间的关系:

多对多关系、一对多(多对一)、一对一(极少)。(一对一关系就是我们之前学习的Map集合的key-value关系)

多对多(掌握)

例如:程序员和项目的关系、老师和学生,学生和课程,顾客和商品的关系等

在这里插入图片描述

分析:

程序员和项目:

一个程序员可以参与多个项目的开发,一个项目可以由多个程序员来开发。这种关系就称为多对多关系。

当我们把数据之间的关系分析清楚之后,一般我们需要通过E(Entity)-R(relation)图来展示。 实体 关系 图

一个Java对象,可以对应数据库中的一张表,而Java中类的属性,可以对应表中的字段。

而在E-R图中:

一张表,可以称为一个实体,使用矩形表示,每个实体的属性(字段,表的列),使用椭圆表示。

表和表之间的关系,使用菱形表示。

实体(程序员):编号、姓名、薪资。

实体(项目):编号、名称。

程序员和项目存在关系:一个程序员可以开发多个项目,一个项目可以被多个程序员开发。

说明:如果两张表是多对多的关系,需要创建第三张表,并在第三张表中增加两列,引入其他两张表的主键作为自己的外键。

关系图总结:

在这里插入图片描述

创建表的sql语句:

-- 创建程序员表
create table coder(
	id int primary key auto_increment,
	name varchar(50),
	salary double
);
-- 创建项目表
create table project(
	id int primary key auto_increment,
	name varchar(50)
);
-- 创建中间关系表
create table coder_project(
	coder_id int,
	project_id int
);


-- 添加测试数据
insert into coder values(1,'张三',12000);
insert into coder values(2,'李四',15000);
insert into coder values(3,'王五',18000);

insert into project values(1,'QQ项目');
insert into project values(2,'微信项目');

insert into coder_project values(1,1);
insert into coder_project values(1,2);
insert into coder_project values(2,1);
insert into coder_project values(2,2);
insert into coder_project values(3,2);

小结:

1.多对多关系,需要创建第三张表来维护两张主表的关系。在中间表中起码要有两列来自于主表的主键。

外键约束(掌握)

创建第三张关系表即中间表,来维护程序员表和项目表之间的关系。

使用中间表的目的是维护两表多对多的关系:

1 中间表插入的数据 必须在多对多的主表中存在。

2 如果主表的记录在中间表维护了关系,就不能随意删除。如果可以删除,中间表就找不到对应的数据了,这样就没有意义了。

上述是中间表存在的意义,可是我们这里所创建的中间表并没有起到上述的作用,而是存在缺点的:

缺点1: 我们是可以向中间表插入不存在的项目编号和程序员编号的。

在这里插入图片描述

说明:在程序员和项目表中是不存在编号是30和20的,但是这里依然可以插入不存在的编号。这样做是不可以的,失去了中间表的意义。

缺点2 : 如果中间表存在程序员的编号, 我们是可以删除程序员表对应的记录的。

在中间表中是存在编号为1的程序员的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可是我们却可以删除程序员表coder中的编号为1的程序员:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编号为1的程序员张三已经被我们删除,但是在中间表coder_project中仍然还存在编号为1的程序员,这样对于中间表没有意义了。

说明:

创建第三张表的语句:

create table coder_project(

   coder_id int ,--这个外键来自于coder表中的主键

   project_id int--这个外键来自于project表中的主键

);

我们在创建第三张关系表时,表中的每一列,都是在使用其他两张表中的列,这时我们需要对第三张表中的列进行相应的约束。

当前第三张表中的列由于都是引用其他表中的列,我们把第三张表中的这些列称为引用其他表的外键约束。

给某个表中的某一列添加外键约束:

简化语法:

foreign key( 当前表中的列名 )  references 被引用表名(被引用表的列名);
foreign key( coder_id )  references coder(id);

注意:一般在开发中,被引用表的列名都是被引用表中的主键。

举例:

constraint [外键约束名称] foreign key(当前表中的列名) references  被引用表名(被引用表的列名)
举例:constraint coder_project_id foreign key(coder_id) references coder(id);

关键字解释
constraint: 添加约束,可以不写
foreign key(当前表中的列名): 将某个字段作为外键
references 被引用表名(被引用表的列名) : 外键引用主表的主键

给第三张表添加外键约束有两种方式:

第一种方式:给已经存在的表添加外键约束:

-- 来自于程序员表
alter table coder_project add constraint c_id_fk foreign key(coder_id) references coder(id);
-- 来自于项目表
alter table coder_project add constraint p_id_fk foreign key(project_id) references project(id);

第二种方式:创建表时就添加外键约束:

create table coder_project(
	coder_id int,
	project_id int,
    constraint c_id_fk foreign key(coder_id) references coder(id),
    constraint p_id_fk foreign key(project_id) references project(id)
);

了解完如何给第三张表添加外键约束以后,我们就开始给上述创建好的第三张表添加外键约束。

在添加外键约束之前,由于刚才已经修改了表中的数据,所以我们先清空三张表,然后在添加外键约束。

操作步骤:

1、清空上述三张表:

在这里插入图片描述

2、增加外键约束:

在这里插入图片描述

3、添加完外键约束以后,就会在可视化工具中的架构设计器上查看表之间的关系

先选中表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后点击右下角:

在这里插入图片描述

最后的表关系如下:

在这里插入图片描述

3、向三张表中分别插入数据:

-- 插入数据

insert into coder values(null,'张三',12000);
insert into coder values(null,'李四',15000);
insert into coder values(null,'王五',18000);

insert into project values(null,'QQ项目');
insert into project values(null,'微信项目');

insert into coder_project values(1,1);
insert into coder_project values(1,2);
insert into coder_project values(2,1);
insert into coder_project values(2,2);
insert into coder_project values(3,1);

4、测试外键约束是否起到作用:

A:执行以下语句:

在这里插入图片描述

B:执行以下语句:

在这里插入图片描述

再次执行上述语句的时候,发现报错了,而数据库表中的数据都没有改变,说明外键约束起到了作用。

小结:

1.为何引入外键约束?

让表的数据有效性,正确性。提高查询效率。

2.添加外键约束语法:

constraint 外键约束名 foreign key(当前表的字段名) references 主表(主键);

3.有了外键约束,那么要求添加数据需要先添加主表,然后添加从表。

4.有了外键约束,那么要求删除数据需要先删除从表,然后再删除主表。

外键的级联(掌握)

在修改和删除主表的主键时,同时更新或删除从表的外键值,称为级联操作
ON UPDATE CASCADE – 级联更新,主键发生更新时,外键也会更新
ON DELETE CASCADE – 级联删除,主键发生删除时,外键也会删除

具体操作:

  • 删除三张表coder、coder_project、project表
  • 重新创建三张表,添加级联更新和级联删除
-- 创建程序员表
create table coder(
	id int primary key auto_increment,
	name varchar(50),
	salary double
);
-- 创建项目表
create table project(
	id int primary key auto_increment,
	name varchar(50)
);
create table coder_project(
	coder_id int,
	project_id int,
    -- 添加外键约束,并且添加级联更新和级联删除
    constraint c_id_fk foreign key(coder_id) references coder(id) ON UPDATE CASCADE ON DELETE CASCADE,
    constraint p_id_fk foreign key(project_id) references project(id) ON UPDATE CASCADE ON DELETE CASCADE
);

再次添加数据到三张表:

-- 添加测试数据
insert into coder values(1,'张三',12000);
insert into coder values(2,'李四',15000);
insert into coder values(3,'王五',18000);

insert into project values(1,'QQ项目');
insert into project values(2,'微信项目');

insert into coder_project values(1,1);
insert into coder_project values(1,2);
insert into coder_project values(2,1);
insert into coder_project values(2,2);
insert into coder_project values(3,2);

需求1:修改主表coder表的id为3变为4.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

需求2:删除主表coder表的id是4的行数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

小结:

级联更新:ON UPDATE CASCADE 主键修改后,外键也会跟着修改

级联删除:ON DELETE CASCADE 主键删除后,外键对应的数据也会删除

一对多(掌握)

一对多的关系表:其中也有2个实体,但是其中A实体中的数据可以对应另外B实体中的多个数据,反过来B实体中的多个数据只能对应A实体中的一个数据。

例如:作者和小说关系,班级和学生,部门和员工,客户和订单

分析:

作者和小说:

一个作者可以写多部小说,但每一部小说,只能对应具体的一个作者。

具体的关系如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意:如果是一对多的关系,那么设计表的时候需要在多的一方增加一列,引入一的一方的主键作为自己的外键。

一对一

一对一关系表在实际开发中使用的并不多,其中也是2个实体,其中A实体中的数据只能对应B实体中的一个数据,同时B实体中的数据也只能对应A实体中的一个数据。例如:人和身份证对应关系,老公和老婆的对应关系。

而一对一在建表的时候,可以在任意一方的表中添加另外一方的主键作为外键即可。

建表原理如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

小结:

1.多对多:创建第三张表维护两张主表的关系,在第三张表中起码要有两列来自于两张主表的主键

2.一对多:在多方增加一列,来自于一方的主键作为外键

3.一对一:在任意一方将另一方的主键作为外键

9、表设计案例(练习)

目标

设计学生成绩管理系统数据表(按照给定需求设计即可)

1、每个教师可以教多门课程

2、每个课程由一个老师负责

3、每门课程可以由多个学生选修

4、每个学生可以选修多门课程

5、学生选修课程要有成绩

讲解

具体操作:

1)分析:

​ 当我们拿到一个需求之后,首先应该分析这个需求中到底有多少名词,或者是当前这个需求中可以抽象出具体几个E-R图中的实体对象。

分析需求中存在的实体: 实体使用矩形表示。

学生、课程、老师。

当分析清楚具体的实体之后,接着要分析实体具备哪些属性?属性使用椭圆形表示。

学生:学号、姓名等。

课程:课程编号、课程名称等。

老师:工号、姓名等。

最后就要考虑实体和实体之间的关系问题:

老师和课程之间:一对多关系。一个老师可以教授多门课程,一个课程只能由一个老师负责。

学生和课程之间:多对多关系。每个学生可以选修多门课程,每门课程可以被多个学生来选修。

2)关于设计学生成绩管理系统的数据表的E-R图如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3)创建表sql语句:

画完E-R图之后,接下来我们就根据E-R图来创建具体的数据库表了。

学生选课管理系统的表创建:

思考:先创建哪张表?

不能先创建课程表,因为课程表需要有教师的工号,也不能创建中间表,因为中间表需要课程表和学生表的id,所以我们可以创建表的顺序如下:

– 1、教师表

– 2、课程表

– 3、学生表

– 4、学生课程表(中间关系表要有成绩属性)

创建表的语句如下:

-- 1、教师表
create table teacher(
	id int primary key auto_increment,
	name varchar(50)
);
-- 2、课程表
create table course(
	id int primary key auto_increment,
	name varchar(50),
	teacher_id int,
	foreign key(teacher_id) references teacher(id)
);
-- 3、学生表
create table student(
	id int primary key auto_increment,
	name varchar(50)
);
-- 4、学生课程表(中间关系表要有成绩属性)
create table studentcourse(
	student_id int,
	course_id int,
	score double,
	foreign key(student_id) references student(id),
	foreign key(course_id) references course(id)
);

创建表之后的结构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

相关文章

轻松恢复丢失数据EasyRecovery你的数据守护神

数据丢失?别怕!EasyRecovery来帮忙 大家好呀,今天我要分享一个我超级喜欢的数据恢复软件——EasyRecovery!🎉 如果你也经历过误删文件、硬盘格式化或是意外丢失重要数据的尴尬和焦虑,那你一定要看看这个神器…

Bytebase 对接本地部署的 llama3 开启ChatSQL功能

Bytebase 是为开发人员、测试、DBA和运维工程师构建的数据库 DevOps 领域的,类 GitLab/GitHub 平台。 这篇文章主要关注 Bytebase SQL 编辑器中的 AI 增强功能。使用此功能您可以使用自然语言在 Bytebase SQL 编辑器中查询数据库。同时还能给出针对查询的索引建议&…

千呼新零售2.0【更新日志】持续更新ing

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货等连锁店使用。 详细介绍请查看下…

【CSS in Depth 2 精译】1.5 渐进式增强

文章目录 1.5 渐进式增强1.5.1 利用层叠规则实现渐进式增强1.5.2 渐进式增强的选择器1.5.3 利用 supports() 实现特性查询启用浏览器实验特性 1.5 渐进式增强 要用好 CSS 这样一门不断发展演进中的语言,其中一个重要的因素就是要与时俱进,及时了解哪些功…

HTML静态网页成品作业(HTML+CSS)——动漫猪猪侠网页(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有4个页面。 二、作品演示 三、代…

测试辅助工具(抓包工具)的使用4 之 断点

抓包作用3(绕过界面限制测试) 1.为什么要绕过界面限制做测试? 原因:界面限制导致部分异常数据无法输入 2.如何绕过界面限制做测试? 绕过界面限制直接测试服务器 步骤: 1.设置断点 2.修改请求 3.修改响应…

微型操作系统内核源码详解系列五(五):cm3下Pendsv切换任务上篇

系列一:微型操作系统内核源码详解系列一:rtos内核源码概论篇(以freertos为例)-CSDN博客 系列二:微型操作系统内核源码详解系列二:数据结构和对象篇(以freertos为例)-CSDN博客 系列…

React的路由(ReactRouter)-路由导航跳转

1.第一步 // createBrowserRouter路由 RouterProvider组件 import {createBrowserRouter,RouterProvider} from react-router-dom // 创建router实例对象&#xff0c;并配置路由对应关系 const routercreateBrowserRouter([{path:/login,element:<div>我是登录页</di…

grafana 通过自定义API获取数据

一、安装插件 安装infinity插件 二、配置数据源 三、配置图表 1、数据 这边提供一个go的demo package mainimport ("math/rand""net/http""time""github.com/gin-gonic/gin" )func main() {router : gin.Default()rand.Seed(time.…

浅谈红队攻防之道-office文件免杀

最完美的状态&#xff0c;不是你从不失误&#xff0c;而是你从没放弃成长。 ∙菜单栏&#xff1a;集成了Cobalt Strike的所有功能。 ∙快捷功能区&#xff1a;列出了常用功能。 ∙目标列表区&#xff1a;根据不同的显示模式&#xff0c;显示已获取权限的主机及目标主机。 ∙…

“序列优化探究:最长上升子序列的算法发现与应用“

最长上升子序列 最长上升子序列是指在一个给定序列中&#xff0c;找到一个最长的子序列&#xff0c;使得子序列中的元素单调递增。例如&#xff0c;序列 [1, 3, 5, 4, 7] 的最长上升子序列是 [1, 3, 5, 7]&#xff0c;长度为4。 这是一个经典的动态规划问题。 假设dp[i]表示…

day2-web安全漏洞攻防-基础-弱口令、HTML注入(米斯特web渗透测试)

day2-web安全漏洞攻防-基础-弱口令、HTML注入&#xff08;米斯特web渗透测试&#xff09; 1&#xff0c;漏洞2&#xff0c;弱口令3&#xff0c;爆破&#xff08;1&#xff09;Burpsuite&#xff08;2&#xff09;攻击类型 4&#xff0c;HTML针剂注入 1&#xff0c;漏洞 挖掘和利…

Adobe Photoshop图像处理软件下载安装,ps 2024版本安装包分享

Adobe Photoshop&#xff0c;这款业界闻名的图像处理软件&#xff0c;简称“PS”&#xff0c;以其强大的功能和广泛的应用领域&#xff0c;赢得了无数设计师、摄影师和创意工作者的青睐。 在Photoshop的世界里&#xff0c;用户能够随心所欲地对图像进行裁剪、缩放、调整色彩和…

Git 中 pull 操作和 rebase 操作的不同

由于在开发过程中&#xff0c;pull 操作和 rebase 操作都是用来合并分支的&#xff0c;所以我就常常分不清这两个操作具体有什么区别&#xff0c;所以才有了这篇博客来做个简单区分&#xff0c;具体细致差别还请移步到官方文档&#xff1a;Git - Reference (git-scm.com) 1&am…

怎么优化ArcEngine组件开发mfc程序界面?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

接口测试工作准备

前面已经讲了接口测试的原理&#xff0c;接下来讲接口测试如何准备。分为了解项目背景、收集项目相关资料、部署接口测试环境。明确接口测试相关成果物。接口测试采用的技术/工具。接口测试工作分工等。 1、了解项目背景 1、首先我们应该去了解项目的应用范围&#xff0c;了解…

报错:mAP数据为0%+无法读取output里的图片红色警告

debug检查&#xff1a;发现创建的output和input的路径不在同一级 操作1&#xff1a;修改output创建路径为绝对路径后&#xff0c;output和input文件成功在同一级&#xff0c;但问题仍存在 debug检测&#xff1a;识别的类别和保存的类别不同&#xff0c;没有保存数据 操作2&…

Python爬虫介绍

Python 作为一种广泛应用的编程语言&#xff0c;在 Web 开发、大数据开发、人工智能开发和嵌入式开发等领域都有着重要的应用。 Python 的易学性、清晰性和可移植性等特点使它得到很多技术人士的喜爱。对于数据科学和机器学习领域的程序员来说&#xff0c;Python 提供了强大的…

poi生成的excel,输入数字后变成1.11111111111111E+23

poi版本4.1.2 生成excel后&#xff0c;单元格输入数字&#xff0c;过长的话变成这样 解决&#xff1a;生成的时候设置单元格格式为文本格式 import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream; imp…

【电路笔记】-共发射极放大器

共发射极放大器 文章目录 共发射极放大器1、概述2、完整的CEA配置3、直流等效电路4、交流等效电路5、输入阻抗6、输出阻抗7、电压增益8、微分电容的重要性9、信号源的衰减10、电流增益11、相位反转12、总结1、概述 在本文中,我们将介绍基于双极晶体管的放大器的最后一种拓扑:…