MySQL 约束2025年3月17日 | 阅读 7 分钟 MySQL 中的约束用于指定允许或限制在表中存储哪些值/数据的规则。它们提供了一种合适的方法来确保表中数据的准确性和完整性。它还有助于限制将要插入到表中的数据类型。如果在约束和数据操作之间发生任何中断,则该操作将失败。 MySQL 约束的类型MySQL 中的约束分为两种类型
如何在 MySQL 中创建约束我们可以在使用 CREATE TABLE 语句创建表时定义约束。MySQL 也使用 ALTER TABLE 语句来为现有表模式指定约束。 语法以下是创建表约束的语法 MySQL 中使用的约束以下是 MySQL 中最常用的约束
让我们详细讨论这些约束。 NOT NULL 约束此约束指定列不能包含 NULL 或空值。以下语句创建了一个带有 NOT NULL 约束的表。 执行下面列出的查询以了解其工作原理 输出 ![]() 在上面的图片中,我们可以看到第一个 INSERT 查询正确执行,但第二个语句失败并报错,提示列 LastName 不能为 null。 UNIQUE 约束此约束确保插入到列中的所有值都是唯一的。这意味着一个列不能存储重复值。MySQL 允许我们在一个表中使用多个带有 UNIQUE 约束的列。以下语句创建了一个带有 UNIQUE 约束的表 执行下面列出的查询以了解其工作原理 输出 在下面的输出中,我们可以看到第一个 INSERT 查询正确执行,但第二个语句失败并报错,提示:键 BrandName 的重复条目“Cantabil”。 ![]() CHECK 约束它控制特定列中的值。它确保插入到列中的值必须满足给定条件。换句话说,它根据给定条件确定与列关联的值是否有效。 在 8.0.16 版本之前,MySQL 使用此约束语法的有限版本,如下所示 在 8.0.16 版本之后,MySQL 对所有存储引擎(即表约束和列约束)使用 CHECK 约束,如下所示 让我们了解 CHECK 约束如何在 MySQL 中工作。例如,以下语句创建了一个名为“Persons”的表,其中“Age”列包含 CHECK 约束。CHECK 约束确保插入到列中的值必须满足给定条件,即一个人的年龄应大于或等于 18 岁 执行列出的查询以将值插入到表中 输出 在下面的输出中,我们可以看到第一个 INSERT 查询成功执行,但第二个语句失败并报错,提示:键 Age 的 CHECK 约束被违反。 ![]() DEFAULT 约束此约束用于为未指定任何值的特定列设置默认值。这意味着该列必须包含一个值,包括 NULL。 例如,以下语句创建了一个名为“Persons”的表,其中“City”列包含 DEFAULT 约束。如果我们没有为 City 列指定任何值,它将插入默认值 执行列出的查询以将值插入到表中 输出 在下面的输出中,我们可以看到包含所有字段的第一个插入查询成功执行,而第二个插入语句不包含“City”列但也成功执行。这是因为它有一个默认值。 ![]() 现在,执行以下语句以验证第 4 列的默认值 我们可以看到它完美地工作。这意味着默认值“New York”自动存储在 City 列中。 ![]() PRIMARY KEY 约束此约束用于唯一标识表中的每条记录。如果列包含主键约束,则它不能为 null 或为空。一个表可能包含重复的列,但它只能包含一个主键。它总是包含列中的唯一值。 以下语句创建了一个名为“Person”的表,并更清楚地解释了此主键的使用 接下来,使用 insert 查询将数据存储到表中 输出 在下面的输出中,我们可以看到第一个插入查询成功执行。而第二个插入语句失败并报错,提示:主键列的重复条目。 ![]() AUTO_INCREMENT 约束每当我们向表中插入新记录时,此约束都会自动生成一个唯一的数字。通常,我们为表中的主键字段使用此约束。 我们可以通过以下示例来理解它,其中 Animal 表中的 id 列将自动递增 接下来,我们需要将值插入到“Animals”表中 现在,执行以下语句以获取表数据 输出 在输出中,我们可以看到我没有为自动递增列指定任何值,因此 MySQL 会自动为该字段按顺序生成一个唯一的数字。 ![]() ENUM 约束MySQL 中的 ENUM 数据类型是一个字符串对象。它允许我们在创建表时,将列中选择的值限制为列规范中允许值列表中的值。它是 enumeration 的缩写,这意味着每个列可能具有指定可能值中的一个。它使用数字索引(1、2、3…)来表示字符串值。 以下示例创建了一个名为“shirts”的表,其中包含三列:id、name 和 size。“size”列使用 ENUM 数据类型,包含 small、medium、large 和 x-large 尺寸。 接下来,我们需要使用以下语句将值插入到“Shirts”表中 现在,执行 SELECT 语句以查看插入到表中的值 输出 我们将得到以下输出 ![]() INDEX 约束此约束允许我们非常快速轻松地从表中创建和检索值。索引可以使用一个或多个列创建。它以插入表的方式为每行分配一个 ROWID。 以下示例创建了一个名为“shirts”的表,其中包含三列:id、name 和 size。 接下来,我们需要使用以下语句将值插入到“Shirts”表中 现在,执行此语句以创建索引 我们可以使用下面的查询通过索引列检索数据 输出 出现以下输出 ![]() 外键约束此约束用于将两个表连接在一起。它也称为引用键。外键列匹配另一个表的主键字段。这意味着一个表中的外键字段引用另一个表的主键字段。 让我们考虑这些表的结构:Persons 和 Orders。 表:Persons 表:Orders 在上面的表结构中,我们可以看到“Orders”表中的“Person_ID”字段指向“Persons”表中的“Person_ID”字段。“Person_ID”是“Persons”表中的 PRIMARY KEY,而“Orders”表的“Person_ID”列是 FOREIGN KEY。 输出 我们的表包含以下数据 ![]() 下一主题MySQL INSERT 语句 |
我们请求您订阅我们的新闻通讯以获取最新更新。