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
复制代码
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()返回查询数据集中的最小值(非数值类型无统计意义)
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 其他条件;
示例:
- 查询全部同学的总成绩及同学的个人信息
- 查询全部同学的成绩,及同学的个人信息:
4.2.2 外毗连
外毗连分为左外毗连和右外毗连。如果团结查询,左侧的表完全体现我们就说是左外毗连;右侧的表完全体现我们就说是右外毗连。
若两张表完全重合,内外毗连一个意思
若两张表只有一部分重合,外毗连就是交集
4.2.3 自毗连
自毗连是指在同一张表毗连自身举行查询(自己和自己举行笛卡尔积)。
- 体现全部“计算机原理“成绩比”]ava”成绩高的成绩信息
4.2.4 子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
- 查询与“不想结业” 同学的同班同学:
- 查询“语文”或“英文”课程的成绩信息
4.2.5 合并查询
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |