我有一个表,其中有几个ID列指向其他表。
我希望 只有 在将数据放入其中时,外键才能强制完整性。如果我稍后进行更新以填充该列,则它还应该检查约束。
(这可能取决于数据库服务器,我使用的是MySQL和InnoDB表类型)
我相信这是一个合理的期望,但是如果我错了,请纠正我。
是的,您只能在值不为NULL时强制执行约束。可以使用以下示例轻松测试它:
CREATE DATABASE t;
USE t;
CREATE TABLE parent (id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (id INT NULL,
parent_id INT NULL,
FOREIGN KEY (parent_id) REFERENCES parent(id)
) ENGINE=INNODB;
INSERT INTO child (id, parent_id) VALUES (1, NULL);
-- Query OK, 1 row affected (0.01 sec)
INSERT INTO child (id, parent_id) VALUES (2, 1);
-- ERROR 1452 (23000): Cannot add or update a child row: a foreign key
-- constraint fails (`t/child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY
-- (`parent_id`) REFERENCES `parent` (`id`))
第一次插入将通过,因为我们在中插入了NULL parent_id
。由于外键约束,第二次插入失败,因为我们试图插入parent
表中不存在的值。
我有两张桌子: 用户(用户名、密码) 配置文件(profileId,gender,dateofbirding,...) 目前我正在使用这种方法:每个Profile记录都有一个名为“userid”的字段作为外键,它链接到用户表。当用户注册时,他的配置文件记录将自动创建。 我对我朋友的建议感到困惑:将“userid”字段作为外部和主键,并删除“profileid”字段。哪种方法更好?
问题内容: 我目前正在为我们团队的项目设计数据库结构。我目前在脑海中有一个非常疑问的问题:能否将外键用作另一个表上的主键? 以下是我们系统的数据库设计表: 我想做的是,该表应包含学生用户和指导顾问用户的ID(应该是系统的登录凭据)和密码。简而言之,和表的主键也是表的外键。但我不确定是否允许。 另一个问题是:一个表中也存在,这需要一个(其为中表)和一个(这也是在)它的每个记录的。如果学生和辅导员的I
问题内容: 因此,今天早上我问了一个问题,我没有正确说出这句话,所以我得到了很多关于为什么将NULL与任何东西相比会赋予NULL / FALSE的回答。 我的实际问题是,数据库专家测试两列都可以为NULL的不等式的时间受尊敬的方式是什么?我的问题与这个问题完全相反。 要求如下,A和B为两列: a)如果A和B都为NULL,它们相等,则返回FALSE b)如果A和B都不为NULL,则返回A <> B
问题内容: 有没有一种方法可以使用SQL列出给定表的所有外键?我知道表名/架构,可以插入它。 问题答案: 您可以通过information_schema表来执行此操作。例如:
问题内容: 好吧,这是我的问题,我有3张桌子;地区,国家,州。国家可以在区域内部,州可以在区域内部。地区是食物链的顶端。 现在,我添加一个带有两列的Popular_areas表;region_id和Popular_place_id。是否可以将Popular_place_id用作国家 或 州的外键。我可能将不得不添加一个Popular_place_type列,以确定ID是否以任何一种方式描述一个国家
问题内容: 我拼凑了一个图片网站。基本模式是非常简单的MySQL,但是在尝试表示与图像相关联的可能的管理标志(“不合适”,“受版权保护”等)时遇到了一些麻烦。我目前的概念如下: (为了方便阅读而被截断;我发誓要搭配各种外键和索引) 在标志类型的查找表上是外键,并且您可以想象 应该 在上外键。现在的问题是,当第一次发出标志时,没有逻辑解析类型(我将其声明为的一种很好的用法)。但是,如果设置了值,则应