前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >检查约束与默认值约束

检查约束与默认值约束

原创
作者头像
堕落飞鸟
发布2023-05-11 09:15:35
1.1K0
发布2023-05-11 09:15:35
举报
文章被收录于专栏:飞鸟的专栏

检查约束

检查约束(CHECK Constraint)是一种用于限制列中允许的值的约束。使用检查约束可以确保列中的值满足一定的条件。在MySQL中,检查约束是使用CHECK关键字来创建的。

创建检查约束

要创建检查约束,请使用ALTER TABLE语句,并在表中使用ADD CONSTRAINT子句。以下是创建检查约束的基本语法:

代码语言:javascript
复制
ALTER TABLE table_name
ADD CONSTRAINT constraint_name CHECK (condition);

其中,table_name是要添加检查约束的表名,constraint_name是要添加的约束名称,condition是列中允许的条件。

例如,我们有一个students表,包含id、name和age列。我们想要确保age列的值在18岁以上,可以使用以下代码添加检查约束:

代码语言:javascript
复制
ALTER TABLE students
ADD CONSTRAINT age_check CHECK (age >= 18);

检查约束的使用

一旦检查约束被创建,它将确保在插入、更新或删除数据时不会破坏列中的条件。如果违反了检查约束条件,则会引发错误。

例如,我们尝试在students表中插入一个age小于18的行:

代码语言:javascript
复制
INSERT INTO students (id, name, age)
VALUES (1, 'John', 16);

由于该行违反了age_check检查约束的条件,因此会引发错误。

默认值约束

默认值约束(Default Constraint)是一种用于设置列默认值的约束。当插入新行或更新现有行时,如果未提供该列的值,则将使用默认值。在MySQL中,默认值约束是使用DEFAULT关键字来创建的。

创建默认值约束

要创建默认值约束,请使用ALTER TABLE语句,并在表中使用ADD CONSTRAINT子句。以下是创建默认值约束的基本语法:

代码语言:javascript
复制
ALTER TABLE table_name
ALTER COLUMN column_name SET DEFAULT default_value;

其中,table_name是要添加默认值约束的表名,column_name是要添加默认值约束的列名,default_value是默认值。

例如,我们有一个students表,包含id、name和age列。我们想要确保在插入新行时,如果未提供age列的值,则将使用默认值20,可以使用以下代码添加默认值约束:

代码语言:javascript
复制
ALTER TABLE students
ALTER COLUMN age SET DEFAULT 20;

默认值约束的使用

一旦默认值约束被创建,它将确保在插入新行或更新现有行时,如果未提供该列的值,则将使用默认值。例如,如果我们向students表中插入一行,未提供age列的值,则将使用默认值20:

代码语言:javascript
复制
INSERT INTO students (id, name)
VALUES (1, 'John');

这将在age列中插入值20。

当我们更新students表中的现有行时,如果未提供age列的值,则将使用默认值。例如,以下代码将更新id为1的行,并将age列的值设置为默认值20:

代码语言:javascript
复制
UPDATE students
SET age = DEFAULT
WHERE id = 1;

这将在age列中更新值20。

示例

下面是一个示例,演示如何在MySQL中使用检查约束和默认值约束。我们将创建一个employees表,包含id、name、age和salary列。我们将添加检查约束,以确保age列的值在18岁以上,salary列的值在10000以上,并添加默认值约束,以确保在插入新行时,如果未提供age和salary列的值,则将使用默认值。

创建employees表

首先,我们将创建employees表:

代码语言:javascript
复制
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT,
    salary DECIMAL(10,2)
);

这将创建一个名为employees的表,其中包含id、name、age和salary列。id列是主键,name列是非空列。

添加检查约束

接下来,我们将添加检查约束,以确保age列的值在18岁以上,salary列的值在10000以上:

代码语言:javascript
复制
ALTER TABLE employees
ADD CONSTRAINT age_check CHECK (age >= 18);

ALTER TABLE employees
ADD CONSTRAINT salary_check CHECK (salary >= 10000);

这将为employees表添加age_check和salary_check检查约束。

添加默认值约束

接下来,我们将添加默认值约束,以确保在插入新行时,如果未提供age和salary列的值,则将使用默认值:

代码语言:javascript
复制
ALTER TABLE employees
ALTER COLUMN age SET DEFAULT 20;

ALTER TABLE employees
ALTER COLUMN salary SET DEFAULT 20000;

这将为employees表的age和salary列添加默认值约束。

使用检查约束和默认值约束

现在,我们将使用检查约束和默认值约束,插入新行和更新现有行。

首先,我们插入一行,提供id和name列的值,但未提供age和salary列的值:

代码语言:javascript
复制
INSERT INTO employees (id, name)
VALUES (1, 'John');

由于未提供age和salary列的值,因此将使用默认值20和20000。此行符合age_check和salary_check检查约束的条件。

接下来,我们插入一行,提供id、name、age和salary列的值:

代码语言:javascript
复制
INSERT INTO employees (id, name, age, salary)
VALUES (2, 'Mary', 25, 15000);

此行符合age_check和salary_check检查约束的条件。

最后,我们更新id为1的行,并将age列的值设置为30:

代码语言:javascript
复制
UPDATE employees
SET age = 30
WHERE id = 1;

此行符合age_check检查约束的条件,因为age列的值为30。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 检查约束
    • 创建检查约束
      • 检查约束的使用
      • 默认值约束
        • 创建默认值约束
          • 默认值约束的使用
          • 示例
            • 创建employees表
              • 添加检查约束
                • 添加默认值约束
                  • 使用检查约束和默认值约束
                  相关产品与服务
                  云数据库 MySQL
                  腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档