13_MySQL中的约束

news2025/7/20 22:34:27

 

目录

1. 约束(constraint)概述

1.1 为什么需要约束

1.2 什么是约束

1.3 约束的分类

 2. 非空约束

2.1 作用

2.2 关键字

2.3 特点

2.4 添加非空约束

2.5 删除非空约束

3. 唯一性约束

3.1作用

3.2 关键字

3.3 特点

3.5 关于复合唯一约束

4. 主键(PRIMARY KEY)约束

4.1 作用

4.2 关键字

4.3 特点

4.4 添加主键约束

4.5 关于复合主键

4.6 删除主键约束

5. 自增列:AUTO_INCREMENT

5.1 作用

5.2 关键字

5.3 特点和要求

5.4 如何指定自增约束

5.5 如何删除自增约束

5.6 MySQL 8.0新特性—自增变量的持久化

6. FOREIGN KEY 约束

6.1 作用

6.2 关键字

6.3 主表和从表/父表和子表

6.5 添加外键约束

6.6 约束等级

6.8 开发场景

6.9 阿里开发规范

7. CHECK 约束 

7.1 作用

7.2 关键字

7.3 说明:MySQL 5.7 不支持

8. DEFAULT约束

8.1 作用

8.2 关键字

8.3 如何给字段加默认值

1. 约束(constraint)概述

1.1 为什么需要约束

数据完整性(Data Integrity)是指数据的 精确性 (Accuracy)和 可靠性 (Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。 为了保证数据的完整性,SQL 规范以约束的方式对 表数据进行额外的条件限制 。从以下四个方面考虑:
实体完整性( Entity Integrity :例如,同一个表中,不能存在两条完全相同无法区分的记录
域完整性( Domain Integrity :例如:年龄范围 0-120 ,性别范围 /
引用完整性( Referential Integrity :例如:员工所在部门,在部门表中要能找到这个部门
用户自定义完整性( User - defined Integrity :例如:用户名唯一、密码不能为空等,本部门经理的工资不得高于本部门职工的平均工资的5 倍。

1.2 什么是约束

约束是表级的 强制规定
可以在 创建表时规定约束(通过 CREATE TABLE 语句) ,或者在 表创建之后通过 ALTER TABLE 语句规定 约束

1.3 约束的分类

  • 根据约束数据列的限制,约束可分为:
    • 单列约束:每个约束只约束一列
    • 多列约束:每个约束可约束多列数据
  • 根据约束的作用范围,约束可分为:
    • 列级约束:只能作用在一个列上,跟在列的定义后面
    • 表级约束:可以作用在多个列上,不与列一起,而是单独定义
                   位置                       支持的约束类型                             是否可以起约束名
列级约束: 列的后面                语法都支持,但外键没有效果       不可以
表级约束: 所有列的下面         默认和非空不支持,其他支持       可以(主键没有效果)
  • 根据约束起的作用,约束可分为:
    • NOT NULL 非空约束,规定某个字段不能为空
    • UNIQUE 唯一约束规定某个字段在整个表中是唯一的
    • PRIMARY KEY 主键(非空且唯一)约束
    • FOREIGN KEY 外键约束
    • CHECK 检查约束
    • DEFAULT 默认值约束
注意:MySQL不支持check约束,但可以使用check约束,而没有任何效果
  • 查看某个表已有的约束
#information_schema数据库名(系统库)
#table_constraints表名称(专门存储各个表的约束)
SELECT * FROM information_schema.table_constraints
WHERE table_name = '表名称';
SELECT * FROM information_schema.table_constraints
WHERE table_name = 'employees';

 2. 非空约束

2.1 作用

限定某个字段 / 某列的值不允许为空

2.2 关键字

NOT NULL

2.3 特点

  • 默认,所有的类型的值都可以是NULL,包括INT
  • FLOAT等数据类型
  • 非空约束只能出现在表对象的列上,只能某个列单独限定非空,不能组合非空
  • 一个表可以有很多列都分别限定了非空
  • 空字符串''不等于NULL,0也不等于NULL

2.4 添加非空约束

(1)建表时
CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型 NOT NULL,
字段名 数据类型 NOT NULL
);
(2)建表后
alter table 表名称 modify 字段名 数据类型 not null;

2.5 删除非空约束

alter table 表名称 modify 字段名 数据类型 NULL;#去掉not null,相当于修改某个非注解字段,
该字段允许为空
或
alter table 表名称 modify 字段名 数据类型;#去掉not null,相当于修改某个非注解字段,
该字段允许为空

3. 唯一性约束

3.1作用

用来限制某个字段/某列的值不能重复。

3.2 关键字

UNIQUE

3.3 特点

  • 同一个表可以有多个唯一约束。
  • 唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。
  • 唯一性约束允许列值为空。
  • 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。
  • MySQL会给唯一约束的列上默认创建一个唯一索引。
(1)建表时
create table 表名称(
字段名 数据类型,
字段名 数据类型 unique,
字段名 数据类型 unique key,
字段名 数据类型
);
create table 表名称(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型,
[constraint 约束名] unique key(字段名)
);

举例:

CREATE TABLE USER(
id INT NOT NULL,
NAME VARCHAR(25),
PASSWORD VARCHAR(16),
-- 使用表级约束语法
CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)
);
表示用户名和密码组合不能重复
(2)建表后指定唯一键约束
#字段列表中如果是一个字段,表示该列的值唯一。如果是两个或更多个字段,那么复合唯一,
#即多个字段的组合是唯一的
#方式1:
alter table 表名称 add unique key(字段列表);

#方式2:
alter table 表名称 modify 字段名 字段类型 unique;

3.5 关于复合唯一约束

create table 表名称(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型,
unique key(字段列表) #字段列表中写的是多个字段名,多个字段名用逗号分隔,表示那么是复合唯一,即多
个字段的组合是唯一的
);
  • 添加唯一性约束的列上也会自动创建唯一索引。
  • 删除唯一约束只能通过删除唯一索引的方式删除。
  • 删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样。
  • 如果创建唯一约束时未指定名称,如果是单列,就默认和列名相同;如果是组合列,那么默认和() 中排在第一个的列名相同。也可以自定义唯一性约束名。
SELECT * FROM information_schema.table_constraints WHERE table_name = '表名'; 
#查看都有哪些约束

ALTER TABLE 表名
DROP INDEX 唯一约束名;

4. 主键(PRIMARY KEY)约束

4.1 作用

用来唯一标识表中的一行记录。

4.2 关键字

primary key

4.3 特点

  • 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值。
  • 一个表最多只能有一个主键约束,建立主键约束可以在列级别创建,也可以在表级别上创建。
  • 主键约束对应着表中的一列或者多列(复合主键)
  • 如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
  • MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用。
  • 当创建主键约束时,系统默认会在所在的列或列组合上建立对应的主键索引(能够根据主键查询的,就根据主键查询,效率更高)。如果删除主键约束了,主键约束对应的索引就自动删除了。
  • 需要注意的一点是,不要修改主键字段的值。因为主键是数据记录的唯一标识,如果修改了主键的值,就有可能会破坏数据的完整性。

4.4 添加主键约束

(1)建表时指定主键约束
create table 表名称(
字段名 数据类型 primary key, #列级模式
字段名 数据类型,
字段名 数据类型
);
create table 表名称(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型,
[constraint 约束名] primary key(字段名) #表级模式
);
(2)建表后增加主键约束
ALTER TABLE 表名称 ADD PRIMARY KEY(字段列表); 
#字段列表可以是一个字段,也可以是多个字段,
#如果是多个字段的话,是复合主键

4.5 关于复合主键

create table 表名称(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型,
primary key(字段名1,字段名2) #表示字段1和字段2的组合是唯一的,也可以有更多个字段
);

4.6 删除主键约束

alter table 表名称 drop primary key;
说明:删除主键约束,不需要指定主键名,因为一个表只有一个主键,删除主键约束后,非空还存在。

5. 自增列:AUTO_INCREMENT

5.1 作用

某个字段的值自增

5.2 关键字

auto_increment

5.3 特点和要求

(1)一个表最多 只能有一个 自增长列
(2)当需要产生唯一标识符或顺序值时,可设置自增长
(3)自增长列约束的列必须是 键列 (主键列或唯一键列)
(4)自增约束的列的数据类型必须是 整数类型
(5)如果自增列指定了 0 null ,会在当前最大值的基础上自增;如果自增列手动指定了具体               值,直接赋值为具体值。

5.4 如何指定自增约束

1 )建表时
create table 表名称(
字段名 数据类型 primary key auto_increment,
字段名 数据类型 unique key not null,
字段名 数据类型 unique key,
字段名 数据类型 not null default 默认值,
);
create table 表名称(
字段名 数据类型 default 默认值 ,
字段名 数据类型 unique key auto_increment,
字段名 数据类型 not null default 默认值,
primary key(字段名)
);
2 )建表后
alter table 表名称 modify 字段名 数据类型 auto_increment;

5.5 如何删除自增约束

alter table 表名称 modify 字段名 数据类型 auto_increment;#给这个字段增加自增约束
alter table 表名称 modify 字段名 数据类型; #去掉auto_increment相当于删除

5.6 MySQL 8.0新特性自增变量的持久化

MySQL 8.0 之前,自增主键 AUTO_INCREMENT 的值如果大于 max(primary key)+1 ,在 MySQL 重启后,会重 置AUTO_INCREMENT=max(primary key)+1 ,这种现象在某些情况下会导致业务主键冲突或者其他难以发现的问题。 下面通过案例来对比不同的版本中自增变量是否持久化。 在MySQL 5.7 版本中,测试步骤如下: 创建的数据表中包含自增主键的id 字段,语句如下:
CREATE TABLE test1(
id INT PRIMARY KEY AUTO_INCREMENT
);
插入 4 个空值,执行如下:
INSERT INTO test1
VALUES(0),(0),(0),(0);
查询数据表 test1 中的数据,结果如下:

 删除id4的记录,语句如下:

DELETE FROM test1 WHERE id = 4;
再次插入一个空值,语句如下:
INSERT INTO test1 VALUES(0);
查询此时数据表 test1 中的数据,结果如下:

 从结果可以看出,虽然删除了id4的记录,但是再次插入空值时,并没有重用被删除的4,而是分配了 5。 删除id5的记录,结果如下:

DELETE FROM test1 where id=5;
重启数据库 ,重新插入一个空值。
INSERT INTO test1 values(0);

再次查询数据表test1中的数据,结果如下:

从结果可以看出,新插入的 0 值分配的是 4 ,按照重启前的操作逻辑,此处应该分配 6 。出现上述结果的主要原因是自增主键没有持久化。 在MySQL 5.7 系统中,对于自增主键的分配规则,是由 InnoDB 数据字典内部一个 计数器 来决定的,而该计数器只在 内存中维护 ,并不会持久化到磁盘中。当数据库重启时,该计数器会被初始化。
MySQL 8.0 版本中,上述测试步骤最后一步的结果如下:

 从结果可以看出,自增变量已经持久化了。

MySQL 8.0将自增主键的计数器持久化到 重做日志中。每次计数器发生改变,都会将其写入重做日志中。如果数据库重启,InnoDB会根据重做日志中的信息来初始化计数器的内存值。

6. FOREIGN KEY 约束

6.1 作用

限定某个表的某个字段的 引用完整性
比如:员工表的员工所在部门的选择,必须在部门表能找到对应的部分。

6.2 关键字

FOREIGN KEY

6.3 主表和从表/父表和子表

主表(父表):被引用的表,被参考的表
从表(子表):引用别人的表,参考别人的表
例如:员工表的员工所在部门这个字段的值要参考部门表:部门表是主表,员工表是从表。
例如:学生表、课程表、选课表:选课表的学生和课程要分别参考学生表和课程表,学生表和课程表是主表,选课表是从表。
6.4 特点
(1)从表的外键列,必须引用 / 参考主表的 主键或唯一约束 的列
         为什么?因为被依赖 / 被参考的值必须是唯一的
(2)在创建外键约束时,如果不给外键约束命名, 默认名不是列名,而是自动产生一个外键 (例           如student_ibfk_1;),也可以指定外键约束名。
(3)创建 (CREATE) 表时就指定外键约束的话,先创建主表,再创建从表
(4)删表时, 先删从表 (或先删除外键约束), 再删除主表
(5)当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表           中依赖该记录的数据,然后才可以删除主表的数据
(6)在 从表 中指定外键约束,并且一个表可以建立多个外键约束
(7)从表的外键列与主表被参照的列名字可以不相同,但是 数据类型必须一样 ,逻辑意义一致。           如果类型不一样,创建子表时,就会出现错误“ERROR 1005 (HY000): Can't create                         table'database.tablename'(errno: 150)”。
         例如:都是表示部门编号,都是 int 类型。 
(8) 当创建外键约束时,系统默认会在所在的列上建立对应的普通索引 。但是索引名是外键的约           束名。(根据外键查询效率很高)
(9)删除外键约束后,必须 手动 删除对应的索引

6.5 添加外键约束

(1)建表时
create table 主表名称(
字段1 数据类型 primary key,
字段2 数据类型
);
create table 从表名称(
字段1 数据类型 primary key,
字段2 数据类型,
[CONSTRAINT <外键约束名称>] FOREIGN KEY(从表的某个字段) references 主表名(被参考字段)
);

#(从表的某个字段)的数据类型必须与主表名(被参考字段)的数据类型一致,逻辑意义也一样
#(从表的某个字段)的字段名可以与主表名(被参考字段)的字段名一样,也可以不一样
-- FOREIGN KEY: 在表级指定子表中的列
-- REFERENCES: 标示在父表中的列
create table dept( #主表
did int primary key, #部门编号
dname varchar(50) #部门名称
);
create table emp(#从表
eid int primary key, #员工编号
ename varchar(5), #员工姓名
deptid int, #员工所在的部门
foreign key (deptid) references dept(did) 
#在从表中指定外键约束
#emp表的deptid和和dept表的did的数据类型一致,意义都是表示部门的编号
);
说明:
1 )主表 dept 必须先创建成功,然后才能创建 emp 表,指定外键成功。
2 )删除表时,先删除从表 emp ,再删除主表 dept
(2)建表后
一般情况下,表与表的关联都是提前设计好了的,因此,会在创建表的时候就把外键约束定义好。不过,如果需要修改表的设计(比如添加新的字段,增加新的关联关系),但没有预先定义外键约束,那么,就要用修改表的方式来补充定义。
格式:
ALTER TABLE 从表名 ADD [CONSTRAINT 约束名] FOREIGN KEY (从表的字段) REFERENCES 
主表名(被引用字段) [on update xx][on delete xx];
举例:
ALTER TABLE emp1
ADD CONSTRAINT emp_dept_id_fk FOREIGN KEY(dept_id) REFERENCES dept(dept_id);
总结:约束关系是针对 双方的
添加了外键约束后,主表的修改和删除数据受约束
添加了外键约束后,从表的添加和修改数据受约束
在从表上建立外键,要求主表必须存在
删除主表时,要求 从表先删除 ,或将从表中外键引用该主表的关系先删除

6.6 约束等级

  • Cascade方式 :在父表上update/delete记录时,同步update/delete掉子表的匹配记录
  • Set null方式 :在父表上update/delete记录时,将子表上匹配记录的列设为null,但是要注意子表的外键列不能为not null
  • No action方式 :如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
  • Restrict方式 :同no action, 都是立即检查外键约束
  • Set default方式 (在可视化工具SQLyog中可能显示空白):父表有变更时,子表将外键列设置成一个默认的值,但Innodb不能识别
如果没有指定等级,就相当于 Restrict 方式。
对于外键约束,最好是采用 : ON UPDATE CASCADE ON DELETE RESTRICT 的方式。
(1)演示 1 on update cascade on delete set null
create table dept(
did int primary key, #部门编号
dname varchar(50) #部门名称
);
create table emp(
eid int primary key, #员工编号
ename varchar(5), #员工姓名
deptid int, #员工所在的部门
foreign key (deptid) references dept(did) on update cascade on delete set null
#把修改操作设置为级联修改等级,把删除操作设置为set null等级
);

insert into dept values(1001,'教学部');
insert into dept values(1002, '财务部');
insert into dept values(1003, '咨询部');

insert into emp values(1,'张三',1001); #在添加这条记录时,要求部门表有1001部门
insert into emp values(2,'李四',1001);
insert into emp values(3,'王五',1002);

select * from dept;
select * from emp;

#修改主表成功,从表也跟着修改,修改了主表被引用的字段1002为1004,
#从表的引用字段就跟着修改为1004了
update dept set did = 1004 where did = 1002;

#删除主表的记录成功,从表对应的字段的值被修改为null
mysql> delete from dept where did = 1001;

 

 

6.8 开发场景

问题 1 :如果两个表之间有关系(一对一、一对多),比如:员工表和部门表(一对多),它们之间是否 一定要建外键约束?
答:不是的
问题 2 :建和不建外键约束有什么区别?
答:建外键约束,你的操作(创建表、删除表、添加、修改、删除)会受到限制,从语法层面受到限
制。例如:在员工表中不可能添加一个员工信息,它的部门的值在部门表中找不到。
不建外键约束,你的操作(创建表、删除表、添加、修改、删除)不受限制,要保证数据的 引用完整 性 ,只能依 靠程序员的自觉 ,或者是 Java 程序中进行限定 。例如:在员工表中,可以添加一个员工的信息,它的部门指定为一个完全不存在的部门。
问题 3 :那么建和不建外键约束和查询有没有关系?
答:没有
MySQL 里,外键约束是有成本的,需要消耗系统资源。对于大并发的 SQL 操作,有可能会不适合。比如大型网站的中央数据库,可能会 因为外键约束的系统开销而变得非常慢 。所以, MySQL 允许你不使用系统自带的外键约束,在 应用层面 完成检查数据一致性的逻辑。也就是说,即使你不用外键约束,也要想办法通过应用层面的附加逻辑,来实现外键约束的功能,确保数据的一致性。

6.9 阿里开发规范

强制 】不得使用外键与级联,一切外键概念必须在应用层解决。
说明:(概念解释)学生表中的 student_id 是主键,那么成绩表中的 student_id 则为外键。如果更新学生表中的 student_id ,同时触发成绩表中的 student_id 更新,即为级联更新。外键与级联更新适用于 单机低并发 ,不适合 分布式 高并发集群 ;级联更新是强阻塞,存在数据库 更新风暴 的风险;外键影响数据库的 插入速度

7. CHECK 约束 

7.1 作用

检查某个字段的值是否符号 xx 要求,一般指的是值的范围

7.2 关键字

CHECK

7.3 说明:MySQL 5.7 不支持

MySQL5.7 可以使用 check 约束,但 check 约束对数据验证没有任何作用。添加数据时,没有任何错误或警告但是 MySQL 8.0 中可以使用 check 约束了
create table employee(
eid int primary key,
ename varchar(5),
gender char check ('男' or '女')
);

8. DEFAULT约束

8.1 作用

给某个字段 / 某列指定默认值,一旦设置默认值,在插入数据时,如果此字段没有显式赋值,则赋值为默认值。

8.2 关键字

DEFAULT

8.3 如何给字段加默认值

(1)建表时
create table 表名称(
字段名 数据类型 primary key,
字段名 数据类型 unique key not null,
字段名 数据类型 unique key,
字段名 数据类型 not null default 默认值,
);
(2)建表后
alter table 表名称 modify 字段名 数据类型 default 默认值;
#如果这个字段原来有非空约束,你还保留非空约束,那么在加默认值约束时,
#还得保留非空约束,否则非空约束就被删除了
#同理,在给某个字段加非空约束也一样,如果这个字段原来有默认值约束,
#你想保留,也要在modify语句中保留默认值约束,否则就删除了
alter table 表名称 modify 字段名 数据类型 default 默认值 not null;
alter table 表名称 modify 字段名 数据类型 ;#删除默认值约束,也不保留非空约束
alter table 表名称 modify 字段名 数据类型 not null; #删除默认值约束,保留非空约束

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

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

相关文章

【Django】Hello,DJango!

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…

如何实现报表可视化,有没有工具推荐

随着数据量的不断增长&#xff0c;如何更好地进行数据分析和可视化已成为企业和组织面临的重要挑战。实现报表可视化是一个很好的解决方案&#xff0c;它可以帮助用户更好地理解和分析数据&#xff0c;发现趋势和模式&#xff0c;并支持数据驱动的决策。本文将介绍如何实现报表…

现代卷积神经网络(NiN),并使用NIN训练CIFAR10的分类

专栏&#xff1a;神经网络复现目录 本章介绍的是现代神经网络的结构和复现&#xff0c;包括深度卷积神经网络&#xff08;AlexNet&#xff09;&#xff0c;VGG&#xff0c;NiN&#xff0c;GoogleNet&#xff0c;残差网络&#xff08;ResNet&#xff09;&#xff0c;稠密连接网络…

【3.7】Redis数据类型、CPU缓存一致性、哈希表

文章目录数据类型篇StringListHashSetZsetBitMapHyperLogLogGEOStreamCPU 缓存一致性CPU是如何执行任务的&#xff1f;什么是软中断&#xff1f;为什么0.1 0.2不等于0.3&#xff1f;哈希表数据类型篇 String String 是最基本的 key-value 结构&#xff0c;key 是唯一标识&…

03 | 授权服务:授权码和访问令牌的颁发流程是怎样的? 笔记

03 | 授权服务&#xff1a;授权码和访问令牌的颁发流程是怎样的&#xff1f; 授权服务的工作过程 小兔软件需要去到京东的平台那里”备案“注册&#xff0c;京东商家开放平台就会给小兔软件 app_id 和 app_secret 等信息&#xff0c;以方便后面授权时的各种身份校验&#xff0…

scratch绘制雷达 电子学会图形化编程scratch等级考试三级真题和答案解析2022年9月

目录 scratch绘制雷达 一、题目要求 1、准备工作 2、功能实现 二、案例分析

阶段二12_面向对象高级_继承1

一.继承的入门介绍 (1)继承的概念理解 让类与类之间产生关系&#xff08;子父类关系&#xff09;&#xff0c;子类可以直接使用父类中非私有的成员 (2)通过extends关键字实现继承 格式&#xff1a;public class 子类名 extends 父类名 { } 范例&#xff1a;public class Zi e…

Grafana 如何使用本地CSV文件作为数据源

Grafana提供了一个插件&#xff0c;可以把CSV文件作为数据源&#xff0c;关于CSV插件的说明&#xff0c;可以参考&#xff1a;https://grafana.com/grafana/plugins/marcusolsson-csv-datasource/?tabinstallation。我是在本地使用命令行grafana-cli plugins install marcusol…

通过45人!1-2月,誉天红帽RHCE学员再创佳绩!

学习的喜悦在于结果&#xff0c;也在于过程&#xff1b;在于取得成功时的豁然开朗&#xff0c;也在于持之以恒后的层层递进。结果固然重要&#xff0c;但在求知过程中获得的满足感&#xff0c;也同样让人乐在其中。 RHCE的学习过程就充满了这样的喜悦。对每一行命令的理解、对每…

【Linux学习】日积月累——调试器gdb的使用教程

一、背景 gdb是一款强大的命令行调试工具&#xff0c;可以形成执行程序、脚本。只需要几个简单的命令&#xff0c;就能够实现Windows环境下VC等IDE的图形化调式工具的功能。 调试的相关常识&#xff1a; 程序的发布方式有两种&#xff0c;debug模式和release模式&#xff1b;L…

197.Spark(四):Spark 案例实操,MVC方式代码编程

一、Spark 案例实操 1.数据准备 电商网站的用户行为数据,主要包含用户的 4 种行为:搜索,点击,下单,支付 样例类: 2. Top10 热门品类 先按照点击数排名,靠前的就排名高;如果点击数相同,再比较下单数;下单数再相同,就比较支付数。 我们有多种写法,越往后性能越…

【Linux开发笔记】《Linux嵌入式开发从0到1》(一):初探Linux——与Linux的初次相遇

1.什么是Linux Linux就是一个操作系统&#xff0c;就是一个开源、自由的操作系统&#xff0c;就是一个免费使用和自由传播的类UNIX操作系统&#xff0c;就是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。 简单来讲&#xff0c;Linux就是一个操作系统而已… …

React的Hooks

React Hooks useState useMemo 和usecallback Hooks显示的指明因变量有什么好处 当使用时&#xff0c;y与changeX会被缓存下来&#xff0c;只要x不变&#xff0c;始终读取的是缓存的值&#xff0c; 如果不使用时&#xff0c;每次函数组件执行时&#xff0c;实际会基于x&#xf…

计算机写论文时,怎么引用文献? - 易智编译EaseEditing

首先需要清楚哪些引用必须注明[1]&#xff1a; 任何直接引用都要用引号并注明来源&#xff1b; 任何不是自己的口头或书面的观点、解释和结论都应注明来源&#xff1b; 即使不用原话&#xff0c;但是他人的思路、概念或观点也应注明&#xff1b; 不要为了适合你的观点修改原…

机器学习——无监督学习

机器学习的分类一般分为下面几种类别&#xff1a;监督学习( supervised Learning )无监督学习( Unsupervised Learning )强化学习( Reinforcement Learning&#xff0c;增强学习)半监督学习( Semi-supervised Learning )深度学习(Deep Learning)Python Scikit-learn. http: // …

day40|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

软件测试8

一 缺陷 软件缺陷&#xff1a;是指软件或程序中存在的各种问题及错误&#xff0c;会导致软件产品在某种程度上不能满足用户的需求 二 软件缺陷的判定标准 1.软件未达到需求规格说明书中表明的功能 2.软件出现了需求规格说明书不会出现错误的地方 3.软件的功能超出了需求规格…

14 nuxt3学习(布局 渲染模式 插件plugin 生命周期)

布局 布局是围绕包含多个页面的公共用户界面的页面的包装器&#xff0c;例如页眉和页脚显示。 布局是使用slot 组件显示页面内容的Vue文件。 默认情况下使用layouts/default.vue文件。 自定义布局可以设置为页面元数据的一部分。 方式一&#xff1a;默认布局 在layouts目录下…

Xmind快捷键大全

Xmind快捷键大全 1、常用 CtrlShiftL 快捷键助手CtrlHome 返回中心主题Enter 插入主题Tab 插入子主题F2 编辑主题F3 添加/编辑标签F4 添加/编辑备注F6 下钻ShiftF6 上钻Delete 删除Ctrl] 插入摘要CtrlI 插入图片CtrlShiftH 插入超链接Ctrl1,2,3,4,5,6快速添加优先等级图标Ctr…

applicationContext相关加载

spring refresh 概述 refresh是一个方法&#xff0c;spring中所有的ApplicationContext容器都需要通过refresh方法初始化&#xff1b; 处理步骤 其中refresh方法包含12个主要的处理步骤&#xff1a; 1、第1个步骤做前置准备 2、第2~6步骤创建BeanFactory&#xff08;Appl…