【MySQL】数据库的约束
MySQL 数据库的约束
文章目录
- MySQL 数据库的约束
- 01 数据库的约束
- 1.1 约束类型
- 1.1.1 NOT NULL
- 1.1.2 UNIQUE
- 1.1.3 DEFAULT
- 1.1.4 PRIMARY KEY
- 1.1.5 FOREIGN KEY
- 1.1.6 CHECK
继上文 MySQL基础(一), MySQL基础(二),接下来的大块知识点是 MySQL 查询的进阶~
因为增删改其实没什么进阶的~
但是!在此之前,我们先来讲讲另外的一些知识点,再开始讲查询的进阶~
01 数据库的约束
有些时候,数据库中的数据是有一定约束的~
有些数据是合法数据,有些是非法数据~那我们该怎么判断数据是否合法呢?人工检查靠谱不?
当然是不靠谱的,相对于计算机来说~
数据库,自动地对数据合法性进行校检检查地一系列机制~~目的就是为了保证数据库中能够避免被插入/修改一些非法的数据
1.1 约束类型
MySQL
中提供了以下约束:
- NOT NULL :指示某列不能存储NULL值
- UNIQUE :保证某列的每行必须有唯一的值
- DEFAULT :规定没有给列赋值时的默认值
- PRIMARY KEY :NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY:保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK:保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。
在讲解之前,我们先把以前的测试用例删除~
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)mysql> show tables;
ERROR 1046 (3D000): No database selected
mysql> use test;
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| exam_result |
| student |
+----------------+
2 rows in set (0.01 sec)mysql> drop table student;
Query OK, 0 rows affected (0.02 sec)mysql> drop table exam_result;
Query OK, 0 rows affected (0.01 sec)mysql> show tables;
Empty set (0.00 sec)
1.1.1 NOT NULL
我们先正常操作,不添加任何约束。
mysql> create table student(id int, name varchar(20));
Query OK, 0 rows affected (0.02 sec)mysql> insert student values(null, null);
Query OK, 1 row affected (0.01 sec)mysql> select * from student;
+------+------+
| id | name |
+------+------+
| NULL | NULL |
+------+------+
1 row in set (0.00 sec)
再者我们添加NOT NULL
约束看看区别~
mysql> drop table student;
Query OK, 0 rows affected (0.01 sec)mysql> create table student (id int not null, name varchar(20));
Query OK, 0 rows affected (0.01 sec)mysql> insert into student values (null, null);
ERROR 1048 (23000): Column 'id' cannot be null
-- Column 'id' cannot be null 这时他就会报错,那么我们再次查询表看看mysql> select * from student;
Empty set (0.00 sec)
-- 表是空的~-- 下面我们看看not null也同样适用于插入
mmysql> insert into student values(1, '张三');
Query OK, 1 row affected (0.01 sec)mysql> select * from student;
+----+------+
| id | name |
+----+------+
| 1 | 张三 |
+----+------+
1 row in set (0.01 sec)mysql> update student set id = null where name = '张三';
ERROR 1048 (23000): Column 'id' cannot be null
1.1.2 UNIQUE
唯一值~
见以下代码:
mysql> create table student(id int, name varchar(20));
Query OK, 0 rows affected (0.02 sec)mysql> insert into student values(1, '张三');
Query OK, 1 row affected (0.01 sec)
mysql> insert into student values(1, '张三');
Query OK, 1 row affected (0.01 sec)mysql> insert into student values(1, '张三');
Query OK, 1 row affected (0.01 sec)mysql> insert into student values(1, '张三');
Query OK, 1 row affected (0.01 sec)mysql> select * from student;
+------+------+
| id | name |
+------+------+
| 1 | 张三 |
| 1 | 张三 |
| 1 | 张三 |
| 1 | 张三 |
+------+------+
4 rows in set (0.00 sec)-- ==============================================================mysql> drop table student;
Query OK, 0 rows affected (0.01 sec)mysql> create table student (id int unique, name varchar(20));
Query OK, 0 rows affected (0.02 sec)mysql> insert into student values(1, '张三');
Query OK, 1 row affected (0.01 sec)mysql> insert into student values(1, '张三');
ERROR 1062 (23000): Duplicate entry '1' for key 'id'
mysql> insert into student values(1, '张三');
ERROR 1062 (23000): Duplicate entry '1' for key 'id'
-- Duplicate(重复) entry(条目) 哈哈 重复不了咯 ~mysql> select * from student;
+------+------+
| id | name |
+------+------+
| 1 | 张三 |
+------+------+
1 row in set (0.00 sec)
这个UNIQUE不仅仅是在限制插入,也会限制修改~
同时,我们要知道,unique约束,会让后续插入/修改数据的时候,都会触发一次查询操作,
通过这个查询,来确定当前这个记录是否已经存在~~
因此!数据库引入约束之后,执行效率就会受到影响,就可能会降低很多,这就意味着,数据库其实是一个比较慢的系统,也是比较吃资源的系统,部署数据库的服务器,很容易称为一整个系统的“性能瓶颈”。
1.1.3 DEFAULT
默认值 ~
-- 实际上我们在 desc 表名; 就可以看出来 ~
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | UNI | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
-- 这其中的 Default 那一列,其实就是在描述这一列的默认值 默认的默认值就是NULL,我们可以通过default约束来修改这一默认值
这里针对上述的desc
来插嘴一句,
desc 表名;
-- desc => describe 描述
order by 列名 desc;
-- desc => descend 降序
看看default
的效果如下代码~
mysql> create table student(id int, name varchar(20) default '未命名');
Query OK, 0 rows affected (0.01 sec)mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | 未命名 | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
那么这样,后续插入数据的时候,default
就会在没有显示指定插入的值的时候生效了~
如下:
mysql> insert into student (id) values (1);
Query OK, 1 row affected (0.01 sec)mysql> select * from student;
+------+--------+
| id | name |
+------+--------+
| 1 | 未命名 |
+------+--------+
1 row in set (0.00 sec)
1.1.4 PRIMARY KEY
这个是最重要的一个约束
是一行记录的身份标识~
指定id
为主键:
create table student (id int primary key, name varchar (20));
✍️✍️一张表里只能有一个primary key
,一个表里的记录,只能有一个作为身份标识的数据~~
或许你就会产生一个问题,为什么就只能一个呢???
那么我们假设这个表里有多个primary key
,那么我们以谁位基准呢?
简单粗暴,我们通过 MYSQL 直接来看就好~
mysql> create table student2 (id int primary key, name varchar(20) primary key);
ERROR 1068 (42000): Multiple primary key defined -- 已定义多个主键
虽然我们只有一个主键,但是逐渐不一定是一个列,也可以是多个列共同构成的一个主键(联合主键)。
mysql> insert into student values (1, '张三');
Query OK, 1 row affected (0.01 sec)mysql> insert into student values (1, '张三');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> insert into student values (null, '张三');
ERROR 1048 (23000): Column 'id' cannot be nullmysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
-- PRI 主键
对于带有主键的表来说,每次插入数据/修改数据,也会涉及到进行先查询的操作
MySQL
会把带有unique
和primary key
的列自动生成索引,从而加快查询速度
那么我们怎么保证主键唯一呢?
MySQL 提供了一种 “ 自增主键 ”的机制。
主键经常会使用int/bigint
在我们插入数据的时候,不必手动指定主键值~由数据库服务器自己给你分配一个主键,会从 1 开始,依次递增的分配主键的值~
这里提供自动主键的一个例子:
create table student (id int primary key auto_increment, name varchar(20));
mysql> desc student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
对于整数类型的主键,常配搭自增长auto_increment
来使用。插入数据对应字段不给值时,使用最大值+1。
mysql> insert into student values(null, '张三');
Query OK, 1 row affected (0.01 sec)
-- 这里的null也就是我们的自增主键 id : 1,也就是交给数据库服务器自行分配~mysql> select * from student;
+----+------+
| id | name |
+----+------+
| 1 | 张三 |
+----+------+
1 row in set (0.00 sec)
一些自增主键的注意点:
mysql> insert into student values(null, '李四');
Query OK, 1 row affected (0.01 sec)mysql> insert into student values(null, '王五');
Query OK, 1 row affected (0.01 sec)mysql> select * from student;
+----+------+
| id | name |
+----+------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
+----+------+
3 rows in set (0.00 sec)mysql> insert into student values(10, '李六');
Query OK, 1 row affected (0.01 sec)mysql> select * from student;
+----+------+
| id | name |
+----+------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
| 10 | 李六 |
+----+------+
4 rows in set (0.00 sec)mysql> insert into student values(null, '田七');
Query OK, 1 row affected (0.01 sec)mysql> select * from student;
+----+------+
| id | name |
+----+------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
| 10 | 李六 |
| 11 | 田七 |
+----+------+
5 rows in set (0.00 sec)
就是从刚才 最大的数值 开始,继续往后分配的~~
相当于使用了一个变量,来保存当前表的id
的最大值,后续分配自增主键都是根据这个最大值来分配的
如果手动指定 id ,也会更新最大值。4-9之间的id也就是浪费了。
比处这里的id的自动分配,也是有一定局限性的~~
如果是单个mysql服务器,那是没问题的.
如果是一个分布式系统有多个ysql服务器构成的集群,这个时候依靠自增主键就不行了~
1.1.5 FOREIGN KEY
外键~描述两个表之间的关联关系
下面来点例子:
class | class | name |
---|---|---|
100 | MySQL100班 | |
101 | MySQL101班 | |
102 | Java100班 | |
103 | Java101班 |
student | id | name | class id |
---|---|---|---|
1 | 张三 | 100 | |
2 | 李四 | 100 | |
3 | 王五 | 101 | |
4 | 赵六 | 300 |
外键就是用来描述这样的约束过程的~
class 表中的数据,约束了student 表中的数据,把class表,称为“父表”,也就是约束别人的表;把student 表,称为“子表”,也就是别人约束的表。
见以下示例代码:
references
引用,此处表示了当前这个表的这一列中的数据,应该出自另一个表的哪一列
mysql> create table class(-> class int primary key,-> name varchar(20));
Query OK, 0 rows affected (0.02 sec)mysql> insert into class values (100, 'MySQL100班'), (101, 'MySQL101班'), (102, 'Java100班'), (103, 'Java101班');
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0mysql> create table student (id int primary key, name varchar(20), classid int);
Query OK, 0 rows affected (0.01 sec)mysql> insert into student values (1, '张三', 200);
Query OK, 1 row affected (0.01 sec)mysql> select * from class;
+-------+------------+
| class | name |
+-------+------------+
| 100 | MySQL100班 |
| 101 | MySQL101班 |
| 102 | Java100班 |
| 103 | Java101班 |
+-------+------------+
4 rows in set (0.00 sec)mysql> select * from student;
+----+------+---------+
| id | name | classid |
+----+------+---------+
| 1 | 张三 | 200 |
+----+------+---------+
1 row in set (0.00 sec)mysql> drop table student;
Query OK, 0 rows affected (0.01 sec)-- -----------------------------------------------------------------------------------------mysql> create table student
mysql> (id int primary key, name varchar(20), classid int, foreign key(classid) references class(class));
-- foreign key(classid) 这里的classid是被约束的列
-- class(class) 数据是被class表的class这一列约束的
-- 即 student的classid的数据出自于class表的class这一列
Query OK, 0 rows affected (0.02 sec)mysql> insert into student values(1, '张三', 100);
Query OK, 1 row affected (0.01 sec)
-- 执行这个插入操作,就会触发针对class表的查询.就会查100是否是在class中存在~~mysql> insert into student values(2, '李四', 200);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`classid`) REFERENCES `class` (`class`))
-- 约束失败mysql> update student set classid = 200 where id = 1;
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`classid`) REFERENCES `class` (`class`))
父表约束子表,言传身教~
比如,针对父表进行修改/删除操作,如果当前被修改/删除的值,已经被子表引用了,这样的操作也会失败!
外键约束始终要保持,子表中的数据在对应的父表的列中,要存在~~
此时万一把父表的这条数据删除了,也就打破了刚才的约束了~~
当你凝视深渊的时候,深渊也在凝视你!~
mysql> select * from class;
+-------+------------+
| class | name |
+-------+------------+
| 100 | MySQL100班 |
| 101 | MySQL101班 |
| 102 | Java100班 |
| 103 | Java101班 |
+-------+------------+
4 rows in set (0.00 sec)mysql> select * from student;
+----+------+---------+
| id | name | classid |
+----+------+---------+
| 1 | 张三 | 100 |
+----+------+---------+
1 row in set (0.00 sec)mysql> delete from class where class = 103;
Query OK, 1 row affected (0.01 sec)mysql> select * from class;
+-------+------------+
| class | name |
+-------+------------+
| 100 | MySQL100班 |
| 101 | MySQL101班 |
| 102 | Java100班 |
+-------+------------+
3 rows in set (0.00 sec)mysql> delete from class where class = 100;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`classid`) REFERENCES `class` (`class`))
外键准确来说,是两个表的列产生关联关系其他的列是不受影响的
这里提出一个问题:如果想drop table class
,是否可以删除整个表?
答案是不可以的!
要想删除表,就得先删除记录
父表没了,子表后续添加新的元素,就没有参考了~
mysql> drop table class;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
mysql> delete from student;
Query OK, 1 row affected (0.01 sec)mysql> select * from student;
Empty set (0.00 sec)mysql> drop table class;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
那该怎么办呢?
实际上我们先删子表,再删父表就ok了~
mysql> drop table student;
Query OK, 0 rows affected (0.01 sec)mysql> drop table class;
Query OK, 0 rows affected (0.01 sec)
那好,我们将表删完,来看看下面这个例子
mysql> create table class(classId int, name varchar(20));
Query OK, 0 rows affected (0.02 sec)mysql> create table student(studentId int primary key, name varchar(20), classId int, foreign key(classId) references class(classId));
ERROR 1215 (HY000): Cannot add foreign key constraint
-- 为什么报错呢?
-- 实际上就是因为class表没有主键 正确的写法应该是:create table class(classId int primary key, name varchar(20));
-- 指定外键约束的时候,要求父表中被关联的这一列,得是主键或者 unique
再来看看下面这场景:
场景:电商网站
商品表(goodsId,.........);1 男士女装
订单表(orderId,goodsId..)foreign key (goodsId) references 商品表 (goodsId);过了一段时间,商家想把男士女装下架,那么我们后端怎么完成删除?
尝试删除附表数据的时候,如果父表的数据被子表运用了,是无法删除的
所以我们怎么保证外键约束存在的前提下首先“商品下架”的功能?
答案:
把要下架的商品隐藏起来,让顾客查询商品的时候查询不到下架的商品,但是商品表里对应的商品还存在,也就不会影响到之前下过的订单间接实现了商品的下架。
给商品表 新增一个单独的列,表示是否在线。(不在线,就相当于下架了)
商品表(goodsId, name, price..., isOk);
isOk -> 1 : 表示商品在线-> 0 : 表示商品下线
如果需要下架商品,使用 update 把 isOk 从 1->0 即可
查询商品的时候,都加上where isOk = 1 这样的条件
这种思路也被称这为"逻辑删除"。比如说:
电脑上有个xx文件,你想删除掉,也是通过逻辑删除的方式实现的,
在硬盘上,数据还有,被标记成无效了.后续其他文件就可以重复利用这块硬盘空间了
比如想把电脑的某个文件彻底删除掉,通过扔进回收站,清空回收站.没有卵用的~~
硬盘上的数据啥时候彻底消亡,就需要时间,需要后续有文件把这块标记无效的空间重复利用,才会真正消失~~
按照逻辑删除的思路,表中的数据,会无限的扩张??
是否就会导致硬盘空间被占满??
当然是会有的写代码不要抠搜
硬盘,就比较便宜~~
也可以通过增加主机(分布式)来进一步的扩充存储空间.
1.1.6 CHECK
MySQL使用时不报错,但忽略该约束:
drop table if exists test_user;
create table test_user (id int,name varchar(20),sex varchar(1),check (sex ='男' or sex='女')
);
相关文章:

【MySQL】数据库的约束
MySQL 数据库的约束 文章目录 MySQL 数据库的约束01 数据库的约束1.1 约束类型1.1.1 NOT NULL1.1.2 UNIQUE1.1.3 DEFAULT1.1.4 PRIMARY KEY1.1.5 FOREIGN KEY1.1.6 CHECK 继上文 MySQL基础(一), MySQL基础(二)&#…...

改变金融贷款市场营销方式 ---- 运营商大数据精准获客
与传统的企业网络营销相比,最常见的是网络推广和硬广告推广。一些企业无法找到可靠准确的数据来源,也无法找到一些未知的总数据。这些数据大多存在持续时间长、准确性差的缺点,企业在将这些数据信息应用于商品在线营销时往往会遇到不足。 在…...

SpringBoot实现分页的四种方式
一 自己封装Page对象实现 博客链接 二 使用sql实现分页 2.1 场景分析 前段传递给给后台什么参数? 当前页码currentPage每页显示条数pageSize 后台给前端返回什么数据? 当前页数据List总记录数totalCount 2.2 前段代码 <template><el-paginationsize-change&q…...

远程工作面试:特殊情况下的面试技巧
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

element ui文件上传方法中需要传额外参数
由于文件上传dom是通过循环列表渲染的,在文件上传的时候除了file默认的参数外,还需要访问到循环项item参数,那就这样子传递。 :http-request"(file) > {return httpRequestLT(file, item);} "完整代码如下 <div class"…...

线程池|单例模式|STL、智能指针线程安全|读者写者问题
线程池 线程池的逻辑思想: 每当我们处理一个任务就要创建一个线程,创建线程的开销是很大的。因此我们可以预先创建一批线程,任务队列里没有任务的时候,每个线程都休眠,当队里中有任务的时候,就可以唤醒线程…...

Linux的基本使用和Web程序部署(JavaEE初阶系列18)
目录 前言: 1.Linux 1.1Linux是什么 1.2Linux发行版 1.3Linux环境搭建 1.3.1环境搭建方式 1.3.2使用云服务器 1.4使用终端软件连接到Linux 1.4.1什么是终端软件 1.4.2使用Xshell登录主机 1.5Linux常用的命令 1.5.1ls 1.5.2cd 1.5.3pwd 1.5.4touch 1.…...

EXCEL 中find,if and,if or
接上一篇sql中find函数的作用,由于工作需求是用帆软做报表,他的一些代码不仅有js,sql中的还有一些excel的相关知识,故作整理。 FIND() excel中的find原理和sql中相似,具体可查看 SQL函数 $FIND_Yangshiwei....的博客…...

中国环球电视网-学英文必备
CGTN全称是China Global Television Network,即“中国环球电视网”,这是一个以播送新闻、评论、访谈节目为主的电视频道,CGTN的前身即央视的全英文频道CCTV-9/CCTV News。CGTN每天的节目内容很丰富,包括全球新闻(the w…...

【web开发】4.JavaScript与jQuery
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、JavaScript与jQuery二、JavaScript常用的基本功能1.插入位置2.注释3.变量4.数组5.滚动字符 三、jQuery常用的基本功能1.引入jQuery2.寻找标签3.val、text、appe…...

UNI-APP 框架中解决打包后index.html文件中没有引号问题
问题 打包后index.html文件中src属性没有引号。打包后修改默认相对路径为“./”,比如index.xxxx.js中的a.p属性值希望为“./”,默认为“/”。 问题一 在项目根目录下添加文件vue.config.js。在文件中添加如下内容: module.exports {chai…...

借助AI分析哥斯拉木马原理与Tomcat回显链路挖掘
前言 本次分析使用了ChatGPT进行辅助分析,大大提升了工作效率,很快就分析出木马的工作流程和构造出利用方式。 分析 首先对该木马进行格式化,以增强代码的可读性。得到如下代码 <jsp:root xmlns:jsp"http://java.sun.com/JSP/Page" vers…...

Java进行多线程编程?(lambda表达式~)
本文标题:Java进行多线程编程?那么,Java为啥不学学如何进程多进程编程呢??原因在于:Java圈子中不提倡多进程编程~~ 接下来,我们来写一个最为基础/入门的HelloWord程序来感受如何进行多线程~~ J…...
MySQL中的索引事务(2)事务----》数据库运行的原理知识+面试题~
本篇文章建议读者结合:MySQL中的索引事务(1)索引----》数据库运行的原理知识面试题~_念君思宁的博客-CSDN博客此时,如果你根据name来查询,查到叶子节点得到的只是主键id,还需要通过主键id去主键的B树里面在…...

【数据结构】 七大排序详解(贰)——冒泡排序、快速排序、归并排序
文章目录 ⚽冒泡排序⚾算法步骤🎨算法优化🥎代码实现:🏀冒泡排序的特性总结 🧭快速排序⚽算法思路📌思路一(Hoare版)📌思路二(挖坑法)Ὄ…...

小程序的使用
微信小程序开发 外部链接别人的总结查看(超详细保姆式教程) 基础语法 1.数据绑定 1.1 初始化数据 页面.js的data选项中Page({data: {motto: Hello World,id:18} })使用数据 单项数据流:Mustache 语法 a)模板结构中使用双大括号 {{data}} …...

Spring整合tomcat的WebSocket详细逻辑(图解)
主要解决存在的疑问 为什么存在2种spring整合websocket的方式,一种是使用ServerEndpoint注解的方式,一种是使用EnableWebSocket注解的方式,这2种有什么区别和联系?可以共存吗?它们实现的原理是什么?它们的各…...

【笔试强训选择题】Day37.习题(错题)解析
作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!! 文章目录 前言一、Day…...

如何使用HTTP代理爬虫,防止对网站造成负面影响
在当今大数据时代,爬虫技术已经成为了获取数据的重要手段之一。但是,由于爬虫程序的高频访问容易对目标网站造成负面影响,如增加服务器负载、影响网站性能等,因此,如何使用HTTP代理爬虫防止对网站造成负面影响成为了一…...
磐基2.0搭建es集群
参考: k8s安装elasticsearch集群 k8s安装elasticsearch集群_k8s部署elasticsearch集群_MasonYyp的博客-CSDN博客1 环境简述搭建es集群需要使用的技术如下:k8s集群、StatefulSet控制器、Service(NodePort)服务、PV、PVC、volumeC…...

Java中IO类扫盲篇
文章目录 一、简介二、字节流与字符流1. 字节流(InputStream、OutputStream)介绍与用法2. 字符流(Reader、Writer)介绍与用法 三、文件操作与目录遍历1. File类的基本使用2. 目录遍历与递归操作 四、序列化与反序列化1. 序列化与反…...

中秋国庆双节将至,企业如何进行软文推广?
节点营销是每个企业都会面临的课题,中秋国庆双节将至,这两个节日不仅是人们消费的高峰期,也是各大企业通过节日营销提高品牌知名度和美誉度的最佳时机,节点营销的方式之一就是软文推广,那么企业应该如何利用双节来进行…...

SpringMvc--CRUD
目录 一.什么是SpringMvc--CRUD 二.前期准备 公共页面跳转(专门用来处理页面跳转) 三.ssm之CRUD后端实现 配置pom.xml 双击mybatis-generator:generate自动生成mapper 编写generatorConfig.xml 项目结构 编写PagerAspect切面类 编写hpjyBiz接口类 编写hpjyBizImpl接…...

数据库去重(MYSQL和ORACLE)
一、数据库中的去重操作(删除数据库中重复记录的SQL语句)主要有三种方法 (1)、rowid方法 (2)、group by 方法 (3)、distinct方法 1、用rowid方法 根据Oracle带的rowid属性&#…...

微服务-kubernetes安装
文章目录 一、前言二、kubernetes2.1、Kubernetes (K8S) 是什么2.1.1、主要特性:2.2.2、传统部署方式:2.2.3、虚拟机部署2.2.4容器部署2.2.5什么时候需要 Kubernetes2.2.6、Kubernetes 集群架构 三、kubernetes安装3.1、主节点需要组件3.1.1、设置对应主…...

stm32f103zet6移植标准库的sdio驱动
sdio移植 st官网给的标准库有给一个用于st出的评估板的sdio外设实现,但一是文件结构有点复杂,二是相比于国内正点原子和野火的板子也有点不同,因此还是需要移植下才能使用。当然也可以直接使用正点原子或野火提供的实例,但为了熟…...

为什么vector容器的begin()既可以被iterator 也可以被const_iterator指向?
答:vector容器中的begin()是函数接口,它作为函数,被重载了。 typedef T* iterator; typedef const T* const_iterator; iterator begin();//括号中有隐含形参*this; const_iterator begin() const;//形参为…...

uniapp里textarea多行文本输入限制数量
uniapp里textarea多行文本域实现输入计数 <template><view class"inputs"><textarea class"text1" maxlength50 placeholder请输入... input"sumfontnum"></textarea><text class"text2">{{fontNum}}/…...

真香:Alibaba开源GitHub星标100K微服务架构全彩进阶手册
前言: 微服务架构作为一种高效灵活的应用架构,正在成为企业级应用开发的主流选择。在众多的微服务架构指南中,阿里巴巴开源的GitHub微服务架构全彩进阶手册备受瞩目,其100star更是证明了其在开发者社区中的重要地位。 这本手册汇…...

Mysql--事务
事务 开始之前,让我们先想一个场景,有的时候,为了完成某个工作,需要完成多种sql操作 比如转账 再比如下单 第一步 我的账户余额减少 第二步 商品的库存要减少 第三步 订单表中要新增一项 事务的本质,就是为了把多个操…...