【MySQL】表的增删查改(进阶)
目录
1.数据库约束
1.1NOT NULL:非空约束
1.2UNIQUE:唯一值约束
1.3DEFAULT:默认值约束
1.4PRIMARY KEY:主键约束
1.5FOREIGN KEY:外键约束
1.6CHECK约束
2.表的设计
2.1一对一
2.2一对多
2.3多对多
3.新增
4.查询
4.1聚合查询
4.1.1聚合查询
4.1.2GROUP BY
4.2联合查询
4.2.1内连接
4.2.2外连接
4.2.3自连接
4.2.4子查询
4.2.5合并查询
1.数据库约束
1.1NOT NULL:非空约束
mysql> create table student (id int, name varchar(20) not null);
Query OK, 0 rows affected (0.03 sec)mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | NO | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)mysql> insert into student values (null,null);
ERROR 1048 (23000): Column 'name' cannot be null //id可以为空但是name不能为空
1.2UNIQUE:唯一值约束
不允许存在两行数据,在这个指定列上重复。
mysql> create table student(id int unique,name varchar(20));
Query OK, 0 rows affected (0.03 sec)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)mysql> insert into student values(1,'zhangsan');
Query OK, 1 row affected (0.00 sec)mysql> insert into student values(1,'wangwu');
ERROR 1062 (23000): Duplicate entry '1' for key 'id'//重复条目
1.3DEFAULT:默认值约束
可自定义默认值
mysql> create table student (id int,name varchar(20) default '未命名');
Query OK, 0 rows affected (0.05 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)mysql> insert into student (id) values (1);
Query OK, 1 row affected (0.04 sec)mysql> select * from student;
+------+--------+
| id | name |
+------+--------+
| 1 | 未命名 |
+------+--------+
1 row in set (0.00 sec)
1.4PRIMARY KEY:主键约束
主键就是一条数据的身份标识,是not null 和 unique 的合体;
在数据库中,通过主键约束来指定某个列作为主键;
一个表中只能有一个主键
mysql> create table student (id int primary key,name varchar(20));
Query OK, 0 rows affected (0.05 sec)mysql> 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)mysql> insert into student values(1,'zhangsan');
Query OK, 1 row affected (0.00 sec)mysql> insert into student values(null,'zhangsan');
ERROR 1048 (23000): Column 'id' cannot be null
mysql> insert into student values(1,'zhangsan');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
自增主键:auto_increment,允许客户端在插入数据时,不手动指定主键的值,即可以是null,而是交给MySQL自行分配,确保分配出来的这个主键的值是和之前不重复的,也可以手动指定值。
mysql> create table student (id int primary key auto_increment,name varchar(20));
Query OK, 0 rows affected (0.05 sec)mysql> insert into student values(null,'zhangsan');
Query OK, 1 row affected (0.04 sec)mysql> insert into student values(null,'wangwu');
Query OK, 1 row affected (0.04 sec)mysql> insert into student values(8,'zhaoliu');
Query OK, 1 row affected (0.04 sec)mysql> insert into student values(null,'sunquan');
Query OK, 1 row affected (0.04 sec)mysql> select * from student;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
| 2 | lisi |
| 8 | zhaoliu |
| 9 | sunquan |
+----+----------+
4 rows in set (0.00 sec)
1.5FOREIGN KEY:外键约束
格式:foreign key(子表中受到约束的列)reference 父表 (父表中起到约束效果的列);
创建外键时,修改的是子表的代码,父表代码不受影响。
mysql> create table class (classId int primary key,className varchar(20));
Query OK, 0 rows affected (0.02 sec)mysql> insert into class values (1,'class602'),-> (2,'class709'),-> (3,'class303');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql> create table student (studentId int primary key auto_increment, name varchar(20),classId int,-> foreign key(classId) references class(classId));
Query OK, 0 rows affected (0.03 sec)
注意:
1> 插入/修改子表中受约束的这一列的数据,要保证结果在父表中存在;
2> 删除/修改父表中的数据,要看看这个数据是否在子表中被使用了,如果被使用了,则不能进行删除/修改;
3> 删表时要先删子表再删父表,否则删不掉
mysql> insert into student values(1,'zhangsan',8);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`javasql`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`classId`) REFERENCES `class` (`classId`))mysql> insert into student values(1,'zhangsan',3);
Query OK, 1 row affected (0.01 sec)mysql> delete from class where classId = 2;
Query OK, 1 row affected (0.01 sec)mysql> delete from class where classId = 3;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`javasql`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`classId`) REFERENCES `class` (`classId`))mysql> drop table class;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
mysql> drop table student;
Query OK, 0 rows affected (0.02 sec)mysql> drop table class;
Query OK, 0 rows affected (0.01 sec)
1.6CHECK约束
写一个具体的条件表达式,符合条件则可以插入/修改,不符合条件就失败;
对MySQL5来说,并不支持check,写上不会报错也没啥作用。
2.表的设计
关系是实体和实体之间的关联关系,数据库中有四种关系:
一对一,一对多,多对多,没关系
2.1一对一
举例:学生与账号
1> student ( id, name, age, classId……)
account ( accountId, username, password, studentId……)
2> student ( id, name, age, classId, accountId……)
account ( accountId, username, password……)
3> student_account ( id, name, classId, username, password……) 两张表放一起
2.2一对多
举例:学生与班级
class (classId, className……)
student (studentId, name, classId……)
2.3多对多
表示多对多关系时需要引入一个关联表
举例:学生与课程
student (id, name……)
course (id, name……)
student_course ( studentId, courseId) --- 关联表
3.新增
格式:insert into 表名 select ……
将 插入 insert 和 查询 select 操作合并在一起,即将查询出来的结果直接插入另一个表中,注意:两个表列的数目,类型,约束等要一一对应。
mysql> create table student (id int,name varchar(20));
Query OK, 0 rows affected (0.05 sec)mysql> create table student2 (id int,name varchar(20));
Query OK, 0 rows affected (0.01 sec)mysql> insert into student values (1,'zhangsan'),(2,'lisi'),(3,'wangwu');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql> insert into student2 select * from student;
Query OK, 3 rows affected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql> select * from student2;
+------+----------+
| id | name |
+------+----------+
| 1 | zhangsan |
| 2 | lisi |
| 3 | wangwu |
+------+----------+
3 rows in set (0.00 sec)mysql> insert into student2 select name from student;
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql> insert into student2 select name,id from student;
ERROR 1366 (HY000): Incorrect integer value: 'zhangsan' for column 'id' at row 1
4.查询
4.1聚合查询
4.1.1聚合查询
函数 | 说明 |
---|---|
COUNT( [ DISTINCT ] expr) | 返回查询到的数据的 数量 |
SUM( [ DISTINCT ] expr) | 返回查询到的数据的 总和,不是数字没有意义 |
AVG( [ DISTINCT ] expr) | 返回查询到的数据的 平均值,不是数字没有意义 |
MAX( [ DISTINCT ] expr) | 返回查询到的数据的 最大值,不是数字没有意义 |
MIN( [ DISTINCT ] expr) | 返回查询到的数据的 最小值,不是数字没有意义 |
COUNT:
计算数据的数量时,有时会不计入空值的个数;
空格不能乱敲,count () 会报错,正确为count()。
mysql> insert into examresult values (null,null,null,null,null);
Query OK, 1 row affected (0.00 sec)mysql> select * from examresult;
+------+----------+---------+------+---------+
| id | name | Chinese | Math | English |
+------+----------+---------+------+---------+
| 1 | zhangsan | 67.0 | 98.0 | 56.0 |
| 2 | lisi | 87.0 | 58.0 | 98.0 |
| 3 | wangwu | 88.0 | 66.0 | 90.0 |
| 5 | 孙权 | 67.0 | 89.0 | 72.0 |
| 6 | 孙尚香 | 80.0 | 98.0 | 90.0 |
| 7 | 孙悟空 | NULL | NULL | NULL |
| NULL | NULL | NULL | NULL | NULL |
+------+----------+---------+------+---------+
7 rows in set (0.00 sec)mysql> select count(*) from examresult;
+----------+
| count(*) |
+----------+
| 7 |
+----------+
1 row in set (0.00 sec)mysql> select count(name) from examresult;
+-------------+
| count(name) |
+-------------+
| 6 |
+-------------+
1 row in set (0.01 sec)
SUM:
将每一列的这一行先转化成double,再按照double的方式进行累加;
若无法相加,也能编译成功,但会报警告。
mysql> select sum(Chinese) from examresult;
+--------------+
| sum(Chinese) |
+--------------+
| 389.0 |
+--------------+
1 row in set (0.01 sec)mysql> select sum(name) from examresult;
+-----------+
| sum(name) |
+-----------+
| 0 |
+-----------+
1 row in set, 6 warnings (0.00 sec)mysql> show warnings;
+---------+------+----------------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'zhangsan' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'lisi' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'wangwu' |
| Warning | 1292 | Truncated incorrect DOUBLE value: '孙权' |
| Warning | 1292 | Truncated incorrect DOUBLE value: '孙尚香' |
| Warning | 1292 | Truncated incorrect DOUBLE value: '孙悟空' |
+---------+------+----------------------------------------------+
6 rows in set (0.00 sec)
AVG、MAX、MIN:
mysql> select avg(Chinese + Math + English) from examresult;
+-------------------------------+
| avg(Chinese + Math + English) |
+-------------------------------+
| 240.80000 |
+-------------------------------+
1 row in set (0.01 sec)mysql> select max(Chinese) from examresult;
+--------------+
| max(Chinese) |
+--------------+
| 88.0 |
+--------------+
1 row in set (0.01 sec)mysql> select min(English) from examresult;
+--------------+
| min(English) |
+--------------+
| 56.0 |
+--------------+
1 row in set (0.00 sec)
4.1.2GROUP BY
指定这一列,按照这一列进行分组,这一列中,数值相同的行会被放到同一组;
注意:查询时select中指定的列必须是当前group by 指定的列,如果想用其他的列,其他的列必须放到聚合函数中,否则查询的结果无意义。
mysql> select * from emp;
+----+--------+--------+--------+
| id | name | role | salary |
+----+--------+--------+--------+
| 1 | 张三 | 讲师 | 10000 |
| 2 | 李四 | 讲师 | 11000 |
| 3 | 王五 | 讲师 | 12000 |
| 4 | 赵六 | 学管师 | 9000 |
| 5 | 田七 | 学管师 | 8500 |
| 6 | 龙傲天 | 老板 | 100000 |
+----+--------+--------+--------+
6 rows in set (0.00 sec)mysql> select role,avg(salary) from emp group by role;
+--------+-------------+
| role | avg(salary) |
+--------+-------------+
| 学管师 | 8750.0000 |
| 老板 | 100000.0000 |
| 讲师 | 11000.0000 |
+--------+-------------+
3 rows in set (0.01 sec)mysql> select role,name ,avg(salary) from emp group by role; //无意义
+--------+--------+-------------+
| role | name | avg(salary) |
+--------+--------+-------------+
| 学管师 | 赵六 | 8750.0000 |
| 老板 | 龙傲天 | 100000.0000 |
| 讲师 | 张三 | 11000.0000 |
+--------+--------+-------------+
3 rows in set (0.00 sec)
分组前的条件语句:where
分组后的条件语句:having
mysql> select role,avg(salary) from emp where name != '张三' group by role;
+--------+-------------+
| role | avg(salary) |
+--------+-------------+
| 学管师 | 8750.0000 |
| 老板 | 100000.0000 |
| 讲师 | 11500.0000 |
+--------+-------------+
3 rows in set (0.01 sec)mysql> select role,avg(salary) from emp group by role having avg(salary) < 20000;
+--------+-------------+
| role | avg(salary) |
+--------+-------------+
| 学管师 | 8750.0000 |
| 讲师 | 11000.0000 |
+--------+-------------+
2 rows in set (0.01 sec)mysql> select role,avg(salary) from emp where name != '张三' group by role having avg(salary) < 20000;
+--------+-------------+
| role | avg(salary) |
+--------+-------------+
| 学管师 | 8750.0000 |
| 讲师 | 11500.0000 |
+--------+-------------+
2 rows in set (0.00 sec)
4.2联合查询
把所有表结合再筛选,效率十分低下。
笛卡尔积:任意两张表都可以算,但是如果两张表没有关系,计算的结果无意义。
格式:select * from 表名, 表名……
连接条件:筛选掉无意义的数据。
建表阶段:
mysql> create table classes(id int primary key auto_increment, name varchar(20), `desc` varchar(100));
Query OK, 0 rows affected (0.02 sec)mysql> create table student(id int primary key auto_increment, sn varchar(20), name varchar(20), qq_mail varchar(20), class_id int);
Query OK, 0 rows affected (0.02 sec)mysql> create table course(id int primary key auto_increment, name varchar(20));
Query OK, 0 rows affected (0.02 sec)mysql> create table score(score decimal(3,1), student_id int, course_id int);
Query OK, 0 rows affected (0.02 sec)mysql> insert into classes(name, `desc`) values-> ('计算机系2022级16班', '计算机原理、C语言、Java语言'),-> ('中文系2022级3班','中国传统文学、古代文学鉴赏'),-> ('自动化2022级9班','机械自动化');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql> insert into student(sn, name, qq_mail, class_id) values-> ('09982','张三','zhangsan@qq.com',1),-> ('00835','李四',null,1),-> ('00391','王五',null,1),-> ('00031','赵六','zhaoliu@qq.com',1),-> ('00054','田七',null,1),-> ('51234','钱八','qianba@qq.com',2),-> ('83223','孙九',null,2),-> ('09527','吴十','wushi@qq.com',2);
Query OK, 8 rows affected (0.01 sec)
Records: 8 Duplicates: 0 Warnings: 0mysql> insert into course(name) values-> ('Java'),('中国传统文化'),('计算机原理'),('语文'),('高阶数学'),('英文');
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0mysql> insert into score(score, student_id, course_id) values-> (70.5, 1, 1),(98.5, 1, 3),(33, 1, 5),(98, 1, 6),-> (60, 2, 1),(59.5, 2, 5),-> (33, 3, 1),(68, 3, 3),(99, 3, 5),-> (67, 4, 1),(23, 4, 3),(56, 4, 5),(72, 4, 6),-> (81, 5, 1),(37, 5, 5),-> (56, 6, 2),(43, 6, 4),(79, 6, 6),-> (80, 7, 2),(92, 7, 6);
Query OK, 20 rows affected (0.01 sec)
Records: 20 Duplicates: 0 Warnings: 0
提问:查询赵六同学的成绩;
查询每个班有多少人;
查询每个同学的总成绩;
查询每个同学每个课程的成绩
单表查询条件中直接写列名即可,多表查询条件中最好写作 “表名.列名”
4.2.1内连接
mysql> select student.name, score.score from student ,score where student.id = score.student_id and student.name = '赵六';
+------+-------+
| name | score |
+------+-------+
| 赵六 | 67.0 |
| 赵六 | 23.0 |
| 赵六 | 56.0 |
| 赵六 | 72.0 |
+------+-------+
4 rows in set (0.01 sec)mysql> select classes.name, count(student.class_id) from student, classes where student.class_id = classes.id group by classes.name;
+--------------------+-------------------------+
| name | count(student.class_id) |
+--------------------+-------------------------+
| 中文系2022级3班 | 3 |
| 计算机系2022级16班 | 5 |
+--------------------+-------------------------+
2 rows in set (0.00 sec)mysql> select student.name, sum(score.score) as summary from student, score where student.id = score.student_id group by student.name;
+------+---------+
| name | summary |
+------+---------+
| 孙九 | 172.0 |
| 张三 | 300.0 |
| 李四 | 119.5 |
| 王五 | 200.0 |
| 田七 | 118.0 |
| 赵六 | 218.0 |
| 钱八 | 178.0 |
+------+---------+
7 rows in set (0.00 sec)mysql> select student.name, course.name as object, score.score from student, score, course where student.id = score.student_id and score.course_id = course.id;
+------+--------------+-------+
| name | object | score |
+------+--------------+-------+
| 张三 | Java | 70.5 |
| 张三 | 计算机原理 | 98.5 |
| 张三 | 高阶数学 | 33.0 |
| 张三 | 英文 | 98.0 |
| 李四 | Java | 60.0 |
| 李四 | 高阶数学 | 59.5 |
| 王五 | Java | 33.0 |
| 王五 | 计算机原理 | 68.0 |
| 王五 | 高阶数学 | 99.0 |
| 赵六 | Java | 67.0 |
| 赵六 | 计算机原理 | 23.0 |
| 赵六 | 高阶数学 | 56.0 |
| 赵六 | 英文 | 72.0 |
| 田七 | Java | 81.0 |
| 田七 | 高阶数学 | 37.0 |
| 钱八 | 中国传统文化 | 56.0 |
| 钱八 | 语文 | 43.0 |
| 钱八 | 英文 | 79.0 |
| 孙九 | 中国传统文化 | 80.0 |
| 孙九 | 英文 | 92.0 |
+------+--------------+-------+
20 rows in set (0.00 sec)
4.2.2外连接
格式:select 列名 from 表名 left/right join 表名 on 条件;
分类:左外连接:left join 以左侧表为主,左侧表中的数据在结果中一定存在,若左表存在右表不存在,会将对应的列填为空值;
右外连接:right join 类上;
全外连接:outer join ,MySQL 不支持,Oracle支持。
mysql> select student.name, score.score from student join score on student.id = score.student_id and student.name = '赵 六';
+------+-------+
| name | score |
+------+-------+
| 赵六 | 67.0 |
| 赵六 | 23.0 |
| 赵六 | 56.0 |
| 赵六 | 72.0 |
+------+-------+
4 rows in set (0.00 sec)
mysql> select * from student;
+------+------+
| id | name |
+------+------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
+------+------+
3 rows in set (0.01 sec)mysql> select * from score;
+------+-------+
| id | score |
+------+-------+
| 1 | 90 |
| 2 | 80 |
| 4 | 70 |
+------+-------+
3 rows in set (0.00 sec)mysql> select * from student join score on student.id = score.id;
+------+------+------+-------+
| id | name | id | score |
+------+------+------+-------+
| 1 | 张三 | 1 | 90 |
| 2 | 李四 | 2 | 80 |
+------+------+------+-------+
2 rows in set (0.00 sec)mysql> select * from student left join score on student.id = score.id;
+------+------+------+-------+
| id | name | id | score |
+------+------+------+-------+
| 1 | 张三 | 1 | 90 |
| 2 | 李四 | 2 | 80 |
| 3 | 王五 | NULL | NULL |
+------+------+------+-------+
3 rows in set (0.00 sec)mysql> select * from student right join score on student.id = score.id;
+------+------+------+-------+
| id | name | id | score |
+------+------+------+-------+
| 1 | 张三 | 1 | 90 |
| 2 | 李四 | 2 | 80 |
| NULL | NULL | 4 | 70 |
+------+------+------+-------+
3 rows in set (0.00 sec)
4.2.3自连接
自己和自己做笛卡尔积,把行之间的关系转换为列之间的关系;
为避免重命名,名字要使用别名。
格式:select * from 表名 as 别名1, 表名 as 别名2;
mysql> select * from student1;
+------+------+
| id | name |
+------+------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
+------+------+
3 rows in set (0.00 sec)mysql> select * from student1 as s1, student1 as s2;
+------+------+------+------+
| id | name | id | name |
+------+------+------+------+
| 1 | 张三 | 1 | 张三 |
| 2 | 李四 | 1 | 张三 |
| 3 | 王五 | 1 | 张三 |
| 1 | 张三 | 2 | 李四 |
| 2 | 李四 | 2 | 李四 |
| 3 | 王五 | 2 | 李四 |
| 1 | 张三 | 3 | 王五 |
| 2 | 李四 | 3 | 王五 |
| 3 | 王五 | 3 | 王五 |
+------+------+------+------+
9 rows in set (0.00 sec)
4.2.4子查询
嵌在其他SQL语句中的select语句,也叫嵌套查询。
4.2.5合并查询
将两个查询表合并成一个表。
格式:select * from 表1 union (all) select * from 表2;
合并前提:两表参数类型需一一对应,名字可以不同。
mysql> select * from student1;
+------+------+
| id | name |
+------+------+
| 1 | 张三 |
| 2 | 李四 |
+------+------+
2 rows in set (0.04 sec)mysql> select * from student2;
+------+------+
| id | name |
+------+------+
| 1 | 张三 |
| 3 | 王五 |
+------+------+
2 rows in set (0.00 sec)mysql> select * from student1 union select * from student2;
+------+------+
| id | name |
+------+------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
+------+------+
3 rows in set (0.04 sec)mysql> select * from student1 union all select * from student2;
+------+------+
| id | name |
+------+------+
| 1 | 张三 |
| 2 | 李四 |
| 1 | 张三 |
| 3 | 王五 |
+------+------+
4 rows in set (0.01 sec)
关于表的内容就over啦!
相关文章:

【MySQL】表的增删查改(进阶)
目录 1.数据库约束 1.1NOT NULL:非空约束 1.2UNIQUE:唯一值约束 1.3DEFAULT:默认值约束 1.4PRIMARY KEY:主键约束 1.5FOREIGN KEY:外键约束 1.6CHECK约束 2.表的设计 2.1一对一 2.2一对多 2.3多对多 3.新增…...

Vim几种跳转方式
ps: 以下时我常用的一些跳转指令,用于参考和复习记忆。还有一些后续会更新。 文件内跳转 移动光标 普通模式下左h,右l,上k,下j。(可以使用数字hlkj,实现跳跃式移动)。 字符间跳转 …...

element-ui 弹窗里面嵌套弹窗,解决第二个弹窗被遮罩层掩盖无法显示的问题
当我们在 element-ui 中使用弹窗嵌套弹窗时,会出现第二个弹窗打开时被一个遮罩层挡着,就像下面这样: 下面提供两种解决方案 : 一、第一种方案 我们查询element-ui 官网可以发现 el-dialog 有这样几个属性: 具体使用就…...

【业务功能篇76】微服务网关路由predicates断言条件-filters路由转换地址-跨域问题-多级目录树化层级设计-mybatisPlus逻辑删除
业务开发-基础业务-分类管理 启动renren-fast如果出现如下错误 -Djps.track.ap.dependenciesfalse 添加相关配置即可 分类管理 1.后端分类接口 JDK8特性:https://blog.csdn.net/qq_38526573/category_11113126.html 在后端服务中我们需要查询出所有的三级分类信…...

apache的ab工具测试网页优化效果速度以及服务器承载
今天为大家介绍一款apache自带的一种的测试网页优化效果速度以及服务器承载的工具——ab.exe。 大家在工作中或者开发中可以使用apache的ab工具来测试自己的网站并发量大小,和某个页面的访问时间。 一、基本用法 如果你是用的是apache的话,那么只要进…...

【进阶篇】MySQL 存储引擎详解
文章目录 0.前言1.基础介绍2.1. InnoDB存储引擎底层原理InnoDB记录存储结构和索引页结构InnoDB记录存储结构:InnoDB索引页结构: 3. MVCC 详解3.1. 版本号分配:3.2. 数据读取:3.3. 数据写入:3.4. 事务隔离级别ÿ…...

Spring集成【MyBatis】和【PageHelper分页插件】整合---详细介绍
一,spring集成Mybatis的概念 Spring 整合 MyBatis 是将 MyBatis 数据访问框架与 Spring 框架进行集成,以实现更便捷的开发和管理。在集成过程中,Spring 提供了许多特性和功能,如依赖注入、声明式事务管理、AOP 等 它所带来给我们的…...

PyCharm下安装配置PySide6开发环境(Qt Designer(打开,编辑)、PyUIC和PyRCC)
一.准备工作 1.安装python和pycharm并配置好环境变量 python安装路径 pycharm安装路径: python系统变量: pycharm环境变量: 注意:正常安装,并勾选ADD PATH一般会自动配好 2.在pycharm创建一个新的python的虚拟环境 …...

pytest fixture 创建一个 requests.session() 对象
当你运行这段代码时,它会执行以下操作: 1. 导入必要的库:pytest 和 requests。 2. 定义一个夹具(fixture)函数 session,使用 pytest.fixture(scopesession) 装饰器进行标记。这个夹具函数在整个测试会话期…...

深入分析负载均衡情景
本文出现的内核代码来自Linux5.4.28,为了减少篇幅,我们尽量不引用代码,如果有兴趣,读者可以配合代码阅读本文。 一、有几种负载均衡的方式? 整个Linux的负载均衡器有下面的几个类型: 实际上内核的负载均衡…...

WPF基础入门-Class5-WPF命令
WPF基础入门 Class5-WPF命令 1、xaml编写一个button,Command绑定一个命令 <Grid><ButtonWidth"100"Height"40" Command"{Binding ShowCommand}"></Button> </Grid>2、编写一个model.cs namespace WPF_Le…...

云安全攻防(十三)之 使用minikube安装搭建 K8s 集群
使用minikube安装搭建 K8s 集群 Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化,一般来说K8s安装有三种方式,分别是Minikube装搭建 K8s 集群,特点是只有一个节点的集群&…...

Python数据分析 | 各种图表对比总结
本期将带领大家一起对在数据可视化的过程中常用的一些图表进行下总结: 条形图 【适用场景】 适用场合是二维数据集(每个数据点包括两个值x和y),但只有一个维度需要比较,用于显示一段时间内的数据变化或显示各项之间的…...

linux系统(centos、ubuntu、银河麒麟服务、uos、deepin)判断程序是否已安装,通用判断方法:适用所有应用和命令的判断
前言 项目中需要判断linux服务器中是否已经安装了某个服务 方法有很多种,但是很多都不通用, 脚本代码就不容易做成统一的 解决方案 用下面的脚本代码去进行判断 用jdk测试 脚本意思如下: 输入java -version命令,将返回的字…...

Python3多线程/多进程解决方案(持续更新ing...)
诸神缄默不语-个人CSDN博文目录 文章目录 1. 多线程2. 多进程示例1:multiprocessing.Pool直接实现对一个列表中的每个元素的函数操作示例2:使用苏神写的工具函数实现对一个迭代器中每个元素的函数操作 1. 多线程 2. 多进程 示例1:multiproc…...

在`CentOS`中安装`Docker Engine`
本文总结如何在CentOS中安装Docker Engine 〇、Docker Engine 介绍 Docker Engine是一种开源容器化技术,用于构建和容器化应用程序。Docker引擎作为一个客户端-服务器应用程序: 具有长时间运行守护进程的服务器。指定接口的api,程序可以使用这些接口与…...

[ VMware 虚拟机 ] 启动不了图形界面,报 “The system is running in low-graphics mode” 错误
文章目录 问题现象异常原因解决方案 问题现象 在启动虚拟机的时候,不能正常的进入图形界面,报 “The system is running in low-graphics mode” 错误。 异常原因 启动界面的xorg.conf文件失败并删除。 解决方案 1、点击异常界面上的 “ok”后&…...

如何提高视频清晰度?视频调整清晰度操作方法
现在很多小伙伴通过制作短视频发布到一些短视频平台上记录生活,分享趣事。但制作的视频有些比较模糊,做视频的小伙伴应该都知道,视频画质模糊不清,会严重影响观众的观看体验。 通过研究,总结了以下几点严重影响的点 …...

IO进程线程,文件与目录,实现linux任意目录下ls -la
注意文件的名字、路径是如何输入的。 函数opendir打开目录,struct dirent,struct stat这些结构体的含义。 readdir()函数是一个用于读取目录内容的系统调用或库函数,在类Unix操作系统中(如Linux)广泛使用。它用于遍历…...

R语言如果列表中有列表,且每个子列表有一个向量:如何转变为仅仅一个列表里面含有向量
引言 有些时候,比如批量读取表格中的某一列的时候,最终你会得到列表里面装列表,且每个列表里面只有一个向量的情况。我们的目标是不要中间这一层列表,而是直接变成列表-向量这种简单的结构,如何完成呢。我觉得有很多方…...

nrm管理源仓库及发布私人npm包
使用nrm管理源及切换源仓库 1.安装nrm源管理器 npm install nrm -g2.查看目前现有的源仓库 通过 nrm ls 查看现有的源 nrm ls 输出:这是目前现有的源 3.切换不同的源 可以通过 nrm use xxx(源仓库名)来切换不同的源地址 nrm use taobao…...

云计算——虚拟化中的网络架构与虚拟网络(文末送书)
作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号:网络豆 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页 目录 前期回顾 前言 一.网卡虚拟化 1.网卡虚拟化方法&…...

B - 负环
题目描述 给定一个 n 个点的有向图,请求出图中是否存在从顶点 11 出发能到达的负环。 负环的定义是:一条边权之和为负数的回路。 输入格式 本题单测试点有多组测试数据。 输入的第一行是一个整数 T,表示测试数据的组数。对于每组数据的格…...

居中一个元素(水平+垂直居中)
我们的示例代码全在此基础上修改: ...... <style>* {margin: 0;padding: 0;}.par {width: 600px;height: 400px;background-color: antiquewhite;display: flex;justify-content: center;align-items: center;}.chi1 {width: 60px;height: 40px;backgrou…...

React笔记(二)JSX
一、JSX JSX是javascript XML的简写,实际上是javascript的扩展,既有javascript的语法结构,又有XML的结构 1、JSX的规则要求 jsx必须要有一个根节点 如果不想产生无用的根标签,但是还要遵守JSX的语法的要求,可以使用…...

[多标签分类]MultiLabelBinarizer: 从one-hot 到multi-hot
]MultiLabelBinarizer: 从one-hot 到multi-hot 背景知识One hot encoderLabelEncoderMultiLabelBinarizer总结 背景知识 多类别分类: label space至少有3个label, 且默认每个sample有一个label, 与之相对应的是二元分类Binary classification, 多标签分类: 每个sample有1至多…...

【校招VIP】前端算法考察之排序
考点介绍: 不同的场景中,不同的排序算法执行效率不同。 稳定:冒泡、插入、归并 不稳定:选择、快速、堆排序、希尔排序 『前端算法考察之排序』相关题目及解析内容可点击文章末尾链接查看! 一、考点题目 1、使用js实…...

集创北方ICN6211 是一款MIPIDSI转RGB视频桥接IC
ICN6211 1.描述: ICN6211是一个桥接芯片,它接收MIPIDSI输入并发送RGB输出。MIPIDSI最多支持4个车道, 每个车道的最大运行频率为1Gbps;总最大输入带宽为4Gbps;并且还支持MIPI定义的ULPS(超 低功耗状态&a…...

SMT制造中的产品质量检验和管理
SMT制造中的质量检验和产品物料管理都是实现高质量、低成本、高效益的重要方法。在SMT加工的过程中,产品质量的检验和质量把控都是重中之重,可以有效的降低产品不良率及返修等造成制造成本升高的风险问题,今天就来跟大家讨论一下SMT制造中我们…...

对接webservice接口时报错:发送方和接收方 Action 不匹配
趁着早上有时间,赶紧记录一下,哈哈。 错误提示如下: 1、英文版: <s:Envelope xmlns:s“http://schemas.xmlsoap.org/soap/envelope/”><s:Body><s:Fault>a:ActionNotSupportedThe message with Action ‘’ ca…...