MySQL | 数据库的表的增删改查【进阶】【万字详解】(一)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: MySQL | 数据库的表的增删改查【进阶】【万字详解】(一)

前言:

  • 在前面我们已经学了数据库的增删查改(初阶),还没有学习的同学可以点击上面的连接进行跳转学习~~
  • 本章就来学习数据库的进阶,让我们来一起走进吧~~

本节目标:

  • 数据库约束
  • 表的关系
  • 删除
  • 修改
  • 查询

数据库约束

  • 约束,就是数据库针对里面的数据能写啥,给出的一组"检验规则"
  • 这样的约束,可以是程序猿人工来保证的,也可以是程序自动保证的
  • 约束,就是为了提高效率,提高准确性,让数据库这个软件集成一个针对数据效验的功能

约束类型

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • DEFAULT - 规定没有给列赋值时的默认值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。

NULL约束

创建表时,可以指定某列不为空:

  • 在没有约束的时候,此时表中可以插入空值!!!
create table student(id int,name varchar(20));
insert into student values(null,null);


  • 这里我们重新创建一个表,设置成不能为空
create table student (id int not null, name varchar(20) not null);
  • 非空约束也就生效了~~

UNIQUE:唯一约束

  • 插入/修改数据的时候,会先查询,先看看数据是否已经存在,如果不存在,就能插入/修改成功,如果存在,则插入/修改失败!
  • 可以看到数据已经插入了一次,就不能插入了
create table student (id int unique, name varchar(20));

DEFAULT:默认值

  • 这里插入数据不指定name就会默认NULL
insert into student (id) values(2);

  • 这里设置了默认值为无名氏,再次插入不指定默认列
create table student (id int,name varchar(20) default '无名氏');

PRIMARY KEY:主键

  • 主键,一条记录,在表中的身份标识
  • 也是要求唯一的,并且不能为空~~
  • 主键 = unique + not null
  • mysql要求一个表中只能有一个主键
  • 创建主键的时候,可以使用一个列作为主键,也可以使用多个列作为主键(复合主键),这个很少见
create table student (id int primary key, name varchar(20));

  • 当我插入一次数据后,再次插入,就不能了,看起来就是和not null + unique是类似的~~
insert into student values (1,'张三');

一个重要的问题:

  • 如何给这个记录安排一个主键呢?
  • mysql自身只是能够检查是否重复,设置的时候还是靠程序猿来设置~~
  • 在这里,mysql提供了一个简单粗暴的办法,自增主键
create table student (id int primary key auto_increment, name varchar(20));

自增主键插入数据的时候,可以手动指定一个值,也可以让mysql自己分配,如果让他自己分配,就在insert语句的时候,把id设为null即可

  • 这里还可以手动分配
insert into student values(100,'赵六');

  • 那么这里继续让mysql自己指定
insert into student values (null,'七七');

  • 那么我再次指定·插入,再让mysq自己指定,那会是怎么样的呢?

  • 可以看到,这里mysql还是继续默认浪费了~~
  • 那么这里空间有浪费了吗?
  • 这里分配的时候把这些序号跳过了,浪费了一部分序号,没有浪费空间

FOREIGN KEY:外键

  • 两张表之间相互关联
create table class(class_id int primary key auto_increment, class_name varchar(20));
create table student(student_id int primary key auto_increment, name varchar(20),class_id int, foreign key (class_id) references class(class_id));
  • 此时就要求student表中的每个记录的class_id得在class表的class_id中存在!

  • 这个时候插入数据就会失败

  • 这里写的是不能新增或者修改子
  • 这里我们插入点班级数据
insert into class values(null,'cls1');
insert into class values(null,'cls2');
insert into class values(null,'cls3');

  • 再次插入数据,就成功了
insert into student values(null,'张三',1);

  • 换句话说student表插入数据的时候,mysql先会做一件事,会拿着这个记录的class_id去class表中看看有没有~~
  • 不仅是插入,修改也会有约束
update student set class_id = 10 where student_id = 1;

  • 那我们尝试把班级表中的class_id为1的记录给删了,会不会报错呢?
  • 可以看到是不能删除的~~

CHECK

这个对于mysql5是不支持的,所以这里就先不讲了~~

表的设计

  • 设计表要求有一定的经验,才能理解~~
  • 设计表,分两步走
  • 梳理清楚需求中的"实体"
  • 梳理清楚实体之间的关系,按照关系,带入到既定的公式中
  • 很多时候,每个实体就需要对应一张表来进行表示~~

实体之间的关系。主要有三种(严格来说是四种)

一对一

  • 一个学生,只能有一个账号
  • 一个账号,只能供一个学生所有

一对多

  • 一个班级可以包含多个学生
  • 一个学生只能处于一个班级

多对多

  • 一个学生可以选择多个课程
  • 一个课程也可以提供多个学生

  • 一般来说只要实体和关系明确了,此时表的设计就差不多了~~
  • 如果实体比较多,关系比较复杂,可以画一个实体关系图【ER图】来表示这个关系~~

MySQL | 数据库的表的增删改查【进阶】【万字详解】(二):https://developer.aliyun.com/article/1426797

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
关系型数据库 MySQL 分布式数据库
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
46 2
|
8天前
|
SQL 存储 关系型数据库
数据库开发之mysql前言以及详细解析
数据库开发之mysql前言以及详细解析
17 0
|
1天前
|
API 数据库 Python
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
|
2天前
|
关系型数据库 MySQL 数据库
【MySQL探索之旅】数据库的基本操作
【MySQL探索之旅】数据库的基本操作
|
6天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL与NoSQL的主要区别在于数据结构、查询语言和可扩展性。MySQL是关系型数据库,依赖预定义的数据表结构,使用SQL进行复杂查询,适合垂直扩展。而NoSQL提供灵活的存储方式(如JSON、哈希表),无统一查询语言,支持横向扩展,适用于处理大规模、非结构化数据和高并发场景。选择哪种取决于应用需求、数据模型及扩展策略。
17 0
|
13天前
|
SQL 关系型数据库 MySQL
MySQL环境搭建——“MySQL数据库”
MySQL环境搭建——“MySQL数据库”
|
13天前
|
SQL NoSQL 关系型数据库
初识MySQL数据库——“MySQL数据库”
初识MySQL数据库——“MySQL数据库”
|
15天前
|
安全 数据库连接 数据库
Flask数据库操作实战:增删改查一网打尽
【4月更文挑战第15天】本文介绍了在Flask中进行数据库操作的方法,包括选择数据库扩展(如Flask-SQLAlchemy)、配置数据库、定义模型以及执行CRUD操作。通过Flask-SQLAlchemy的ORM功能,开发者可以方便地管理数据库表和记录。文章详细展示了如何创建模型、添加、查询、更新和删除数据,并提到了高级查询和关系映射。此外,还提及了数据库迁移工具Flask-Migrate以及性能优化和安全性问题。了解这些基础,有助于开发者构建高效、安全的Flask Web应用。
|
7天前
|
SQL 存储 关系型数据库
MySQL Cluster集群安装及使用
MySQL Cluster集群安装及使用
|
11天前
|
关系型数据库 MySQL 数据库
《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
36 4