Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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 使用相同的自动递增主键和名称创建三个表_Sql_Tsql_Sql Server 2017 - Fatal编程技术网

Sql 使用相同的自动递增主键和名称创建三个表

Sql 使用相同的自动递增主键和名称创建三个表,sql,tsql,sql-server-2017,Sql,Tsql,Sql Server 2017,无法在线找到此问题的好答案。我需要创建三个表,作为下面的示例,一个具有自动递增ID的父表,该父表将链接到具有相同确切ID的两个子表(主题和注释),并在删除该父表ID时级联返回。 有什么办法解决吗? 我在谷歌上搜索过,对于如何解决这个问题感到非常困惑。我对SQL有相当丰富的经验,但不熟悉创建表和关系 CREATE TABLE Parent ( ParentID INT NOT NULL IDENTITY PRIMARY KEY, Email VARCHAR(50) NOT NULL

无法在线找到此问题的好答案。我需要创建三个表,作为下面的示例,一个具有自动递增ID的父表,该父表将链接到具有相同确切ID的两个子表(主题和注释),并在删除该父表ID时级联返回。
有什么办法解决吗?
我在谷歌上搜索过,对于如何解决这个问题感到非常困惑。我对SQL有相当丰富的经验,但不熟悉创建表和关系

CREATE TABLE Parent
(
    ParentID INT NOT NULL IDENTITY PRIMARY KEY,
    Email VARCHAR(50) NOT NULL,...
)

CREATE TABLE Subject
(
    ParentID INT NOT NULL PRIMARY KEY,
    Subject
)

CREATE TABLE Comment
(
    ParentID INT NOT NULL PRIMARY KEY,
    Comment VARCHAR(100)
)

在删除级联时使用与
的1对1关系:

CREATE TABLE Parent(
    ParentID INT NOT NULL IDENTITY PRIMARY KEY,
    Email VARCHAR(50) NOT NULL,...
)

CREATE TABLE Subject(
    ParentID INT NOT NULL PRIMARY KEY,
    Subject,
    CONSTRAINT fk_SubjectParentId FOREIGN KEY (ParentID)
    REFERENCES Parent (ParentID) ON DELETE CASCADE
)

CREATE TABLE Comment(
    ParentID INT NOT NULL PRIMARY KEY,
    Comment VARCHAR(100),
    CONSTRAINT fk_CommentParentId FOREIGN KEY (ParentID)
    REFERENCES Parent (ParentID) ON DELETE CASCADE
)
这称为1对1关系,因为外键的两端在其表中是唯一的


虽然我不得不同意米奇·麦特的评论,但级联删除是需要谨慎使用的。通过指定cascade delete,可以告诉数据库引擎在删除父记录时删除相关记录。如果您试图删除被另一个表引用的记录,没有该级联删除选项只会抛出一个错误。作为开发人员,这迫使您考虑从父表中删除行的副作用,基本上起到“您确定要删除吗?”的作用,以防止不必要的删除。

在删除级联时使用与
的1对1关系:

CREATE TABLE Parent(
    ParentID INT NOT NULL IDENTITY PRIMARY KEY,
    Email VARCHAR(50) NOT NULL,...
)

CREATE TABLE Subject(
    ParentID INT NOT NULL PRIMARY KEY,
    Subject,
    CONSTRAINT fk_SubjectParentId FOREIGN KEY (ParentID)
    REFERENCES Parent (ParentID) ON DELETE CASCADE
)

CREATE TABLE Comment(
    ParentID INT NOT NULL PRIMARY KEY,
    Comment VARCHAR(100),
    CONSTRAINT fk_CommentParentId FOREIGN KEY (ParentID)
    REFERENCES Parent (ParentID) ON DELETE CASCADE
)
这称为1对1关系,因为外键的两端在其表中是唯一的


虽然我不得不同意米奇·麦特的评论,但级联删除是需要谨慎使用的。通过指定cascade delete,可以告诉数据库引擎在删除父记录时删除相关记录。如果您试图删除被另一个表引用的记录,没有该级联删除选项只会抛出一个错误。作为开发人员,这迫使您考虑从父表中删除行的副作用,基本上起到“您确定要删除吗?”的作用,以防止不必要的删除。

您将行添加到父表中,捕获ID,然后使用该ID插入到1-1表中。级联删除在我看来很少是个好主意。通过前端代码更好地控制删除您向父级添加一行,捕获ID,然后使用该ID插入到1-1表中。级联删除在我看来很少是个好主意。通过前端代码更好地控制删除是的,使用级联删除很容易产生“oopsies”+汉克斯·佐哈尔!我真的很感激。如果字段名相同,那么澄清一下就可以了?我刚刚看到另一条线索,有人说这可能导致issues@mcgi906这根本不是问题,因为每一列都是不同表的成员。唯一需要记住的是,当使用联接从两个表中进行选择时,您需要使用别名来区分不同的列(在这种情况下这不是问题,因为FK列上始终只有重复的名称…@MitchWheat我有史以来最大的“oopsie”:shift删除生产数据库的最后一次备份,从旧服务器上删除后,在将其恢复到新服务器之前,我的老板坐在我旁边的椅子上。我身上什么都没有:-)@MitchWheat是的,那是一个可怕的时刻。为我辩护,当时是凌晨2点,我从早上7点就在办公室,幸运的是,我们有30分钟前的备份,所以我们只丢失了很少的数据。。。从好的方面来说,我再也不会移位删除:-)是的,使用级联删除太容易造成“oopsies”+汉克斯·佐哈尔!我真的很感激。如果字段名相同,那么澄清一下就可以了?我刚刚看到另一条线索,有人说这可能导致issues@mcgi906这根本不是问题,因为每一列都是不同表的成员。唯一需要记住的是,当使用联接从两个表中进行选择时,您需要使用别名来区分不同的列(在这种情况下这不是问题,因为FK列上始终只有重复的名称…@MitchWheat我有史以来最大的“oopsie”:shift删除生产数据库的最后一次备份,从旧服务器上删除后,在将其恢复到新服务器之前,我的老板坐在我旁边的椅子上。我身上什么都没有:-)@MitchWheat是的,那是一个可怕的时刻。为我辩护,当时是凌晨2点,我从早上7点就在办公室,幸运的是,我们有30分钟前的备份,所以我们只丢失了很少的数据。。。从好的方面来说,我再也不会移位删除:-)