1-limit语句
limit的作用是限制查询记录的条数
格式如下
sql
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
sql
#举例,给idi字段添加一个主键
create table tb(
id int primary key,
name varchar(50),
age int,
gender varchar(2)
)
2-在已有表中添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
sql
#举例,给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
举例如下
sql
CREATE TABLE Users (
UserID INT PRIMARY KEY,
Email VARCHAR(255) UNIQUE,
Username VARCHAR(50) UNIQUE,
FullName VARCHAR(100)
);
6-非空约束
防止该列的值为空,保证数据的完整性
字段名 字段类型 NOT NULL
举例如下
sql
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 默认值
举例如下
sql
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-多对多关系:
两个表中的记录可以互相对应多条记录。这通常通过一个关联表实现,例如学生和课程的关系,学生可以选修多门课程,而每门课程也可以有多个学生。
这个关联表会使用这两个表的主键作为关联表的外键。
举例
sql
#创建主要表格
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-简单的语法
给某个表中的某一列添加外键约束
引入代码如下
sql
foreign key( 当前表中的列名 ) references 被引用表名(被引用表的列名);
foreign key( coder_id ) references coder(id);
注意:在一般的开发当中,被引用的列名都是被引用表中的主键。
举例如下
sql
constraint [外键约束名称] foreign key(当前表中的列名) references 被引用表名(被引用表的列名)
举例:constraint coder_project_id foreign key(coder_id) references coder(id);
对其中的关键做一下解释
constraint: 添加约束,可以不写
foreign key(当前表中的列名): 将某个字段作为外键
references 被引用表名(被引用表的列名) : 外键引用主表的主键
3-举例
我们首先创建一下表格,然后向其中插入一些需要测试的数据
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,#这个外键来源于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);
接下来,给第三张表中添加一下外键约束
第一种方式是:给已经存在的表中添加外键约束
sql
-- 来自于程序员表
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);
第二种方式是在创建表的时候就给添加一下外键约束
sql
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语句如下
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
);
内容到这里就先结束了,下次再见!