gpt4 book ai didi

sql - 如何创建一个表,其中一列是另一个表?

转载 作者:行者123 更新时间:2023-11-29 07:11:20 26 4
gpt4 key购买 nike

我是 mysql 的新手。我知道这是一个非常基本的问题,但我不知道如何:(?我的初步尝试:

CREATE TABLE Node(  
Id INT( 3 ),
Position VARCHAR( 12 ),
FoodTax INT( 2 ),
HasTreasureMap TINYINT( 1 ),
CurrentPlayer Player,
PRIMARY KEY( Id )
);

在本例中,“Player”是我要添加的另一个表。我该怎么做?

最佳答案

您不能在表内添加表,您所做的是添加一个外键引用,它基本上是另一个表的 ID(或任何主键是什么)并单独制作另一个表。

CREATE TABLE Node (  
Id INT( 3 ),
Position VARCHAR( 12 ),
FoodTax INT( 2 ),
HasTreasureMap TINYINT( 1 ),
CurrentPlayer INT( 3 ),
PRIMARY KEY( Id ),
INDEX ( CurrentPlayer )
);

CREATE TABLE Player (
Id INT( 3 ),
Name VARCHAR( 64 ),
PRIMARY KEY ( Id )
);

请注意,第一个表中的 INDEX( CurrentPlayer ) 不是必需的,除非您要加入表,或使用 CurrentPlayer 字段进行搜索或排序。

如果您使用的是 InnoDB 数据库引擎,那么您可以直接在 Node 表的定义中指定表之间关系的性质,如下所示。

CREATE TABLE Node (  
Id INT( 3 ),
Position VARCHAR( 12 ),
FoodTax INT( 2 ),
HasTreasureMap TINYINT( 1 ),
CurrentPlayer INT( 3 ),
PRIMARY KEY( Id ),
INDEX ( CurrentPlayer ),
FOREIGN KEY ( CurrentPlayer ) REFERENCES Player( Id )
ON UPDATE CASCADE
ON DELETE SET NULL
);

添加 FOREIGN KEY 会产生一些影响,它会添加一个 checkin ,这样您就无法在 Node 中为 CurrentPlayer 设置值> 已经不存在于 Player 表中的表,任何 INSERT/UPDATE 尝试都将失败。此外,ON UPDATEON DELETE 这两个选项告诉数据库,如果来自 Player 的记录被更新或删除,则自动执行操作通过 Node 表上的触发器ON UPDATE CASCADE 表示如果 Player 记录的 Id 更新为其他内容,它将级联Node 表,也更改该值。 ON DELETE SET NULL 表示如果从 Player 表中删除一条记录,则 Node 中相应的 CurrentPlayer 值应设置为 NULL

关于sql - 如何创建一个表,其中一列是另一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4280097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com