SQL - NOT NULL约束:初学者指南
你好,未来的数据库大师们!今天,我们将深入SQL的精彩世界,探索一个关键概念:NOT NULL约束。如果你是编程新手,不用担心;我会像过去几年指导无数学生一样,一步步引导你。那么,让我们卷起袖子开始吧!
SQL NOT NULL约束
什么是NOT NULL?
想象你正在填写一张新图书馆卡的表格。有些字段是可选的,比如你的中间名,但有些是绝对必要的,比如你的名字和地址。在数据库的世界里,NOT NULL约束扮演着类似的角色。它确保一列必须始终包含一个值;不能留空。
为什么NOT NULL很重要?
想想一个学校数据库。一个没有名字或学号的学生记录有意义吗?可能没有!NOT NULL约束通过防止遗漏关键信息来帮助维护数据完整性。
在表上创建NOT NULL约束
让我们从一个想象的图书馆的简单表开始。我们称它为“Books”。
CREATE TABLE Books (
BookID INT NOT NULL,
Title VARCHAR(100) NOT NULL,
Author VARCHAR(50) NOT NULL,
PublicationYear INT,
ISBN VARCHAR(13) NOT NULL
);
在这个例子中:
-
BookID
、Title
、Author
和ISBN
被标记为NOT NULL,因为我们认为这些字段是必不可少的。 -
PublicationYear
没有NOT NULL约束,所以它是可选的。
现在,让我们尝试插入一些数据:
-- 这个操作没有问题
INSERT INTO Books (BookID, Title, Author, PublicationYear, ISBN)
VALUES (1, '杀死一只知更鸟', '哈珀·李', 1960, '9780446310789');
-- 这个也可以(省略了可选的PublicationYear)
INSERT INTO Books (BookID, Title, Author, ISBN)
VALUES (2, '1984', '乔治·奥威尔', '9780451524935');
-- 这个会失败,因为我们试图省略Author,它是NOT NULL
INSERT INTO Books (BookID, Title, PublicationYear, ISBN)
VALUES (3, '了不起的盖茨比', 1925, '9780743273565');
最后一个INSERT语句会抛出错误,因为我们违反了Author列的NOT NULL约束。
从表中移除NOT NULL约束
有时,我们可能会意识到一个我们最初认为至关重要的字段实际上可以是可选的。假设我们决定ISBN并不总是必要的(也许对于非常古老的书籍)。以下是如何移除NOT NULL约束的方法:
ALTER TABLE Books
MODIFY COLUMN ISBN VARCHAR(13);
现在,ISBN可以是NULL。但是记住,更改现有表上的约束应该谨慎操作,特别是在生产环境中!
向现有表添加NOT NULL约束
如果我们后来意识到确实需要确保每本书都有出版年份呢?我们可以向现有列添加NOT NULL约束:
-- 首先,我们需要确保该列中没有NULL值
UPDATE Books
SET PublicationYear = 0
WHERE PublicationYear IS NULL;
-- 现在我们可以添加NOT NULL约束
ALTER TABLE Books
MODIFY COLUMN PublicationYear INT NOT NULL;
以下是发生的情况:
- 我们更新任何NULL值到0(或其他适当的默认值)。
- 我们修改表以添加NOT NULL约束。
在添加约束之前处理现有的NULL值是至关重要的;否则,ALTER TABLE语句将失败。
谨慎建议
向带有数据的现有表添加NOT NULL约束可能会有些棘手。总是在进行此类更改之前备份你的数据!
使用NOT NULL的最佳实践
实践 | 描述 |
---|---|
节制使用 | 只对真正必须具有值的列应用NOT NULL |
考虑默认值 | 对于应该始终具有值但可能不会被提供的列,考虑使用DEFAULT与NOT NULL结合 |
提前规划 | 尽量在设计阶段识别NOT NULL列,以避免以后修改表 |
文档记录 | 清楚地在你的模式设计中记录为什么某些列是NOT NULL |
结论
就这样,我热心的学生们!我们已经穿越了NOT NULL约束的土地,从创建带有NOT NULL列的表到在现有表上添加和移除这些约束。记住,NOT NULL就像一个严格的图书管理员,确保我们数据库中的“书籍”所有重要细节都已正确填写。
在你继续你的SQL冒险时,你会发现NOT NULL只是你数据库工具箱中的许多工具之一。它可能看起来很小,但相信我,在维护数据完整性方面它非常强大。我见过无数次数据库灾难因为正确放置的NOT NULL约束而得以避免!
继续练习,保持好奇心,不久的将来,你将能在睡梦中编写SQL查询(尽管我实际上不推荐这样做——键盘是糟糕的枕头!)
快乐编码,未来的数据大师们!
Credits: Image by storyset