MySQL数据库 #4

news2024/11/15 14:08:38

文章目录

  • 一、MySQL外键基本概念
      • 1. 表与表之间的关系
          • 1.一对多的表关系
            • 2.多对多
            • 3.一对一
            • 注意事项
      • 2.多表查询
            • 1.子查询
            • 2.数据准备
            • 3.连表查询(重点)
  • 二、多表查询练习题
      • 1.习题
      • 试题的SQL文件
      • 2.Navicata可视化软件
            • 1.连接数据库
            • 2 操作数据库
            • 3.导入备份
            • 4.查询数据
            • 5.修改用户信息

一、MySQL外键基本概念

1、MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引。

2、外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接。

3、如果需要更好的性能,并且不需要完整性检查,可以选择使用MyISAM表类型,如果想要在MySQL中根据参照完整性来建立表并且希望在此基础上保持良好的性能,最好选择表结构为innoDB类型。

"""
缺陷
1.表的重点不清晰				可以忽略
	到底是员工表还是部门表
2.表中相关字段一直在重复存储		可以忽略
	浪费存储空间
3.表的扩展性极差,牵一发而动全身   不能忽略
"""

解决方式
	将上述一张表拆分成两张表
	emp与dep
	上述的三个问题可以解决

但是带来了一个小问题,表与表之间的数据没有对应关系了

可以添加外键字段(部门编号)让你渠道其他表中查找数据

1. 表与表之间的关系

1.一对多的表关系

如何判断表的关系:换位思考法

以员工表和部门表为例:
先站在员工表
问:一个员工能否有多个部门?
答:不能

再站在部门表
问:一个部门能否有多个员工?
答:可以

结论:一个可以,一个不可以,表的关系就是:一对多,表关系中没有多对一,针对于一对多,外键字段要建在多的一方

如何在SQL层面建立一对多的关系:先把基础表中的基础字段建立出来,然后在考虑外部字段

首先需要建立出部门表才能再建立员工表


部门表:
create table dep(
	id int primary key auto_increment,
    dep_name varchar(32),
    dep_desc varchar(32)
);



员工表:
create table emp(
	id int primary key auto_increment,
    name varchar(32),
    age int,
    dep_id int,
    foreign key(dep_id) references dep(id) # 让两张表建立了外键关系
    on update cascade # 级联更新
    on delete cascade # 级联删除
);
'''在员工表里添加外键,dep_id是绑定对象,绑定给部门表里的id
   还需要在后面添加上两个语句,级联更新和级联删除
'''

录入数据:

录入数据也需要先录入部门的:
insert into dep(dep_name,dep_desc) values('人事部','管理员工'),('财务部','管理资金'),('技术部','软件开发');

+----+-----------+--------------+
| id | dep_name  | dep_desc     |
+----+-----------+--------------+
|  1 | 人事部    | 管理员工     |
|  2 | 财务部    | 管理资金     |
|  3 | 技术部    | 软件开发     |
+----+-----------+--------------+



员工:
insert into emp(name, age, dep_id) values('jack',18,1),('tank',19,1),('jarry',20,2),('kevin',18,3);

+----+-------+------+--------+
| id | name  | age  | dep_id |
+----+-------+------+--------+
|  1 | jack  |   18 |      1 |
|  2 | tank  |   19 |      1 |
|  3 | jarry |   20 |      2 |
|  4 | kevin |   18 |      3 |
+----+-------+------+--------+
2.多对多

以图书表和作者表为例
我们站在图书表的角度
问:一本图书能不能有多个作者?
答:可以

我们再站在作者表的角度
问:一个作者能不能写多本书
答:可以

结论:如果两个都可以,那么表关系就是多对多,针对多对多的表关系,外键字段在第三张表中

针对于多对多的表关系,外键字段如何创建

先创建一个书的表:
create table book(
	id int primary key auto_increment,
    title varchar(32),
    price decimal(8,2)
);


在创建一个作者的表:
create table book(
	id int primary key auto_increment,
    title varchar(32),
    price decimal(8,2)
);



最后再创建一个外键(包含作者和书的):
create table book2author(
	id int primary key auto_increment,
    book_id int,
    author_id int,
    foreign key(book_id) references author(id) # 让两张表建立了外键关系
    on update cascade # 级联更新
    on delete cascade, # 级联删除
    foreign key(author_id) references book(id) # 让两张表建立了外键关系
    on update cascade # 级联更新
    on delete cascade # 级联删除
);

录入书表的数据:
insert book(title,price) values('水浒传',50);
insert book(title,price) values('西游记',100);
+----+-----------+--------+
| id | title     | price  |
+----+-----------+--------+
|  1 | 水浒传    |  50.00 |
|  2 | 西游记    | 100.00 |
+----+-----------+--------+

录入作者表的数据
insert into author(name,addr) values('施耐庵','江苏');
insert into author(name,addr) values('罗贯中','山西');
+----+-----------+--------+
| id | name      | addr   |
+----+-----------+--------+
|  1 | 施耐庵    | 江苏   |
|  2 | 罗贯中    | 山西   |
+----+-----------+--------+

添加外键数据:
insert into book_author(book_id,author_id) values(2,1);
insert into book_author(book_id,author_id) values(1,1);
insert into book_author(book_id,author_id) values(1,2),(2,2);

+----+---------+-----------+
| id | book_id | author_id |
+----+---------+-----------+
|  1 |       2 |         1 |  一个作者拥有两本书
|  2 |       1 |         1 |
|  3 |       1 |         2 |
|  4 |       2 |         2 |
+----+---------+-----------+
3.一对一

以作者表和作者详情表为例

外键关系建立在哪里?

两张表都可以,但是,推荐建在查询频率较高的一张表


先建立出作者详情表:
create table author_detail(
	id int primary key auto_increment,
    qq varchar(32),
    email varchar(32)
);



再建立出作者表:
create table author1(
	id int primary key auto_increment,
    name varchar(32),
    age int,
    gender varchar(32),
    author_detail_id int unique,
    foreign key(author_detail_id) references author_detail(id)
    on update cascade
    on delete cascade
);



先录入作者详情数据:
insert into author_detail(qq,emial) values('123456789','qerqwe@qq.com');
insert into author_detail(qq,email)values('123123123123','axecefdicd@gmail.com');


在录入作者数据:
insert into author1(name,age,gender,author_detail_id) values('zhangsan',30,'male',1);
insert into author1(name, age, gender, author_detail_id) values('lisi',40,'male',2);
注意事项

1.在创建表的时候 需要先创建被关联表(没有外键字段的表)

2.在插入新数据的时候 应该先确保被关联表中有数据

3.在插入新数据的时候 外键字段只能填写被关联表中已经存在的数据

4.在修改和删除被关联表中的数据的时候 无法直接操作
如果想要数据之间自动修改和删除需要添加额外的配置

2.多表查询

在此之前,都是单表下查询

多表查询的思路是:

1.子查询

查询jack的部门名称

应该先查询jack 的部门编号(部门表的id)
select dep_id from emp where name='jack';
+--------+
| dep_id |
+--------+
|      1 |
+--------+


select * from dep where id=(select dep_id from emp where name='jack');
+----+-----------+--------------+
| id | dep_name  | dep_desc     |
+----+-----------+--------------+
|  1 | 人事部    | 管理员工     |
+----+-----------+--------------+

子查询就是:一条SQL的执行结果就是另外一条SQL的执行条件!
其实就是分步操作

2.数据准备
create table dep(
    id int primary key auto_increment,
    name varchar(20) 
);

create table emp(
    id int primary key auto_increment,
    name varchar(20),
    sex enum('male','female') not null default 'male',
    age int,
    dep_id int
);
"""如果两张表没有建立强制的约束关系,就使用逻辑意义上的关联"""
#插入数据
insert into dep values
(200,'技术'),
(201,'人力资源'),
(202,'销售'),
(203,'运营'),
(205,'保洁')
;

insert into emp(name,sex,age,dep_id) values
('jason','male',18,200),
('egon','female',48,201),
('kevin','male',18,201),
('nick','male',28,202),
('owen','male',18,203),
('jerry','female',18,204);

将以上数据录入以后,会得到这样的两张表:
在这里插入图片描述

3.连表查询(重点)

把多张有关系的表链接成一张大的虚拟表,连接出来的虚拟表不是实际存在的,它是在内存中存储,然后按照单表查询

专业的连表语法:

inner join  内连接,查询的是两张表中都有的数据

left join   左连接,以左表为基准,查询左表中所有的数据,右表没有的数据,使用NULL填充

right join  右连接,以右表为基准,查询右表中所有的数据,右表没有的数据,使用NULL填充

union       连接两个SQL语句的结果

1.使用内连接

 select * from emp inner join dep;
+----+-------+--------+------+--------+-----+--------------+
| id | name  | sex    | age  | dep_id | id  | name         |
+----+-------+--------+------+--------+-----+--------------+
|  1 | jason | male   |   18 |    200 | 200 | 技术         |
|  1 | jason | male   |   18 |    200 | 201 | 人力资源     |
|  1 | jason | male   |   18 |    200 | 202 | 销售         |
|  1 | jason | male   |   18 |    200 | 203 | 运营         |
|  1 | jason | male   |   18 |    200 | 205 | 保洁         |
|  2 | egon  | female |   48 |    201 | 200 | 技术         |
|  2 | egon  | female |   48 |    201 | 201 | 人力资源     |
|  2 | egon  | female |   48 |    201 | 202 | 销售         |
|  2 | egon  | female |   48 |    201 | 203 | 运营         |
|  2 | egon  | female |   48 |    201 | 205 | 保洁         |
|  3 | kevin | male   |   18 |    201 | 200 | 技术         |
|  3 | kevin | male   |   18 |    201 | 201 | 人力资源     |
|  3 | kevin | male   |   18 |    201 | 202 | 销售         |
|  3 | kevin | male   |   18 |    201 | 203 | 运营         |
|  3 | kevin | male   |   18 |    201 | 205 | 保洁         |
|  4 | nick  | male   |   28 |    202 | 200 | 技术         |
|  4 | nick  | male   |   28 |    202 | 201 | 人力资源     |
|  4 | nick  | male   |   28 |    202 | 202 | 销售         |
|  4 | nick  | male   |   28 |    202 | 203 | 运营         |
|  4 | nick  | male   |   28 |    202 | 205 | 保洁         |
|  5 | owen  | male   |   18 |    203 | 200 | 技术         |
|  5 | owen  | male   |   18 |    203 | 201 | 人力资源     |
|  5 | owen  | male   |   18 |    203 | 202 | 销售         |
|  5 | owen  | male   |   18 |    203 | 203 | 运营         |
|  5 | owen  | male   |   18 |    203 | 205 | 保洁         |
|  6 | jerry | female |   18 |    204 | 200 | 技术         |
|  6 | jerry | female |   18 |    204 | 201 | 人力资源     |
|  6 | jerry | female |   18 |    204 | 202 | 销售         |
|  6 | jerry | female |   18 |    204 | 203 | 运营         |
|  6 | jerry | female |   18 |    204 | 205 | 保洁         |
+----+-------+--------+------+--------+-----+--------------+

会将所有出现过的数据重复展示

2.使用左连接

 select * from emp left join dep on emp.dep_id = dep.id;
+----+-------+--------+------+--------+------+--------------+
| id | name  | sex    | age  | dep_id | id   | name         |
+----+-------+--------+------+--------+------+--------------+
|  1 | jason | male   |   18 |    200 |  200 | 技术         |
|  2 | egon  | female |   48 |    201 |  201 | 人力资源     |
|  3 | kevin | male   |   18 |    201 |  201 | 人力资源     |
|  4 | nick  | male   |   28 |    202 |  202 | 销售         |
|  5 | owen  | male   |   18 |    203 |  203 | 运营         |
|  6 | jerry | female |   18 |    204 | NULL | NULL         |
+----+-------+--------+------+--------+------+--------------+

3.使用右连接

select * from emp right join dep on emp.dep_id=dep.id;
+------+-------+--------+------+--------+-----+--------------+
| id   | name  | sex    | age  | dep_id | id  | name         |
+------+-------+--------+------+--------+-----+--------------+
|    1 | jason | male   |   18 |    200 | 200 | 技术         |
|    2 | egon  | female |   48 |    201 | 201 | 人力资源     |
|    3 | kevin | male   |   18 |    201 | 201 | 人力资源     |
|    4 | nick  | male   |   28 |    202 | 202 | 销售         |
|    5 | owen  | male   |   18 |    203 | 203 | 运营         |
| NULL | NULL  | NULL   | NULL |   NULL | 205 | 保洁         |
+------+-------+--------+------+--------+-----+--------------+

4.使用union连接连个SQL语句

 select * from emp right join dep on emp.dep_id=dep.id
-> union
-> select * from emp left join dep on emp.dep_id = dep.id;
+------+-------+--------+------+--------+------+--------------+
| id   | name  | sex    | age  | dep_id | id   | name         |
+------+-------+--------+------+--------+------+--------------+
|    1 | jason | male   |   18 |    200 |  200 | 技术         |
|    2 | egon  | female |   48 |    201 |  201 | 人力资源     |
|    3 | kevin | male   |   18 |    201 |  201 | 人力资源     |
|    4 | nick  | male   |   28 |    202 |  202 | 销售         |
|    5 | owen  | male   |   18 |    203 |  203 | 运营         |
| NULL | NULL  | NULL   | NULL |   NULL |  205 | 保洁         |
|    6 | jerry | female |   18 |    204 | NULL | NULL         |
+------+-------+--------+------+--------+------+--------------+

二、多表查询练习题

1.习题

1、查询所有的课程的名称以及对应的任课老师姓名
2、查询平均成绩大于八十分的同学的姓名和平均成绩
3、查询没有报李平老师课的学生姓名
4、查询挂科超过两门(包括两门)的学生姓名和班级
'''可能有点难,自己做,能做几个做几个.'''
###########################编写SQL不要想着一次性写完 可以边写边看######################################

-- 1、查询所有的课程的名称以及对应的任课老师姓名
-- SELECT
-- 	teacher.tname,
-- 	course.cname 
-- FROM
-- 	teacher
-- 	INNER JOIN course ON teacher.tid = course.teacher_id;
-- 2、查询平均成绩大于八十分的同学的姓名和平均成绩
# 1.先确定需要使用到的表 
# 2.在思考多表查询的方式
# 第一步先查询成绩表中 平均成绩大于80的学生编号
# 1.1 按照学生id分组并获取平均成绩
-- select student_id,avg(num) from score group by student_id;
# 1.2 筛选出平均成绩大于80的数据  (针对聚合函数的字段结果 最好起别名防止冲突)
-- select student_id,avg(num) as avg_num from score group by student_id having avg(num) > 80;
# 1.3 将上述SQL的结果与student表拼接
-- SELECT
-- 	student.sname,
-- 	t1.avg_num 
-- FROM
-- 	student
-- 	INNER JOIN ( SELECT student_id, avg( num ) AS avg_num FROM score GROUP BY student_id HAVING avg( num ) > 80 ) AS t1 ON student.sid = t1.student_id;
-- 3、查询没有报李平老师课的学生姓名
# 1.先查询李平老师教授的课程编号
-- select course.cid from course where teacher_id = 
-- (select tid from teacher where tname ='李平老师');
# 2.根据课程id号筛选出所有报了的学生id号
-- select distinct score.student_id from score where course_id in (select course.cid from course where teacher_id = 
-- (select tid from teacher where tname ='李平老师'));
# 3.去学生表中根据id号取反筛选学生姓名
-- SELECT
-- 	student.sname 
-- FROM
-- 	student 
-- WHERE
-- 	sid NOT IN (
-- SELECT DISTINCT
-- 	score.student_id 
-- FROM
-- 	score 
-- WHERE
-- 	course_id IN ( SELECT course.cid FROM course WHERE teacher_id = ( SELECT tid FROM teacher WHERE tname = '李平老师' ) ) 
-- 	);
-- 4、查询挂科超过两门(包括两门)的学生姓名和班级
# 1.先筛选出小于60分的数据
-- select * from score where num < 60;
# 2.按照学生id分组 然后统计挂科数量
-- select student_id,count(course_id) from score where num < 60 group by student_id;
# 3.筛选出挂科超过两门的学生id
-- select student_id from score where num < 60 group by student_id
-- having count(course_id) >=2;
# 4.先将上述结果放在一边 去连接student和class表
SELECT
	student.sname,
	class.caption 
FROM
	class
	INNER JOIN student ON class.cid = student.class_id 
WHERE
	student.sid IN ( SELECT student_id FROM score WHERE num < 60 GROUP BY student_id HAVING count( course_id ) >= 2 );

试题的SQL文件

/*
 数据导入:
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 50624
 Source Host           : localhost
 Source Database       : sqlexam

 Target Server Type    : MySQL
 Target Server Version : 50624
 File Encoding         : utf-8

 Date: 10/21/2016 06:46:46 AM
*/

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `class`
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `caption` varchar(32) NOT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `class`
-- ----------------------------
BEGIN;
INSERT INTO `class` VALUES ('1', '三年二班'), ('2', '三年三班'), ('3', '一年二班'), ('4', '二年九班');
COMMIT;

-- ----------------------------
--  Table structure for `course`
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(32) NOT NULL,
  `teacher_id` int(11) NOT NULL,
  PRIMARY KEY (`cid`),
  KEY `fk_course_teacher` (`teacher_id`),
  CONSTRAINT `fk_course_teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `course`
-- ----------------------------
BEGIN;
INSERT INTO `course` VALUES ('1', '生物', '1'), ('2', '物理', '2'), ('3', '体育', '3'), ('4', '美术', '2');
COMMIT;

-- ----------------------------
--  Table structure for `score`
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `student_id` int(11) NOT NULL,
  `course_id` int(11) NOT NULL,
  `num` int(11) NOT NULL,
  PRIMARY KEY (`sid`),
  KEY `fk_score_student` (`student_id`),
  KEY `fk_score_course` (`course_id`),
  CONSTRAINT `fk_score_course` FOREIGN KEY (`course_id`) REFERENCES `course` (`cid`),
  CONSTRAINT `fk_score_student` FOREIGN KEY (`student_id`) REFERENCES `student` (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `score`
-- ----------------------------
BEGIN;
INSERT INTO `score` VALUES ('1', '1', '1', '10'), ('2', '1', '2', '9'), ('5', '1', '4', '66'), ('6', '2', '1', '8'), ('8', '2', '3', '68'), ('9', '2', '4', '99'), ('10', '3', '1', '77'), ('11', '3', '2', '66'), ('12', '3', '3', '87'), ('13', '3', '4', '99'), ('14', '4', '1', '79'), ('15', '4', '2', '11'), ('16', '4', '3', '67'), ('17', '4', '4', '100'), ('18', '5', '1', '79'), ('19', '5', '2', '11'), ('20', '5', '3', '67'), ('21', '5', '4', '100'), ('22', '6', '1', '9'), ('23', '6', '2', '100'), ('24', '6', '3', '67'), ('25', '6', '4', '100'), ('26', '7', '1', '9'), ('27', '7', '2', '100'), ('28', '7', '3', '67'), ('29', '7', '4', '88'), ('30', '8', '1', '9'), ('31', '8', '2', '100'), ('32', '8', '3', '67'), ('33', '8', '4', '88'), ('34', '9', '1', '91'), ('35', '9', '2', '88'), ('36', '9', '3', '67'), ('37', '9', '4', '22'), ('38', '10', '1', '90'), ('39', '10', '2', '77'), ('40', '10', '3', '43'), ('41', '10', '4', '87'), ('42', '11', '1', '90'), ('43', '11', '2', '77'), ('44', '11', '3', '43'), ('45', '11', '4', '87'), ('46', '12', '1', '90'), ('47', '12', '2', '77'), ('48', '12', '3', '43'), ('49', '12', '4', '87'), ('52', '13', '3', '87');
COMMIT;

-- ----------------------------
--  Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `gender` char(1) NOT NULL,
  `class_id` int(11) NOT NULL,
  `sname` varchar(32) NOT NULL,
  PRIMARY KEY (`sid`),
  KEY `fk_class` (`class_id`),
  CONSTRAINT `fk_class` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `student`
-- ----------------------------
BEGIN;
INSERT INTO `student` VALUES ('1', '男', '1', '理解'), ('2', '女', '1', '钢蛋'), ('3', '男', '1', '张三'), ('4', '男', '1', '张一'), ('5', '女', '1', '张二'), ('6', '男', '1', '张四'), ('7', '女', '2', '铁锤'), ('8', '男', '2', '李三'), ('9', '男', '2', '李一'), ('10', '女', '2', '李二'), ('11', '男', '2', '李四'), ('12', '女', '3', '如花'), ('13', '男', '3', '刘三'), ('14', '男', '3', '刘一'), ('15', '女', '3', '刘二'), ('16', '男', '3', '刘四');
COMMIT;

-- ----------------------------
--  Table structure for `teacher`
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  `tname` varchar(32) NOT NULL,
  PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `teacher`
-- ----------------------------
BEGIN;
INSERT INTO `teacher` VALUES ('1', '张磊老师'), ('2', '李平老师'), ('3', '刘海燕老师'), ('4', '朱云海老师'), ('5', '李杰老师');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

2.Navicata可视化软件

这款软件基本上不用写SQL语句
Navicat的使用需要下载
它不是免费的,收费的,所以:1. 花钱去买,2. 白嫖,3. 免费试用14天

去官网下载:https://www.navicat.com.cn/products/

1.连接数据库

打开 navicat ,点击 连接 ,选择 数据库
在这里插入图片描述

弹出以下界面 (以MySQL为例),熟悉各部分的作用
在这里插入图片描述
测试是否可以连接,有以下提示,点击确定开始使用数据库
在这里插入图片描述
双击 或 右键 打开连接,图标变亮表示已经打开连接
在这里插入图片描述

2 操作数据库

右键 连接 ,点击 新建数据库

在这里插入图片描述
输入 数据库名 和 编码规则
在这里插入图片描述
双击 或 右键 打开数据库(灰色图标变亮表示打开)
在这里插入图片描述

3.导入备份

打开 数据库 ,右键选择 运行SQL文件 ,备份数据库文件
在这里插入图片描述
选择文件导入
在这里插入图片描述
导入成功如下
在这里插入图片描述
关闭数据库 , 重新打开该数据库 ,可以看到刚刚导入的表 (对比上图,表那一项本来是空的,左边没有箭头)
在这里插入图片描述

4.查询数据

直接 鼠标点击 相应的表查询数据。
用 sql语句 查询。

双击或右键打开 表 ,可以查看数据
在这里插入图片描述
(以下是演示用sql语句查询)
点击 ① 或者 ② ,再点击 新建查询
在这里插入图片描述
输入 sql语句
在这里插入图片描述

5.修改用户信息

登录 mysql ,选择需要修改用户信息的 数据库
在这里插入图片描述
点击上方的 用户
在这里插入图片描述
选择需要修改的 用户名 ,再点击上方 编辑用户
在这里插入图片描述
出现以下界面,修改你需要 修改的信息 ,再点击 保存
在这里插入图片描述

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

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

相关文章

01. 板载硬件资源和开发环境

一、板载硬件资源 STM32F4VGT6-DISCOVERY硬件资源如下&#xff1a; (1). STM32F407VGT6微控制器有1M的FLASH存储器&#xff0c;192K的RAM&#xff0c;LQFP100封装 (2). 板上的ST-LINK_V2可以使用选择的方式把套件切换成一个独立的ST-LINK/V2来 使用&#xff08;可以使用SWD…

UML中类之间的六种主要关系

UML中类之间的六种主要关系: 继承&#xff08;泛化&#xff09;&#xff08;Inheritance、Generalization&#xff09;, 实现&#xff08;Realization&#xff09;&#xff0c;关联&#xff08;Association)&#xff0c;聚合&#xff08;Aggregation&#xff09;&#xff0c;组…

Java架构师内功嵌入式技术

目录 1 导学2 嵌入式微处理体系结构3 微处理器分类4 多核处理器5 嵌入式软件6 嵌入式系统6.1 系统组成7 嵌入式实时操作系统8 嵌入式软件设计9 软件开发工具想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导学 嵌入式技术对软件架构的作用主要体现在以下几个方面: …

搜索二叉树实现(非递归版本)

目录 一&#xff0c;搜索二叉树是个啥&#xff1f; 二&#xff0c;搜索二叉树的实现 1.前期工作 2.方法实现 1.插入 2&#xff0c;查找 3.删除 三&#xff0c;实现二叉搜索树的全部代码 一&#xff0c;搜索二叉树是个啥&#xff1f; 话不多所&#xff0c;先给各位来一个…

查看linux下dns信息并修改

cat /etc/resolv.conf 查看dns 常用dns nameserver 114.114.114.114 nameserver 100.125.0.250 nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 192.168.122.1 nameserver 100.125.1.250 nameserver 100.125.1.251 nameserver 223.5.5.5 可以用vi 修改&#xff0c;修改后 …

【云原生】portainer管理多个独立docker服务器

目录 一、portainer简介 二、安装Portainer 1.1 内网环境下&#xff1a; 1.1.1 方式1&#xff1a;命令行运行 1.1.2 方式2&#xff1a;通过compose-file来启动 2.1 配置本地主机&#xff08;node-1&#xff09; 3.1 配置其他主机&#xff08;被node-1管理的节点服务器&…

spring常见问题汇总

1. 什么是spring? Spring是一个轻量级Java开发框架&#xff0c;最早有Rod Johnson创建&#xff0c;目的是为了解决企业级应用开发的业务 逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack&#xff08;一站式&#xff09;轻量级开源框架&#xff0c; 为开…

【LeetCode刷题日志】189.轮转数组

目录 1.题目描述 2.解题思路代码实现 方法一&#xff1a;使用额外的数组 解题思路&#xff1a; 代码实现&#xff1a; 方法二&#xff1a;环状替换 解题思路&#xff1a; 代码实现&#xff1a; 方法三&#xff1a;数组翻转 解题思路&#xff1a; 代码实现&#xff1a…

跨平台开发技术

目录 1.Qt1.简介2.优势3.劣势 2.NET CoreVue1.简介2.优点 3.Flutter1.简介2.优点3.缺点 4.Maui1.简介2.优点3.缺点 5.Avalonia1.简介2.优点3.缺点 6. Cordova1.简介2.优点3.缺点 7.Electron1.简介2.优点3.缺点 个人搜集资料并总结了一些跨平台开发技术&#xff0c;如有不足欢迎…

实战!RPA厂商选型分享

企业发展&#xff0c;必先科技先行&#xff0c;通过科技来提升内部运营、业务效率&#xff0c;从而达到降本、提质、增效的目标。但无论在技术选型亦或者厂商选择&#xff0c;都需要漫长的对比和调研&#xff0c;方能选择适合自身企业发展解决问题的技术和长期合作的技术伙伴。…

MathType7 公式编辑器嵌入Word\WPS,MathType 公式编辑常用小技巧

目录 1 MathType-7 下载 2 安装 4 嵌入word 5 嵌入wps 6 Mathtype 常用小技巧 6.1 四种插入公式的区别 &#xff1a; 6.2 MathType 常用快捷键 6.3 MathType转换公式 6.4 MathType公式编号 6.5 改变公式编号 6.6 mathtype 公式格式转换为latex格式 背景&#xff1a; w…

如何保卫您的网站:解决DDoS攻击与CC攻击

在当今数字化时代&#xff0c;网站安全是至关重要的。网络攻击如DDoS&#xff08;分布式拒绝服务&#xff09;和CC&#xff08;恶意请求洪水&#xff09;攻击可能会导致网站不稳定甚至不可用。本文将详细分析DDoS攻击和CC攻击的差异&#xff0c;以及如何使用CDN&#xff08;内容…

【C++】priority_queue仿函数

今天我们来学习C中另一个容器适配器&#xff1a;优先级队列——priority_queue&#xff1b;和C一个重要组件仿函数&#xff1a; 目录 一、priority_queue 1.1 priority_queue是什么 1.2 priority_queue的接口 1.2.1 priority_queue使用举例 二、仿函数 三、关于priority…

Linux C语言开发-D7D8运算符

算术运算符&#xff1a;-*/%&#xff0c;浮点数可以参与除法运算&#xff0c;但不能参与取余运算 a%b&#xff1a;表示取模或取余 关系运算符&#xff1a;<,>,>,<,,! 逻辑运算符:!,&&,|| &&,||逻辑运算符是从左到右&#xff0c;依次运算&#…

freeRTOS内部机制——栈的作用

上图中*pa 和*pb分别为R0&#xff0c;R1&#xff0c;调用C函数时&#xff0c;第一个参数保存在R0中第二个参数保存在R1中。这是约定。 指令保存在哪里&#xff1f; 指令保存在flash上面 LR等于什么? LR是返回地址&#xff0c;函数执行完了过后LR等于下一条指令的地址 运行…

JDK8新特性:Stream流

目录 1.获取Stream流 2.Stream流常见的中间方法 3.Stream流常见的终结方法 1、 Stream 是什么&#xff1f;有什么作用&#xff1f;结合了什么技术&#xff1f; ●也叫 Stream 流&#xff0c;是Jdk8开始新增的一套 API ( java . util . stream .*)&#xff0c;可以用于操作集…

【JAVA学习笔记】38 - 单例设计模式-静态方法和属性的经典使用

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/final_ 一、什么是设计模式 1.静态方法和属性的经典使用 2.设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式。设计模式就像是…

【完美世界】被骂国漫之耻,石昊人设战力全崩,现在真成恋爱世界了

【侵权联系删除】【文/郑尔巴金】 深度爆料&#xff0c;《完美世界》动漫第135集预告片已经更新了&#xff0c;但是网友们对此却是一脸槽点。从预告中可以看出&#xff0c;石昊在和战王战天歌的大战中被打成重伤&#xff0c;最后云曦也被战天歌抓住。在云曦面临生死危机的时候…

AIGC底层数据探索——高质量数据助力大模型迭代升级

// 编者按&#xff1a;近年来&#xff0c;大模型的概念逐渐受到更广泛的关注&#xff0c;而谈及大模型就离不开对底层数据的探索。 大模型训练数据痛点与中文数据集现状&#xff1b;高质量数据定义&#xff1b;对话式数据模型实验&#xff1b;晴数智慧高质量数据解决方案。 文…

信号补零对信号频谱的影响

文章目录 前言一、 什么是补零二、案例三、补零前仿真及分析1、补零前 MATLAB 源码2、仿真及结果分析①、 x n x_n xn​ 时域图②、 x n x_n xn​ 频谱图 四、补零后仿真及分析1、补6000个零且1000采样点①、 MATLAB 源码②、仿真及结果分析 2、波形分辨率3、补6000个零且7000采…