Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL'中的约束不明确;s创建表格_Sql - Fatal编程技术网

SQL'中的约束不明确;s创建表格

SQL'中的约束不明确;s创建表格,sql,Sql,在Coursera课程中,有一段代码: 我不明白其中的部分: CONSTRAINT AUTHOR\u PK (作者id)(主键之后)) 你能解释一下吗 澄清:对于约束作者_PK,我不明白为什么约束明确存在,但表的其他属性却不存在。我也不知道作者是干什么用的 对于(作者id),我不理解它的存在。既然主键与作者id写在同一行上,那么作者id将被用作主键不是已经暗示了吗 我对SQL非常陌生。我咨询 但是我自己无法解决这些问题。如果要为约束提供特定名称,则必须使用约束关键字,在本例中为AU

在Coursera课程中,有一段代码:

我不明白其中的部分:

  • CONSTRAINT AUTHOR\u PK
  • (作者id)
    (主键之后))
你能解释一下吗

澄清:对于
约束作者_PK
,我不明白为什么
约束
明确存在,但表的其他属性却不存在。我也不知道作者是干什么用的

对于
(作者id)
,我不理解它的存在。既然
主键
作者id
写在同一行上,那么
作者id
将被用作主键不是已经暗示了吗

我对SQL非常陌生。我咨询


但是我自己无法解决这些问题。

如果要为约束提供特定名称,则必须使用
约束
关键字,在本例中为
AUTHOR\u PK
。如果不这样做,名称将自动生成,而这些名称通常不是很有用。本例中的所有
notnull
约束都会自动生成名称

根据我的经验,命名所有约束(非空约束除外)是标准做法

我认为您是对的,在本例中,
(author\u id)
是不必要的,因为约束已经为该列声明了这一事实暗示了这一点。但语法允许这样做。(我想知道它是否允许在这个位置指定不同的列-我不这么认为,但还没有尝试过。)

当您想要声明多列键时,指定列的语法更有用。在这种情况下,
约束
子句将被指定为表定义中的另一列:

...
country  CHAR(2),
CONSTRAINT one_city_per_country UNIQUE (country,city)
);

如果要为约束提供特定名称,则必须使用
约束
关键字,在本例中为
作者主键
。如果不这样做,名称将自动生成,而这些名称通常不是很有用。本例中的所有
notnull
约束都会自动生成名称

根据我的经验,命名所有约束(非空约束除外)是标准做法

我认为您是对的,在本例中,
(author\u id)
是不必要的,因为约束已经为该列声明了这一事实暗示了这一点。但语法允许这样做。(我想知道它是否允许在这个位置指定不同的列-我不这么认为,但还没有尝试过。)

当您想要声明多列键时,指定列的语法更有用。在这种情况下,
约束
子句将被指定为表定义中的另一列:

...
country  CHAR(2),
CONSTRAINT one_city_per_country UNIQUE (country,city)
);

您可以在
create TABLE
语句中创建两种类型的约束。这些是列约束和表约束

列约束包含在单个列的定义中

表约束作为单独的声明包含,而不是列定义的一部分

这是同一个表,主键声明为表约束:

CREATE TABLE Author
(author_id CHAR(2),
 lastname VARCHAR(15) not null,
...,
CONSTRAINT PK_AUTHOR PRIMARY KEY (author_id)
)
示例中的约束被声明为列约束。通常,列约束不必命名与它们相关的列,因为它们是列定义的一部分,事实上,在SQL的某些方言中,您显示的示例将被拒绝,因为它确实显式地命名了列


PK_AUTHOR
,在您的示例和我的示例中,都用于为约束指定特定名称。如果以后需要删除约束,这将非常有用。如果不想命名约束,则可以从任一sampe中省略
constraint PK\u AUTHOR

可以在
create TABLE
语句中创建两种类型的约束。这些是列约束和表约束

列约束包含在单个列的定义中

表约束作为单独的声明包含,而不是列定义的一部分

这是同一个表,主键声明为表约束:

CREATE TABLE Author
(author_id CHAR(2),
 lastname VARCHAR(15) not null,
...,
CONSTRAINT PK_AUTHOR PRIMARY KEY (author_id)
)
示例中的约束被声明为列约束。通常,列约束不必命名与它们相关的列,因为它们是列定义的一部分,事实上,在SQL的某些方言中,您显示的示例将被拒绝,因为它确实显式地命名了列


PK_AUTHOR
,在您的示例和我的示例中,都用于为约束指定特定名称。如果以后需要删除约束,这将非常有用。如果您不想命名约束,则可以从任一sampe中省略
constraint PK\u AUTHOR

您在哪里找到创建表的?语法非常奇怪,不是有效的ISO/ANSI SQL。w3*ools不是我推荐的。@jarlh这是一个名为《Coursera课程数据库和数据科学SQL中的创建表语句》的视频。你会推荐哪种来源而不是w3?这个问题很难回答。老实说,我不知道,因为我不需要任何初学者的提示。或者说你比傻瓜好。你在哪里找到创建表的方法的?语法非常奇怪,不是有效的ISO/ANSI SQL。w3*ools不是我推荐的。@jarlh这是一个名为《Coursera课程数据库和数据科学SQL中的创建表语句》的视频。你会推荐哪种来源而不是w3?这个问题很难回答。老实说,我不知道,因为我不需要任何初学者的提示。我认为“内联”约束名称确实是SQL标准的一部分(例如,由和Oracle支持)。但是,正如您所提到的,包含列名是无效的