欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 【MySQL】MySQL表的增删改查(进阶)

【MySQL】MySQL表的增删改查(进阶)

2025/2/21 22:19:23 来源:https://blog.csdn.net/Easonmax/article/details/145712576  浏览:    关键词:【MySQL】MySQL表的增删改查(进阶)

1.❤️❤️前言~🥳🎉🎉🎉

Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。

如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的内容感兴趣,记得关注我👀👀以便不错过每一篇精彩。

当然,如果在阅读中发现任何问题或疑问,我非常欢迎你在评论区留言指正🗨️🗨️。让我们共同努力,一起进步!

加油,一起CHIN UP!💪💪

🔗个人主页:E绵绵的博客
📚所属专栏:

1. JAVA知识点专栏

        深入探索JAVA的核心概念与技术细节

2.JAVA题目练习

        实战演练,巩固JAVA编程技能

3.c语言知识点专栏

        揭示c语言的底层逻辑与高级特性

4.c语言题目练习

        挑战自我,提升c语言编程能力

5.Mysql数据库专栏

        了解Mysql知识点,提升数据库管理能力

6.html5知识点专栏

        学习前端知识,更好的运用它

7. css3知识点专栏

        在学习html5的基础上更加熟练运用前端

8.JavaScript专栏

        在学习html5和css3的基础上使我们的前端使用更高级

📘 持续更新中,敬请期待❤️❤️

2. 数据库约束

在MySQL中,约束用于定义表中数据的规则,保证数据的一致性、完整性和准确性。以下是常见的数据库约束类型:

NULL约束
  • NOT NULL:指示某列不能存储NULL值。例如,创建一个表时,可以规定某列必须输入数据。

    CREATE TABLE student (id INT NOT NULL,name VARCHAR(20) NOT NULL
    );
    
UNIQUE:唯一约束
  • UNIQUE:确保某列的每行数据唯一,避免重复。适用于需要保证唯一性的字段,如学号、身份证号等。

    CREATE TABLE student (id INT NOT NULL,sn INT UNIQUE,name VARCHAR(20),qq_mail VARCHAR(20)
    );
    
DEFAULT:默认值约束
  • DEFAULT:用于为列定义一个默认值,当插入数据时没有指定该列值时,使用默认值。

    CREATE TABLE student (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20) DEFAULT 'Unknown'
    );
    
 PRIMARY KEY:主键约束
  • PRIMARY KEY:确保某列或多列数据唯一,并且不能为空。通常用于唯一标识每行记录。

 表里最多只能有一个主键。 

对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时(赋值null时),从1开始,使用最大值+1(如果中间我们手动赋值后,再插入数据时,系统会使用最大值+1)

CREATE TABLE student (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20)
);
 FOREIGN KEY:外键约束
  • FOREIGN KEY:保证一个表中的数据与另一个表的数据相匹配,确保表与表之间的参照完整性。

CREATE TABLE classes (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20),description VARCHAR(100)
);CREATE TABLE student (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20),classes_id INT,FOREIGN KEY (classes_id) REFERENCES classes(id)
);

当赋值外键后,table student表中的classes_id为子键,classes表中的id为父键

从而导致classes_ID 内部的值要出自 id内部,如果出现不属于id内的值就会报错。(因为有约束,导致不能随意修改父键与子键)

对于父键必须要被unique或primary key 修饰

 CHECK约束
  • CHECK:用于限制列的值,确保数据符合给定的条件。对于MySQL,它的使用并不会真正执行检查,只是语法上的支持。

    CREATE TABLE test_user (id INT,sex VARCHAR(1),CHECK (sex = 'M' OR sex = 'F')
    );
    

这个用的少,知道就行了,很少去使用。 


3. 表的设计

在数据库设计中,表之间的关系是至关重要的。MySQL支持一对一、一对多和多对多的关系。

 一对一

每个记录只对应另一个表中的一条记录。

 一对多

一种常见的表关系,在这种关系中,父表的每一条记录可以与子表中的多条记录相关联。

 多对多

多对多关系通常需要一个中间表来映射两张表的关系。


4. 插入和查询搭配(进阶)

在MySQL中,通过INSERT语句插入数据是常见的操作,插入数据时可以使用SELECT来插入其他表的内容。

INSERT INTO 目标表名 (列名1, 列名2, ...)
SELECT 列名1, 列名2, ...
FROM 源表

案例:创建一张用户表,设计有name姓名、email邮箱、sex性别、mobile手机号字段。需要把已有的 学生数据复制进来,可以复制的字段为name、qq_mail

-- 创建用户表
DROP TABLE IF EXISTS test_user;
CREATE TABLE test_user (id INT primary key auto_increment,name VARCHAR(20) comment '姓名',age INT comment '年龄',email VARCHAR(20) comment '邮箱',sex varchar(1) comment '性别',mobile varchar(20) comment '手机号'
);
-- 将学生表中的所有数据复制到用户表
insert into test_user(name, email) select name, qq_mail from student;

5. 查询

5.1 聚合查询 

MySQL支持多种聚合函数,如COUNTSUMAVGMAXMIN等,用于执行数据汇总操作。

  • 示例

    SELECT COUNT(*) FROM student;
    SELECT AVG(age) FROM student;
    

5.2 GROUP BY 子句

GROUP BY用于将结果集按指定列进行分组,并且可以与聚合函数一起使用。

​
SELECT 列名1, 聚合函数(列名)
FROM 表名
WHERE 条件
GROUP BY 列名1;​
  • 列名1 是用来分组的列。GROUP BY将结果按照这些列的值进行分组。
  • 聚合函数(列名):用于执行分组后的聚合计算(如COUNT()SUM()AVG()等)。
  • WHERE:过滤数据,通常在GROUP BY之前使用,来限制参与分组的数据。
  • GROUP BY:将数据按指定列进行分组。

注意select 指定的列必须是“分组依据列” (指定列中相同的行为一组),其他列若想出现在select 中则必须包含在聚合函数中,否则会出现错误

(假如一组中有3行,该组内部都为不同的值,那该组的列展示出来的就是其中的一个值,下次可能会出现其他两个值,所以会有错误)

5.3 HAVING

HAVING用于在分组查询后对结果进行过滤。它与WHERE不同,WHERE用于对原始数据进行筛选,而HAVING用于对分组后的结果进行筛选。

where一般用在group by 前面 ,having用在group by 后面


SELECT department, AVG(salary) AS average_salary
FROM employees
WHERE salary > 3000  -- 使用WHERE先筛选薪水大于3000的员工
GROUP BY department  -- 按部门分组
HAVING AVG(salary) > 5000;  -- 使用HAVING过滤平均薪水大于5000的部门

6. 联合查询

联合查询:把多个表的记录 一起合并,一起进行查询。联合查询又称 多表查询

由于两个表的所有组合可能都有,所以我们要用where或者其他关键词进行限制 


6.1 内连接(INNER JOIN)

INNER JOIN用于返回两个表中匹配的记录。

SELECT 列1, 列2, ...
FROM 表1
INNER JOIN 表2 ON 表1.列名 = 表2.列名;

还有另一种形式

​
SELECT 列1, 列2, ...
FROM 表1,表2 where 表1.列名 = 表2.列名;​


6.2 左连接(LEFT JOIN)

左连接(也叫左外连接)返回左表中的所有记录,以及右表中匹配的记录。如果右表中没有匹配的记录,结果中的右表字段将为NULL

SELECT 列1, 列2, ...
FROM 表1
LEFT JOIN 表2 ON 表1.列名 = 表2.列名;

6.3 右连接(RIGHT JOIN)

右连接(也叫右外连接)与左连接类似,不同之处在于它返回右表中的所有记录,以及左表中匹配的记录。如果左表中没有匹配的记录,结果中的左表字段将为NULL。 

SELECT 列1, 列2, ...
FROM 表1
RIGHT JOIN 表2 ON 表1.列名 = 表2.列名;


6.4 自连接(Self JOIN)

自连接是将同一张表与自己进行连接,常用于查找表中相同数据之间的关系。

​
SELECT ........
FROM student as A, student as B
WHERE ........ ;​


6.5 子查询

子查询是指将一个查询语句嵌套在另一个查询语句中,常用于处理复杂的查询需求。

 如果内部的查询语句只查询到了一行,那么用 =

SELECT * FROM student WHERE classes_id = (SELECT id FROM classes WHERE name = '计算机系');

  如果内部的查询语句查询到了多行,那么用 in 关键字

​
SELECT * FROM student WHERE classes_id  in (SELECT id FROM classes WHERE name = '计算机系');​

6.6 合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符union, union all。

-- UNION:去除重复数据 
select ... from ... where 条件 union select ... from ... where 条件-- UNION ALL:不去重select ... from ... where 条件 union all select ... from ... where 条件  

使用UNION和UNION ALL时,前后查询的列要求 数量和类型一致 这样才能上下合并一块。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词