【问题标题】:Why NOT NULL constraint can be added only in COLUMN LEVEL and ALTER LEVEL why can't we add in TABLE LEVEL? [closed]为什么 NOT NULL 约束只能在 COLUMN LEVEL 和 ALTER LEVEL 中添加 为什么我们不能在 TABLE LEVEL 中添加? [关闭]
【发布时间】:2017-08-29 13:32:34
【问题描述】:

我尝试使用 alter 命令,它会像 ALTER TABLE MODIFY NOT NULL;及其工作 那么为什么我们不能在表级别添加(CREATE TABLE (COL1 DATATYPE(SIZE),COL2 DATATYPE(SIZE), CONSTRAINT TN_COL1_NN NOT NULL(COL1));?

【问题讨论】:

  • 这就是NOT NULL 约束的含义。列可以有NULL 值。没有“NULL”表之类的东西。
  • 你可以假设一个表根据定义具有 NOT NULL 属性,因为它可能根本没有行:P 无论如何,这样的概念没有多大意义
  • 我的意思是,例如,主键约束可以添加到三个级别(COLUMN、TABLE 和 ALTER)。类似地,我们可以添加所有其余的约束在三个级别,为什么我们不能添加NOT NULL?
  • 我们可以通过 CREATE TABLE 和 ALTER TABLE TABLE_NAME MODIFY ...!
  • 这是一个有效的问题。由于已关闭,我将在此处发布我的答案:NULL/NOT NULL are not 约束。它们是数据类型定义。声明为CHAR(10) NOT NULL 的列属于type“不可为空的字符”。您可以使用系统元数据视图验证这一点,添加了 no 约束。

标签: sql constraints notnull


【解决方案1】:

我的意思是,例如,主键约束可以添加到三个级别(COLUMN、TABLE 和 ALTER)。类似地,我们可以在三个级别添加所有其余的约束,为什么我们不能添加 NOT NULL?

我认为您要问的是如何在修改或创建表模式时在列上指定 NULLNOT NULL 约束。答案是你可以。

-- when you define/create the table
CREATE TABLE MyTable (Name VARCHAR(100) NOT NULL)

-- when you add a new column to an existing table
ALTER MyTable ADD Title VARCHAR(100) NOT NULL

-- when you alter an existing column on an existing table
ALTER MyTable ALTER COLUMN Title VARCHAR(100) NOT NULL

如果您想在上述任何内容中允许空值,请删除单词 NOT

【讨论】:

  • 首先我要感谢您的回答,但您能否说明为什么我们不能在表级别添加 NOT NULL 约束。
  • @srikanth - 你对空表级约束有什么期望?你认为那会怎样?
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 2021-12-02
  • 2012-04-28
  • 2015-11-19
  • 1970-01-01
  • 2012-09-26
  • 2017-07-11
  • 2016-05-04
相关资源
最近更新 更多