我是靠谱客的博主 清爽高山,最近开发中收集的这篇文章主要介绍mysql not null 语法_MySQL NOT NULL约束,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本教程将向您介绍MySQL NOT NULL约束,帮助我们来保持数据的一致性。

MySQL NOT NULL约束简介

NOT NULL约束是一个列约束,仅将列的值强制为非NULL值。

NOT NULL约束的语法如下:

column_name data_type NOT NULL;

列可能只包含一个NOT NULL约束,它指定列不能包含任何NULL值。

以下CREATE TABLE语句创建tasts表:

USE testdb;

CREATE TABLE tasks (

id INT AUTO_INCREMENT PRIMARY KEY,

title VARCHAR(255) NOT NULL,

start_date DATE NOT NULL,

end_date DATE

);

title和start_date列明确地显示NOT NULL约束。 id列具有PRIMARY KEY约束,因此它隐含地包含一个NOT NULL约束。

end_date列可以具有NULL值。这是因为当添加新任务记录时,我们可能还不知道任务的结束日期。

在表的每一列中都有NOT NULL约束是最好的做法,除非你有很好的理由不使用NOT NULL约束。

通常,NULL值使查询更加复杂。在这种情况下,可以使用NOT NULL约束并为列提供默认值。请参阅以下示例:

use testdb;

CREATE TABLE inventory (

material_no VARCHAR(18),

warehouse_no VARCHAR(10),

quantity DECIMAL(19 , 2 ) NOT NULL DEFAULT 0,

base_unit VARCHAR(10) NOT NULL,

PRIMARY KEY (material_no , warehouse_no)

);

在此示例中,数量(quantity)列的默认值为0,因为当向inventory表添加一行数据时,数量(quantity)列的值应该为0,而不是NULL。

向现有列添加NOT NULL约束

通常,在创建表时向列添加NOT NULL约束。 但是,有时希望将NOT NULL约束添加到现有表的NULL列。 在这种情况下,可以使用以下步骤:

检查列的当前值。

将所有NULL值更新为非NULL值。

添加NOT NULL约束

下面来看一个例子。

我们将数据插入到tasks表中以更好地演示。

INSERT INTO tasks(title ,start_date, end_date)

VALUES('Learn MySQL NOT NULL constraint', '2017-02-01','2017-02-02'),

('Check and update NOT NULL constraint to your database', '2017-02-01',NULL);

现在,假设要强制用户在创建新任务时给出估计的结束日期。为此,您需要将NOT NULL约束添加到tasts表的end_date列上。

首先检查end_date列的值,使用IS NULL运算符来检查列中的值是否有NULL值:

SELECT

*

FROM

tasks

WHERE

end_date IS NULL;

执行上面的查询语句,得到以下结果 -

+----+-------------------------------------------------------+------------+----------+

| id | title | start_date | end_date |

+----+-------------------------------------------------------+------------+----------+

| 2 | Check and update NOT NULL constraint to your database | 2017-02-01 | NULL |

+----+-------------------------------------------------------+------------+----------+

1 row in set

查询返回end_date值为NULL的一行记录。

其次,将NULL值更新为非NULL值。在这种情况下,我们可以创建一个规则,如果end_date为NULL,则在开始日期后一周结束日期。

UPDATE tasks

SET

end_date = start_date + 7

WHERE

end_date IS NULL;

我们来查看一下这个修改后的变化:

SELECT

*

FROM

tasks;

执行上面的查询语句,得到以下结果 -

+----+-------------------------------------------------------+------------+------------+

| id | title | start_date | end_date |

+----+-------------------------------------------------------+------------+------------+

| 1 | Learn MySQL NOT NULL constraint | 2017-02-01 | 2017-02-02 |

| 2 | Check and update NOT NULL constraint to your database | 2017-02-01 | 2017-02-08 |

+----+-------------------------------------------------------+------------+------------+

2 rows in set

第三,将NOT NULL约束添加到end_date列。要执行此操作,请使用以下ALTER TABLE语句:

ALTER TABLE table_name

CHANGE old_column_name new_column_name new_column_definition;

在上面例子中,除了具有NOT NULL约束的列定义之外,旧的列名称和新的列名称必须相同:

ALTER TABLE tasks

CHANGE end_date end_date DATE NOT NULL;

使用DESCRIBE或DESC语句来验证更改:

mysql> DESC tasks;

+------------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+------------+--------------+------+-----+---------+----------------+

| id | int(11) | NO | PRI | NULL | auto_increment |

| title | varchar(255) | NO | | NULL | |

| start_date | date | NO | | NULL | |

| end_date | date | NO | | NULL | |

+------------+--------------+------+-----+---------+----------------+

4 rows in set

如上所示,NOT NULL约束被添加到end_date列。

在本教程中,您已经学习了如何为列定义NOT NULL约束,并将NOT NULL约束添加到现有列。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

最后

以上就是清爽高山为你收集整理的mysql not null 语法_MySQL NOT NULL约束的全部内容,希望文章能够帮你解决mysql not null 语法_MySQL NOT NULL约束所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部