MYSQL-约束

embedded/2025/1/11 11:06:28/

1-limit语句

limit的作用是限制查询记录的条数

格式如下

select * from 表名 limit  offset, row_count;

举例

select * from table limit  1, 4;

这里的1指的是从第二行数据开始,1就是索引(索引从0开始),4指的是查询记录条数,也就是从第二条(行)开始,一共查询四条记录,到第五条(行)

如果第一个参数是0的话,可以进行简写

eg:SELECT * FROM table LIMIT 0,5;

SELECT * FROM tableLIMIT 5;

2-数据库约束

1-作用

数据库的约束是指在数据库设计中, 为了确保数据的完整性,一致性和有效性而施加的条件。 

2-常见的约束种类

主键约束(Primary Key Constraint):确保表中每一行数据的唯一性,主键列的值不能重复且不能为空。

外键约束(Foreign Key Constraint):用于确保在一个表中引用另一个表的主键时,引用的值必须存在,从而维护表之间的关系。

唯一约束(Unique Constraint):确保某列(或列组合)中的值是唯一的,可以为空,但如果有值则不能重复。

检查约束(Check Constraint):定义一个条件,只有满足该条件的数据才能被插入或更新到表中。

非空约束(Not Null Constraint):确保某列的值不能为空。

默认值约束(default):在没有给某列值的时候,为默认值

3-主键约束

1-主键的作用

用于唯一标识表中每一行数据。

保证每个主键值的唯一性,且不能为null,保证了数据的唯一性。

2-为什么要有主键约束

当某些记录的字段值一样的时候,会无法区分这些数据,导致数据库的记录不唯一,不方便管理数据。

注:每张表都应该有一个主键,但是每一个表也有且只能有一个主键。

3-通常作为主键的字段

通常使用不常用的字段,给每张表单独设计一个id字段,将id作为主键。

4-主键的特点

唯一性:主键值在整个表中必须唯一,确保没有两行数据有相同的主键值。

非空性:主键列不能包含NULL值,确保每一行都有一个有效的标识符。

索引:数据库通常会自动为主键创建索引,以提高查询效率。

表限制:每个表只能有一个主键,但主键可以由多个列组成。

5-创建主键的方式

1-在创建表的时候给字段添加主键

字段名 字段类型 PRIMIARY KEY 

#举例,给idi字段添加一个主键
create table tb(
id int primary key,
name varchar(50),
age int,
gender varchar(2)
)

2-在已有表中添加主键

ALTER TABLE 表名 ADD PRIMARY KEY(字段名);

#举例,给id字段添加一个主键
ALTER TABLE tb ADD PRIMARY KEY(id);

3-注意事项

如果一个字段已经添加了主键,注意:

1:不能插入重复的主键(主键的唯一性)。

2:插入的主键值不能为null(主键为非空)。

4-主键自增

如果让我们自己主动添加主键的时候,当数据很多的时候,很容易出错,于是我们希望当每次插入新的记录的时候,主键的值会实现自动增长。

1-具体操作

在创建表的时候添加在字段后面就可以

字段名 字段类型 PRIMARY KEY AUTO_INCREMENT

AUTO_INCREMENT表示的就是自动增长,注意自增必须是整数类型。

2-delete和truncate的区别

当使用delete删除表中的数据的时候,表中id的主键值并不会进行重置,比如原本的id主键值为4,当我们使用delete删除该表的数据后,然后向表中插入新的数据,会发现插入新的数据的主键值不是从1开始(默认的主键值为1),而是从5开始,

当使用truncate摧毁表的时候,主键的值会重置为1.

5-唯一约束

确保每个值都是唯一的,防止重复数据的录入

允许为空,当多个数据为null的时候,不算重复

在创建表格的时候, 字段名 字段类型 UNIQUE 

举例如下

CREATE TABLE Users (UserID INT PRIMARY KEY,Email VARCHAR(255) UNIQUE,Username VARCHAR(50) UNIQUE,FullName VARCHAR(100)
);

6-非空约束

防止该列的值为空,保证数据的完整性

字段名 字段类型 NOT NULL

举例如下

CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,FirstName VARCHAR(50) NOT NULL,LastName VARCHAR(50) NOT NULL,Email VARCHAR(255) NOT NULL,HireDate DATE NOT NULL
);

还可以将UNIQUE 和 NOT NULL组合起来,唯一并且非空

7-默认值

向表中添加数据的时候,如果不指定字段的数据的时候,就会使用默认值,保证数据的完整性

格式   字段名 字段类型 DEFAULT 默认值

举例如下

CREATE TABLE Products (ProductID INT PRIMARY KEY,ProductName VARCHAR(100) NOT NULL,Price DECIMAL(10, 2) DEFAULT 0.00,CreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP
);

8-表关系和外键约束

表的关系是数据库中不同表之间如何相互关联的方式,主要有三种类型:一对一、一对多和多对多。

主要类型:


1-一对一关系:

每个表中的每条记录仅对应另一个表中的一条记录。例如,一个用户只有一个唯一的地址。

这种关系在开发中并不常用,所以稍作了解就可以了

可以在任意一方的表中添加另外一方的主键作为外键即可。

原理如下


2-一对多关系:

一个表中的一条记录可以对应另一个表中的多条记录。比如,一个客户可以有多个订单

需要在多的一方增加一列,引入一的一方的主键作为自己的外键

具体演示如图所示


3-多对多关系:

两个表中的记录可以互相对应多条记录。这通常通过一个关联表实现,例如学生和课程的关系,学生可以选修多门课程,而每门课程也可以有多个学生。

这个关联表会使用这两个表的主键作为关联表的外键。

举例

#创建主要表格
CREATE TABLE Students (StudentID INT PRIMARY KEY,StudentName VARCHAR(100)
);
CREATE TABLE Courses (CourseID INT PRIMARY KEY,CourseName VARCHAR(100)
);
#创建关联表格
CREATE TABLE Enrollments (StudentID INT,CourseID INT,PRIMARY KEY (StudentID, CourseID),FOREIGN KEY (StudentID) REFERENCES Students(StudentID),FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);
/*这段 SQL 代码用于创建一个名为 Enrollments 的表,具体含义如下:表名:Enrollments,表示学生选课的记录。字段:StudentID INT:定义了一个整型字段,存储学生的唯一标识符。
CourseID INT:定义了一个整型字段,存储课程的唯一标识符。
主键:PRIMARY KEY (StudentID, CourseID):这两个字段组合在一起作为主键,确保每个学生在每门课程上只能有一条记录,避免重复。
外键约束:FOREIGN KEY (StudentID) REFERENCES Students(StudentID):StudentID 字段是一个外键,引用 Students 表中的 StudentID 字段,确保 Enrollments 表中的 StudentID 必须在 Students 表中存在。
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID):CourseID 字段也是一个外键,引用 Courses 表中的 CourseID 字段,确保 Enrollments 表中的 CourseID 必须在 Courses 表中存在。
综上所述,这个表用于管理学生与课程之间的关系,确保数据的一致性和完整性。*/
#插入学生记录
INSERT INTO Students (StudentID, StudentName) VALUES (1, 'Alice');
INSERT INTO Students (StudentID, StudentName) VALUES (2, 'Bob');
#插入课程记录
INSERT INTO Courses (CourseID, CourseName) VALUES (101, 'Mathematics');
INSERT INTO Courses (CourseID, CourseName) VALUES (102, 'History');
#插入选课记录
INSERT INTO Enrollments (StudentID, CourseID) VALUES (1, 101);  -- Alice选修数学
INSERT INTO Enrollments (StudentID, CourseID) VALUES (1, 102);  -- Alice选修历史
INSERT INTO Enrollments (StudentID, CourseID) VALUES (2, 101);  -- Bob选修数学

再引入一张图片使得更加容易理解多对多的关系

4-外键约束

外键约束是数据管理系统中一种重要的完整性约束,用于维护数据之间的关系和一致性。外键约束确保在一个表中引入另一个表记录的时候,这些引用的记录必须存在,从而避免孤立的数据不一致的关系。

1-主要功能

1-维护数据的完整性

确保外键列中的每个值在被引用的主键列中存在。这样就意味着不能插在外键列表中插入不存在主键列表中的值。

2-实现关系、

外键约束在不同的表之间建立起了关系,帮助组织和管理数据。

3-自动更新和删除

可以设置外键约束时的行为,比如级联更新(CASCADE)和级联删除(CASCADE),当主表中的记录被修改或删除的时候,相应的更新或者删除从表中的记录。

2-简单的语法

给某个表中的某一列添加外键约束

引入代码如下

foreign key( 当前表中的列名 )  references 被引用表名(被引用表的列名);
foreign key( coder_id )  references coder(id);

注意:在一般的开发当中,被引用的列名都是被引用表中的主键。

举例如下

constraint [外键约束名称] foreign key(当前表中的列名) references  被引用表名(被引用表的列名)
举例:constraint coder_project_id foreign key(coder_id) references coder(id);

 对其中的关键做一下解释

constraint: 添加约束,可以不写

foreign key(当前表中的列名): 将某个字段作为外键                                                                

references 被引用表名(被引用表的列名) : 外键引用主表的主键

3-举例

我们首先创建一下表格,然后向其中插入一些需要测试的数据

-- 创建程序员表
create table coder(id int primary key auto_increment,name varchar(50),salary double
);
-- 创建项目表
create table project(id int primary key auto_increment,name varchar(50)
);
-- 创建中间关系表,也就是第三张表格
create table coder_project(coder_id int,#这个外键来源于coder表中的主键project_id int#这个外键来源与project中的主键
);-- 添加测试数据
insert into coder values(1,'张三',12000);
insert into coder values(2,'李四',15000);
insert into coder values(3,'王五',18000);insert into project values(1,'QQ项目');
insert into project values(2,'微信项目');insert into coder_project values(1,1);
insert into coder_project values(1,2);
insert into coder_project values(2,1);
insert into coder_project values(2,2);
insert into coder_project values(3,2);

 接下来,给第三张表中添加一下外键约束

第一种方式是:给已经存在的表中添加外键约束

-- 来自于程序员表
alter table coder_project add constraint c_id_fk foreign key(coder_id) references coder(id);
-- 来自于项目表																			
alter table coder_project add constraint p_id_fk foreign key(project_id) references project(id);

第二种方式是在创建表的时候就给添加一下外键约束

create table coder_project(coder_id int,project_id int,constraint c_id_fk foreign key(coder_id) references coder(id),constraint p_id_fk foreign key(project_id) references project(id)
);

5-外键的级联

在修改和删除主表的主键时,同时更新或删除从表的外键值,称为级联操作 ON UPDATE CASCADE -- 级联更新,主键发生更新时,外键也会更新 ON DELETE CASCADE -- 级联删除,主键发生删除时,外键也会删除

首先可以先删除上面的三张表

然后重新创建三张表,添加级联更新和级联删除

具体sql语句如下

-- 创建程序员表
create table coder(id int primary key auto_increment,name varchar(50),salary double
);
-- 创建项目表
create table project(id int primary key auto_increment,name varchar(50)
);
create table coder_project(coder_id int,project_id int,-- 添加外键约束,并且添加级联更新和级联删除constraint c_id_fk foreign key(coder_id) references coder(id) ON UPDATE CASCADE ON DELETE CASCADE,constraint p_id_fk foreign key(project_id) references project(id) ON UPDATE CASCADE ON DELETE CASCADE
);

内容到这里就先结束了,下次再见!


http://www.ppmy.cn/embedded/120116.html

相关文章

计算机网络(第二章 物理层)

文章目录 1.物理层的基本概念2.数据通信的基础知识2.1数据通信系统模型2.2有关信道的基本概念2.3信道极限容量 3.物理层3.2引导性传输媒体3.3非引导性传输媒体 4.信道复用技术4.1频分复用、时分复用和统计时分复用4.2波分复用 5.宽带接入技术 本文首先讨论物理层的基本概念。然…

本地生活服务项目有哪些:如何利用本地生活市场,打开线下流量!

随着各大互联网公司在本地生活服务板块的布局力度持续加大,越来越多的人都开始意识到了它背后所蕴含着的发展前景和收益潜力,进而纷纷打听起了与之相关的消息。而就小编与多位创业者的交流情况而言,在众多问题中,属本地生活服务项…

极速 JavaScript 打包器:esbuild

文章目录 前言什么是esbuild?esbuild如何实现如此出色的性能?基本配置入口文件输出文件模块格式targetplatformexternalbanner和footer 结论 前言 esbuild是一个快速、可扩展的JavaScript打包器和压缩器,它的目标是成为最快的打包器。它使用…

计算机视觉实战项目4(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)

往期热门项目回顾: 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别-3d姿态识别 深度学习小白学习路线 AI健身教练-引体向上-俯卧撑计数…

HarmonyOS/OpenHarmony 离线加载web资源,并实现web资源更新

关键词:h5离线包加载、h5离线包更新、沙箱 在上一篇文章中,我们已经介绍了如何将 rawfile 资源文件中的文件数据拷贝到沙箱下,那么该篇文章将介绍如何加载该沙箱目录下的文件资源(此处以打包后的web资源为例)&#xf…

[leetcode刷题]面试经典150题之8同构字符串(简单)

这个题虽然是简单题,但是看了半天还是没啥好思路,最后看了解题学到了不少知识点 1.index() 函数查找序列中首次出现的元素索引 2.zip函数:用于将可迭代的对象(如列表、元组、字典等)作为参数,将对象中对应…

C语言_回调函数和qsort

1. 回调函数 回调函数就是一个通过函数指针调用的函数。 通俗易懂些讲就是把函数的指针作为参数传递给另一个函数,当在另一个函数中通过这个指针调用其所指向的函数时,那这个通过指针被调用的函数就叫做回调函数。 先上一个模拟计算机的代码&#xff…

VMware ESXi 8.0U3 HPE (慧与) 定制版更新 OEM BIOS 2.7 支持 Windows Server 2025

VMware ESXi 8.0U3 HPE (慧与) 定制版更新 OEM BIOS 2.7 支持 Windows Server 2025 VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS HPE (慧与) 定制版 ESXi 8.0U3 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立…