IT评测·应用市场-qidao123.com技术社区
标题:
数据库的增删查改(进阶)
[打印本页]
作者:
千千梦丶琪
时间:
2025-4-1 06:39
标题:
数据库的增删查改(进阶)
1. 数据库的束缚
束缚就是检查数据的合法性
1.1 not null
not null ,指列不能储存空值`在这里插入代码片`
复制代码
1.2 unique
//每次插入修改前,都进行查询,若已经存在,则失败
unique , 指这一列所有行数据唯一(不可重复)
复制代码
1.3 default
default ,规定没有给列赋值时的默认值(默认的默认值是null)
复制代码
1.4 primary key
primary key ,主键,一条记录的身份标识,not null + unique
//主键只能有一个,但是一个主键不一定只针对一个列
//对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1。
//一般使用整数 id
复制代码
auto_increment
1.5 foreign key
foreign key ,外键涉及到两个表之间的关系
复制代码
若要删除表,要先删除子表,才气删除父表
父表与子表之间相互束缚
子表引用的父表的那一列要么是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. 新增
将查询的第一个结果插入到第二个表中
4. 查询
4.1 聚合查询
4.1.1 聚合函数
函数说明COUNT()返回查询到的数据纪录数目SUM()返回查询数据的数值总和(非数值类型无统计意义)AVG()返回查询数据的算术平均值(非数值类型无统计意义)MAX()返回查询数据集中的最大值(非数值类型无统计意义)MIN()返回查询数据集中的最小值(非数值类型无统计意义)
count()…
4.1.2 GROUP BY子句
MySQL 未指定排序时,按数据物理存储顺序或索引顺序读取第一条纪录
4.1.3 having
GROUP BY 子句举行分组以后,需要对分组结果再举行条件过滤时,不能利用 WHERE 语句,而需要用HAVING
体现人数少于一人的
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)
);
复制代码
创建的四张表:
4.2.1 内毗连
四步走:
举行笛卡尔积
select * from 表1,表2;
添加毗连信息,去除无用信息
select * from 表1,表2 where 毗连条件;
添加其他条件,举行信息筛选
select * from 表1,表2 where 毗连条件 and 其他条件;
精简列,去除无用列
select 字段 from 表1,表2 where 毗连条件 and 其他条件;
示例:
查询 “许仙”的成绩
法二:利用 join…on…
查询全部同学的总成绩及同学的个人信息
查询全部同学的成绩,及同学的个人信息:
4.2.2 外毗连
外毗连分为左外毗连和右外毗连。如果团结查询,左侧的表完全体现我们就说是左外毗连;右侧的表完全体现我们就说是右外毗连。
若两张表完全重合,内外毗连一个意思
若两张表只有一部分重合,外毗连就是交集
4.2.3 自毗连
自毗连是指在同一张表毗连自身举行查询(自己和自己举行笛卡尔积)。
体现全部“计算机原理“成绩比”]ava”成绩高的成绩信息
4.2.4 子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
查询与“不想结业” 同学的同班同学:
查询“语文”或“英文”课程的成绩信息
4.2.5 合并查询
查询id小于3,或者名字为“英文”的课程:
查询id小于3,或者名字为“Java”的课程
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4