千千梦丶琪 发表于 2025-4-1 06:39:06

数据库的增删查改(进阶)

1. 数据库的束缚

   束缚就是检查数据的合法性
1.1 not null

not null ,指列不能储存空值`在这里插入代码片`
https://i-blog.csdnimg.cn/direct/1e0532280b154fc18301928026ed2d0f.png
1.2 unique

//每次插入修改前,都进行查询,若已经存在,则失败
unique   , 指这一列所有行数据唯一(不可重复)
https://i-blog.csdnimg.cn/direct/ebb84a1f2ac84acb8cfa6677ffc84ecd.png
1.3 default

default ,规定没有给列赋值时的默认值(默认的默认值是null)
https://i-blog.csdnimg.cn/direct/9404b2ef3e74478ca012bbc6e0cb3914.png
1.4 primary key

primary key ,主键,一条记录的身份标识,not null + unique

//主键只能有一个,但是一个主键不一定只针对一个列
//对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1。
//一般使用整数 id
https://i-blog.csdnimg.cn/direct/03b2dbecf32c4e6598758d37369eb76b.png


[*]auto_increment
https://i-blog.csdnimg.cn/direct/d5a36f53ceeb4e9eb8172f7c978c6220.png
1.5 foreign key

foreign key ,外键涉及到两个表之间的关系
https://i-blog.csdnimg.cn/direct/f5a344c76386439581f6c39add7bbfc4.png


[*]若要删除表,要先删除子表,才气删除父表
[*]父表与子表之间相互束缚
[*]子表引用的父表的那一列要么是unique、要么是primary key
1.6 check

check,指定条件,插入/修改数据,数据符合才插入/修改成功

//通过check指定一个条件(gender = '男' or gender = '女')
2. 表的设计通用步调及关系示例

表设计通用步调:

[*]辨认核心实体(如用户、商品、订单等)
[*]定义实体属性(如用户表需存储姓名、年事、手机号等)
[*]确定主键(唯一标识每条纪录的字段,如 user_id)
[*]分析实体关系(通过关系模型毗连不同表)
2.1 一对一关系

典型场景:一个实体严酷对应另一个实体
示例:用户表(user) ↔ 用户详情表(user_profile)
-- 用户表(基础信息)
CREATE TABLE user (
user_id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
phone VARCHAR(20) UNIQUE
);

-- 用户详情表(扩展信息)
CREATE TABLE user_profile (
profile_id INT PRIMARY KEY,
address VARCHAR(100),
emergency_contact VARCHAR(20),
-- 外键指向user表
FOREIGN KEY (profile_id) REFERENCES user(user_id)
);
特点:


[*]通过 user_id 直接关联
[*]适合拆分敏感字段或大字段(如个人详细地址)
2.2 一对多关系

典型场景:一个实体关联多个子实体
示例:部门表(department) ↔ 员工表(employee)
-- 部门表
CREATE TABLE department (
dept_id INT PRIMARY KEY AUTO_INCREMENT,
dept_name VARCHAR(50) NOT NULL
);

-- 员工表(多端)
CREATE TABLE employee (
emp_id INT PRIMARY KEY AUTO_INCREMENT,
emp_name VARCHAR(50) NOT NULL,
-- 外键指向部门表
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES department(dept_id)
);
特点:


[*]在“多端”表(employee)中存储外键(dept_id)
[*]常见于层级布局(如电商中的分类 ↔ 商品)
2.3 多对多关系

典型场景:两个实体互相拥有多个关联
示例:弟子表(student) ↔ 课程表(course) ↔ 关联表(student_course)
-- 学生表
CREATE TABLE student (
stu_id INT PRIMARY KEY AUTO_INCREMENT,
stu_name VARCHAR(50) NOT NULL
);

-- 课程表
CREATE TABLE course (
course_id INT PRIMARY KEY AUTO_INCREMENT,
course_name VARCHAR(50) NOT NULL
);

-- 关联表(中间表)
CREATE TABLE student_course (
stu_id INT,
course_id INT,
-- 联合主键 + 外键约束
PRIMARY KEY (stu_id, course_id),
FOREIGN KEY (stu_id) REFERENCES student(stu_id),
FOREIGN KEY (course_id) REFERENCES course(course_id)
);
特点:


[*]必须通过中间表(student_course)维护关系
[*]常见于标签系统(如博客 ↔ 标签)或订单商品关系
关系对比速查表
关系类型示例场景表数目外键位置典型SQL操作一对一用户-身份证2主表的主键作为外键JOIN ... ON a.id = b.id一对多部门-员工2在“多端”表中存储外键WHERE dept_id = ?多对多弟子-课程3中间表存储两边外键GROUP BY ... HAVING COUNT 3. 新增



[*]将查询的第一个结果插入到第二个表中
https://i-blog.csdnimg.cn/direct/46900d543f334c988ac468239f86ed7d.png
4. 查询

4.1 聚合查询

4.1.1 聚合函数

函数说明COUNT()返回查询到的数据纪录数目SUM()返回查询数据的数值总和(非数值类型无统计意义)AVG()返回查询数据的算术平均值(非数值类型无统计意义)MAX()返回查询数据集中的最大值(非数值类型无统计意义)MIN()返回查询数据集中的最小值(非数值类型无统计意义)

[*]count()…https://i-blog.csdnimg.cn/direct/063315ef495348019365cef5b90462c2.png
4.1.2 GROUP BY子句

MySQL 未指定排序时,按数据物理存储顺序或索引顺序读取第一条纪录
https://i-blog.csdnimg.cn/direct/15f4017a6fbe4440a23698dbf8a81335.png
4.1.3 having

GROUP BY 子句举行分组以后,需要对分组结果再举行条件过滤时,不能利用 WHERE 语句,而需要用HAVING


[*]体现人数少于一人的
https://i-blog.csdnimg.cn/direct/9e7eb99f8b654d7e9ca68dce91c8bf52.png
4.2 团结查询

实际开发中往往数据来自不同的表,所以需要多表团结查询。多表查询是对多张表的数据取笛卡尔积:
   笛卡尔积,就是两个表的纪录,分列组合


[*]笛卡尔的列数,两个表的列数和
[*]笛卡尔的行数,两个表的行数积
团结查询:就是把表的数据变多,再变少
create table classes
        (
                id int primary key auto_increment,
                name varchar(20) default'unkown',
                `desc` varchar(20)
        );
create table student
        (
                id int primary key auto_increment,
                sn int unique,
                name varchar(20) default'unkown',
                qq_mail varchar(20),
                classes_id int,
                foreign key (classes_id) references classes(id)
        );
create table course
        (
                id int primary key auto_increment,
                name varchar(20)
        );
create table score
        (
                id int primary key auto_increment,
                score decimal(3,1),
                student_id int,
                course_id int,
                foreign key(student_id) references student(id),
                foreign key (course_id) references course(id)
        );
创建的四张表:
https://i-blog.csdnimg.cn/direct/062cbaf0ceee47769172d1cafd6d3e23.png
4.2.1 内毗连

   四步走:


[*]举行笛卡尔积
select * from 表1,表2;
[*]添加毗连信息,去除无用信息
select * from 表1,表2 where 毗连条件;
[*]添加其他条件,举行信息筛选
select * from 表1,表2 where 毗连条件 and 其他条件;
[*]精简列,去除无用列
select 字段 from 表1,表2 where 毗连条件 and 其他条件;
示例:

[*]查询 “许仙”的成绩
https://i-blog.csdnimg.cn/direct/ebb844af7672428aaaca566b3a633fa2.png
https://i-blog.csdnimg.cn/direct/0c5a5a06fd924845a676dadd645daed2.png
https://i-blog.csdnimg.cn/direct/baed75b494894ae890d2800f08fbeedb.png
https://i-blog.csdnimg.cn/direct/2a4c9ede679246d6b2e5a12486457007.png
https://i-blog.csdnimg.cn/direct/dec55c7eeda04abda7af5d83e43aca19.png


[*]法二:利用 join…on…
https://i-blog.csdnimg.cn/direct/dff1ad2980c34bec87b36c965fc52745.jpeg

[*]查询全部同学的总成绩及同学的个人信息
https://i-blog.csdnimg.cn/direct/71c39c7d89c044028b23f004898f6f9f.jpeg
[*]查询全部同学的成绩,及同学的个人信息:https://i-blog.csdnimg.cn/direct/ad10ed6336b640dbb90bf41414d19797.jpeg
4.2.2 外毗连

外毗连分为左外毗连和右外毗连。如果团结查询,左侧的表完全体现我们就说是左外毗连;右侧的表完全体现我们就说是右外毗连。
https://i-blog.csdnimg.cn/direct/c969dca3cb4248e0bb945dba2a8e3106.png
   若两张表完全重合,内外毗连一个意思
若两张表只有一部分重合,外毗连就是交集
https://i-blog.csdnimg.cn/direct/2a61c4407bd14cf0a1755ee422606365.png
4.2.3 自毗连

   自毗连是指在同一张表毗连自身举行查询(自己和自己举行笛卡尔积)。


[*]体现全部“计算机原理“成绩比”]ava”成绩高的成绩信息
https://i-blog.csdnimg.cn/direct/8922c819e962498b9fdcb763976078f7.jpeg
4.2.4 子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询


[*]查询与“不想结业” 同学的同班同学:
https://i-blog.csdnimg.cn/direct/928f7ee5ec2a4c6d86bac946184ff203.png
[*]查询“语文”或“英文”课程的成绩信息
https://i-blog.csdnimg.cn/direct/42620c4744124fa3bca249122bb2e023.png
4.2.5 合并查询



[*]查询id小于3,或者名字为“英文”的课程:
https://i-blog.csdnimg.cn/direct/9db6835e1fff4f8baeb66c7709d593e8.png


[*]查询id小于3,或者名字为“Java”的课程
https://i-blog.csdnimg.cn/direct/d696b3825534445293848a5868ecb28f.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 数据库的增删查改(进阶)