欢迎来到Cefler的博客😁
🕌博客主页:折纸花满衣
🏠个人专栏:MySQL
目录
- 👉🏻常见表的约束
- 👉🏻空属性NULL
- 👉🏻default默认值
- 👉🏻zerofill
- [👉🏻 主键](#👉🏻 主键)
- [👉🏻自增长Auto Increment](#👉🏻自增长Auto Increment)
- 👉🏻唯一键
- 👉🏻外键
👉🏻常见表的约束
在关系型数据库中,表的约束用于确保数据的完整性和一致性。以下是常见的表约束类型:
-
主键约束(Primary Key Constraint):主键是表中的唯一标识符,用于唯一标识表中的每一行。主键约束确保主键列中的值是唯一且不为空的。主键可以由单个列或多个列组成。
-
外键约束(Foreign Key Constraint):外键是一个表中的列,其值必须匹配另一个表中的主键或唯一键列的值。外键约束用于确保引用完整性,即确保在一个表中引用另一个表的数据时,引用的值必须存在于被引用表的主键或唯一键列中。
-
唯一约束(Unique Constraint):唯一约束确保表中的某个列或一组列中的值是唯一的,但允许其中的值为 NULL。唯一约束通常用于确保某些列中的值不重复,但允许其中的某些行具有空值。
-
检查约束(Check Constraint):检查约束用于确保列中的值满足特定的条件。例如,可以使用检查约束来确保年龄列中的值大于 18,或者确保电子邮件地址列中的值符合特定的格式。
-
默认约束(Default Constraint):默认约束用于为列中的值提供默认值。如果插入或更新操作没有提供值,则将使用默认值。默认约束可以确保表中的列始终具有一个已知的值。
这些约束可以单独使用,也可以结合在一起使用,以确保表中的数据满足特定的要求。它们在数据库设计中起着关键作用,有助于确保数据的完整性、一致性和可靠性。
👉🏻空属性NULL
空属性(NULL)和非空属性(NOT NULL)是用于定义列是否允许存储空值的约束。空值表示该列中没有存储任何数据,而非空值表示该列中必须存储有效的数据。
下面是它们的含义及示例 SQL 代码:
- NULL 属性:
- NULL 表示缺少值或未知值。
- 允许在列中存储空值。
- 如果列允许 NULL,则插入或更新操作可以将该列的值设置为 NULL。
- 在使用 NULL 进行比较时,通常需要使用 IS NULL 或 IS NOT NULL 运算符。
示例 SQL 代码:
sql
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Email VARCHAR(100) NULL -- Email 列允许存储空值
);
INSERT INTO Employees (EmployeeID, FirstName, LastName, Email)
VALUES (1, 'John', 'Doe', NULL); -- 插入空值到 Email 列
- NOT NULL 属性:
- NOT NULL 表示列不允许存储空值,必须始终包含有效的数据。
- 插入或更新操作必须为 NOT NULL 列提供有效的值。
- 如果尝试将 NULL 值插入 NOT NULL 列,则会导致错误。
示例 SQL 代码:
sql
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
FirstName VARCHAR(50) NOT NULL, -- FirstName 列不允许存储空值
LastName VARCHAR(50) NOT NULL,
Age INT
);
INSERT INTO Students (StudentID, FirstName, LastName, Age)
VALUES (1, 'Alice', 'Smith', 20); -- 插入有效值到 FirstName 和 LastName 列
INSERT INTO Students (StudentID, FirstName, LastName, Age)
VALUES (2, NULL, 'Doe', 22); -- 尝试插入 NULL 值到 FirstName 列,将会导致错误
在设计数据库时,正确使用 NULL 和 NOT NULL 属性可以确保数据的完整性和一致性,并帮助有效地处理缺少值或未知值的情况。
👉🏻default默认值
默认值(DEFAULT)是用于指定在插入新行时,如果未提供值,则将使用的默认值。默认值可以在创建表时指定,也可以在修改表结构时添加到列上。
下面是默认值的一些特点和示例 SQL 代码:
-
指定默认值:
- 可以为列指定一个默认值,该值在插入新行时将自动应用。
- 如果插入或更新操作没有为列提供值,则将使用默认值。
- 默认值可以是常量、表达式或函数。
-
示例 SQL 代码:
sql
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Email VARCHAR(100) DEFAULT 'unknown@example.com' -- Email 列的默认值为 'unknown@example.com'
);
INSERT INTO Employees (EmployeeID, FirstName, LastName)
VALUES (1, 'John', 'Doe'); -- 在插入新行时未提供 Email 值,将使用默认值 'unknown@example.com'
- 修改默认值:
- 可以使用 ALTER TABLE 语句修改列的默认值。
- 修改默认值将影响后续的插入操作,但不会影响已存在的行。
sql
ALTER TABLE Employees
ALTER COLUMN Email SET DEFAULT 'noreply@example.com'; -- 将 Email 列的默认值修改为 'noreply@example.com'
- 移除默认值:
- 通过将列的默认值设置为 NULL,可以将默认值移除。
- 或者使用 ALTER TABLE 语句显式地删除默认值。
sql
ALTER TABLE Employees
ALTER COLUMN Email DROP DEFAULT; -- 移除 Email 列的默认值
默认值在确保数据完整性的同时,也可以简化应用程序中对于缺失值的处理。通过合理地设置默认值,可以使数据库系统更加灵活地处理不同情况下的数据插入操作。
👉🏻zerofill
ZEROFILL 是 MySQL 中用于数值列的一种特性,它指定了当数值长度小于列定义的宽度时,MySQL 将用零来填充该数值,以达到指定的宽度。
下面是 ZEROFILL 的一些特点和示例:
-
ZEROFILL 特性:
- 当为数值列启用 ZEROFILL 特性时,MySQL 将在数值长度小于列定义的宽度时,用零来填充数值。
- ZEROFILL 只适用于数值类型,如 INT、FLOAT、DOUBLE 等。
- ZEROFILL 不改变数值的实际值,只是在显示时添加零以达到指定的宽度。
-
示例 SQL 代码:
sql
CREATE TABLE Students (
StudentID INT(6) ZEROFILL, -- 使用 ZEROFILL 特性
FirstName VARCHAR(50),
LastName VARCHAR(50),
Age INT
);
INSERT INTO Students (StudentID, FirstName, LastName, Age)
VALUES (123, 'Alice', 'Smith', 20); -- 插入数值 123,但在显示时将会填充为 000123
在上面的示例中,如果 StudentID 列定义为 INT ZEROFILL,当插入的数值长度小于列定义的宽度时,MySQL 将在显示时用零来填充该数值。例如,插入数值 123 到 StudentID 列时,实际存储的值仍然是 123,但在查询结果中会以 000123 的形式显示。
ZEROFILL 特性可以在某些情况下提高数据的可读性,并使数据在显示时更加整齐,特别是在处理需要固定宽度的数值时。
👉🏻 主键
主键(Primary Key)在数据库中是用于唯一标识每一行数据的一列或一组列。主键的作用是确保表中的每一行都有一个唯一的标识符,这样可以方便地对数据进行检索、修改和删除。主键有以下几个重要特点:
-
唯一性:主键的值在整个表中必须是唯一的,每一行都必须具有唯一的主键值。
-
非空性:主键的值不能为 NULL,确保每一行都有一个有效的标识符。
-
不可变性:一旦主键值被设置,就不应该被修改或更新。这有助于维持数据的一致性和完整性。
-
单一性:一个表只能有一个主键,但主键可以由一个列或多个列组成,这种情况下称为复合主键。
-
必须稳定:主键值应该是稳定的,不随时间或上下文的变化而变化。
主键的设置可以带来以下好处:
-
数据唯一性约束:通过主键,可以确保表中的每一行数据都具有唯一的标识,防止数据重复或冗余。
-
数据检索效率提升:数据库系统会自动为主键创建索引,这样可以加快对数据的检索速度。
-
数据一致性维护:主键的存在有助于维护数据的完整性和一致性,确保数据的正确性。
-
外键关联:主键常常与外键一起使用,通过外键可以建立不同表之间的关联关系,实现数据的关联查询和引用完整性。
在设计数据库表时,选择合适的列作为主键是非常重要的。常用的主键选择包括唯一的标识符列(如自增长整数列),或者是能够唯一标识每一行数据的业务相关的列(如身份证号、学号等)。
当创建数据库表时,你可以指定某一列作为主键。以下是一个简单的示例代码,演示如何在 MySQL 中创建表并设置主键:
sql
CREATE TABLE Users (
UserID INT AUTO_INCREMENT, -- 设置自增长整数列
Username VARCHAR(50) NOT NULL,
Email VARCHAR(100) NOT NULL,
Password VARCHAR(50) NOT NULL,
PRIMARY KEY (UserID) -- 将 UserID 列设置为主键
);
在上面的示例中:
- 我们创建了一个名为
Users
的表,其中包含UserID
、Username
、Email
和Password
四个列。 UserID
列被定义为INT
类型,并且使用AUTO_INCREMENT
关键字,这意味着每当插入新行时,UserID
的值将自动递增,确保每个用户都有一个唯一的标识符。Username
、Email
和Password
列被定义为VARCHAR
类型,并且都被指定为NOT NULL
,确保这些列的值不能为空。- 最后,我们使用
PRIMARY KEY
关键字将UserID
列设置为主键,这意味着UserID
列的值将在表中唯一标识每一行数据。
通过这样设置,我们确保了 Users
表中的每一行都具有唯一的 UserID
,并且 UserID
会自动递增,同时还确保了 Username
、Email
和 Password
列的值都不为空。
🏠当需要使用复合主键时,可以指定多个列作为主键的组合 。
以下是一个示例代码,演示如何在 MySQL 中创建一个表并设置复合主键:
sql
CREATE TABLE Orders (
OrderID INT AUTO_INCREMENT,
CustomerID INT,
OrderDate DATE,
TotalAmount DECIMAL(10,2),
PRIMARY KEY (OrderID, CustomerID) -- 将 OrderID 和 CustomerID 列作为复合主键
);
在上面的示例中:
- 我们创建了一个名为
Orders
的表,其中包含OrderID
、CustomerID
、OrderDate
和TotalAmount
四个列。 OrderID
和CustomerID
列被指定为主键,通过将它们包含在PRIMARY KEY
关键字中,表示它们组成了复合主键。OrderID
列被定义为INT
类型,并使用AUTO_INCREMENT
关键字,确保每个订单都有一个唯一的标识符。CustomerID
列被定义为INT
类型,用于标识订单的客户。OrderDate
列被定义为DATE
类型,用于记录订单的日期。TotalAmount
列被定义为DECIMAL
类型,用于记录订单的总金额。
通过这样设置,我们确保了 Orders
表中的每一行都具有唯一的 OrderID
和 CustomerID
组合,这样就可以唯一标识每个订单。
👉🏻自增长Auto Increment
自增长(Auto Increment)是一种数据库功能,通常用于为表中的某一列生成唯一的、递增的数值。这种功能常用于创建主键,以确保每一行数据都有一个唯一标识符。
在许多数据库管理系统中,如MySQL、PostgreSQL和SQLite等,都支持自增长功能。在MySQL中,常用的自增长关键字是 AUTO_INCREMENT
。
自增长列的特点包括:
-
唯一性: 自增长列生成的值是唯一的,每次插入新数据时,系统会自动为这一列生成一个比上一次插入的值大的新值,确保每个值都是唯一的。
-
递增性: 自增长列生成的值是递增的,每次插入新数据时,自增长列的值会自动递增,通常是加一。
-
简便性: 自增长列不需要手动指定值,数据库系统会自动为其生成一个唯一的、递增的值。
自增长列通常用于主键列的创建,以确保每个数据行都有一个唯一标识符,并且这个标识符是递增的,方便进行数据检索和管理。例如,在用户表中,可以将用户ID列设置为自增长列,确保每个用户都有一个唯一的、递增的用户ID。
自增长列可以通过以下示例代码来创建:
sql
CREATE TABLE Users (
UserID INT AUTO_INCREMENT,
Username VARCHAR(50),
Email VARCHAR(100),
PRIMARY KEY (UserID)
);
在这个示例中,UserID
列被指定为自增长列,每次插入新数据时,数据库系统会自动为 UserID
生成一个唯一的、递增的值。
👉🏻唯一键
唯一键(Unique Key)是数据库中的一种约束,用于确保某一列或多列的值在表中是唯一的 ,但与主键的区别在于,唯一键允许为空值(NULL)。
唯一键的作用是保证某列或多列的值不重复,但允许其中的某些值为 NULL。这在某些情况下很有用,例如,一个用户表中的电子邮件地址列可以被定义为唯一键,这样就能确保每个用户都有一个唯一的电子邮件地址,但允许某些用户的电子邮件地址为空。
与主键相似,唯一键也可以由一个或多个列组成。如果是单列唯一键,那么该列中的每个值都必须是唯一的;如果是多列唯一键,则这些列的组合值必须是唯一的。
在创建表时,可以使用 UNIQUE
关键字来定义唯一键约束。以下是一个示例代码,演示如何在 MySQL 中创建一个具有唯一键约束的表:
sql
CREATE TABLE Users (
UserID INT AUTO_INCREMENT,
Username VARCHAR(50),
Email VARCHAR(100) UNIQUE,
PRIMARY KEY (UserID)
);
在这个示例中,我们将 Email
列定义为唯一键,这意味着每个用户的电子邮件地址必须是唯一的,但允许某些用户的电子邮件地址为空。同时,UserID
列被定义为主键,确保每个用户都有一个唯一的用户ID。
👉🏻外键
外键(Foreign Key)是关系型数据库中的一种约束,用于建立表与表之间的关联关系。外键用于指定一个表中的列或列组合,这些列的值必须在另一个表的指定列中存在。
外键约束可以确保数据的一致性和完整性,通过强制执行参照完整性,确保了在一个表中引用另一个表的数据时的准确性和有效性。
以下是外键的一些重要特点:
-
建立关联关系: 外键用于建立表与表之间的关联关系,通过在一个表中引用另一个表的列,可以实现跨表的数据关联。
-
保持一致性: 外键约束可以确保在进行关联查询或更新操作时,参与关联的表之间的数据保持一致性。
-
参照完整性: 外键约束强制执行参照完整性,确保在引用另一个表的列时,引用列的值必须存在于被引用表的主键或唯一键列中。
-
级联操作: 外键约束可以定义级联操作,例如级联更新或级联删除,以确保在更新或删除主表中的数据时,相关的从表数据也会被更新或删除。
在创建表时,可以使用 FOREIGN KEY
关键字来定义外键约束。以下是一个示例代码,演示如何在 MySQL 中创建一个具有外键约束的表:
sql
CREATE TABLE Orders (
OrderID INT AUTO_INCREMENT,
ProductID INT,
Quantity INT,
PRIMARY KEY (OrderID),
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
在这个示例中,Orders
表中的 ProductID
列被定义为外键,它引用了另一个表 Products
中的 ProductID
列。这意味着在插入或更新 Orders
表中的数据时,ProductID
列的值必须存在于 Products
表的 ProductID
列中。
如上便是本期的所有内容了,如果喜欢并觉得有帮助的话,希望可以博个点赞+收藏+关注🌹🌹🌹❤️ 🧡 💛,学海无涯苦作舟,愿与君一起共勉成长