- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用mysql workbench来设计数据库。我使用该工具在表之间制作漂亮的线条,这会自动为我添加外键。
这是我的 2 个创建语句:
CREATE TABLE IF NOT EXISTS `mydb`.`PROFILE` (
`user_id` INT NOT NULL,
`some_int` BIGINT NULL COMMENT 'an int',
PRIMARY KEY (`user_id`),
UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `mydb`.`USER_ACCOUNT` (
`user_id` INT NOT NULL AUTO_INCREMENT,
`field1` VARCHAR(100) NOT NULL,
`field2` CHAR(32) NOT NULL,
`PROFILE_user_id` INT NOT NULL,
PRIMARY KEY (`user_id`),
UNIQUE INDEX `email_address_UNIQUE` (`email_address` ASC),
INDEX `fk_USER_ACCOUNT_PROFILE1_idx` (`PROFILE_user_id` ASC),
CONSTRAINT `fk_USER_ACCOUNT_PROFILE1`
FOREIGN KEY (`PROFILE_user_id`)
REFERENCES `mydb`.`PROFILE` (`user_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
我无法插入一个而不遇到像 ERROR 1452: Cannot add or update a child row: a foreign key constraint fails
这样的事情- 我尝试先插入 child ,但似乎没有什么区别。
然后我想到,由于我绘制了 1:1 关系,因此该键必须意味着对于 PROFILE 中的每个条目,我在 USER_ACCOUNT 中都有一个条目 - 否则外键的意义何在?使用这个想法,我首先插入到子级中,然后使用相同的 user_id 为父级编写更新查询,更新不起作用。
所以我的第一个问题是,这个外键有什么意义?我知道表之间存在 1:1 关系,那么我应该强制执行吗?
其次,我该如何插入呢?我自己的外键不允许我插入数据。
谢谢,任何帮助都会很棒,我对数据库设计有点生疏。
最佳答案
首先,您不需要在 PRIMARY KEY
上使用 UNIQUE
索引,PRIMARY KEY
已经强制执行了这一点。
其次,从概念上讲,您已将外键添加到错误的表中,因为配置文件应该引用用户。这可能就是您的问题的根源。
我建议使用以下 DDL:
CREATE TABLE IF NOT EXISTS `mydb`.`USER_ACCOUNT` (
`user_id` INT NOT NULL AUTO_INCREMENT,
`field1` VARCHAR(100) NOT NULL,
`field2` CHAR(32) NOT NULL,
PRIMARY KEY (`user_id`),
UNIQUE INDEX `email_address_UNIQUE` (`email_address` ASC)
) ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `mydb`.`PROFILE` (
`user_id` INT NOT NULL,
`some_int` BIGINT NULL COMMENT 'an int',
PRIMARY KEY (`user_id`),
CONSTRAINT `fk_PROFILE_USER_ACCOUNT1`
FOREIGN KEY (`user_id`)
REFERENCES `mydb`.`USER_ACCOUNT` (`user_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
) ENGINE = InnoDB;
并将您的用户插入USER_ACCOUNT
,然后插入PROFILE
。
问。我应该强制执行外键吗?
A.几乎可以肯定,它可以防止您的数据陷入不一致的状态。可以添加具有已删除用户或不存在用户的配置文件。了解数据始终一致可以让查询、显示数据和调试变得更加容易,因为无需担心。
关于mysql - 外键,障碍多多有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24889070/
我正在尝试从标准输入中获取一行。据我所知,我们永远不应该使用gets的手册页中所说的gets: Never use gets(). Because it is impossible to tell w
很多问题SO和文章/书籍,例如https://mirrors.edge.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.201
我认为 Coffeescript 是一门很棒的语言!我正在寻找一些将静态分析添加到 Coffeescript 的项目/问题/功能。然而,经过一番搜索后,我发现 Coffeescript faq和 th
以下查询返回过去 12 个月(针对特定客户)每周的订单总量: SELECT DATEPART(year, orderDate) AS [year], DATEPART(month, or
我觉得这可能是一个错误,任何人都可以重现或看到我做事方式的一些错误。 我正在尝试将 GKPolygonObstacle 添加到 iOS 或 macOS Playground 中的 GKMeshGrap
我的 SKSpriteKit 应用程序中有一个单独的“Floor”类。当我第一次创建这个类时,我使用 在整个框架周围设置了一个屏障 self.physicsBody = SKPhysicsBody(e
我有我正在尝试建模的半连续数据(许多精确的零和连续的正结果)。我从 Zuur 和 Ieno 的 R 中零膨胀模型初学者指南中学到了大量关于零质量的建模数据,它区分了零膨胀 Gamma 模型和他们所描述
以下代码实现了一些无锁(且无原子!)的线程间通信,这些通信需要使用存储和加载内存屏障,但是C++ 11 release-acquire语义不适当,也不保证正确性。实际上,该算法暴露了对发布获取语义的某
我指的是在 https://developer.android.com/training/constraint-layout/index.html#constrain-to-a-barrier 上使用
我正在一个非常好的 IBM x 服务器(4 个 8 核 CPU)上运行一些模拟应用程序的 x64 版本。操作系统是 Linux - redhat 5.6 x64 内核。因此,此应用恰好在需要超过 2
我是一名优秀的程序员,十分优秀!