gpt4 book ai didi

php - MySQL - 设置外键以请求正确数据的新手

转载 作者:行者123 更新时间:2023-11-29 22:38:41 25 4
gpt4 key购买 nike

在使用外键时遇到一些问题,我是 MySQL 新手,所以请原谅。我不知道如何做我想做的事。
我有 4 张 table :

  • 用户
  • 任务
  • 周(包括周数和开始日期)。

我想要做的是,引用每个表来提取正确的数据。

E.G. pseudo code:
find user liam, find select day associated with liam, find the task associated with the selected day, find the week from the selected day.

这应该允许我筛选数据。

以下是表格:

+------------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-----------------+------+-----+---------+----------------+
| user_id | int(1) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(255) | NO | UNI | NULL | |
| password | varchar(255) | NO | | NULL | |
| first_name | varchar(255) | NO | | NULL | |
| last_name | varchar(255) | NO | | NULL | |
| email | varchar(255) | NO | UNI | NULL | |
+------------+-----------------+------+-----+---------+----------------+

+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| day_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| day | varchar(255) | NO | | NULL | |
| user-id-fk | int(10) unsigned | NO | | NULL | |
+------------+------------------+------+-----+---------+----------------+

+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| am_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| am_task | varchar(255) | NO | | NULL | |
| description | varchar(255) | NO | | NULL | |
| am_color | varchar(20) | YES | | NULL | |
+-------------+------------------+------+-----+---------+----------------+

+---------+-----------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-----------------+------+-----+------------+----------------+
| week_id | int(2) unsigned | NO | MUL | NULL | auto_increment |
| week | varchar(255) | NO | | NULL | |
| date | date | NO | | 2014-12-29 | |
+---------+-----------------+------+-----+------------+----------------+

因此,首先我知道我必须引用前两个表,这就是为什么我创建了一个名为“user-id-fk”的字段。我尝试在 phpMyAdmin 内部创建外键:http://tinypic.com/r/mkar20/8

但不确定它是否正常工作或者我是否正确创建了它。正如我已经说过的,我是 MySQL 的新手,所以即使我正确创建了它,我也不知道如何测试?如果需要,我可以添加更多数据。

最佳答案

请注意,外键只是确保 SQL 中数据结构可靠的方法。从技术上讲,它们对于跨两个或多个表查询数据来说并不是必需的,只要您拥有两个表之间共有的键即可。

使用外键可以更轻松地确保您从受控列表中正确选择项目。但是,由于它们是好主意,因为它们可以确保数据库的完整性,因此测试它们的最简单方法是将这些键设置为 RESTRICT 并测试从具有外键的表中添加记录引用的表上不存在的限制 它应该提供错误。

例如,给出您的示例之一:

+------------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-----------------+------+-----+---------+----------------+
| user_id | int(1) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(255) | NO | UNI | NULL | |
| password | varchar(255) | NO | | NULL | |
| first_name | varchar(255) | NO | | NULL | |
| last_name | varchar(255) | NO | | NULL | |
| email | varchar(255) | NO | UNI | NULL | |
+------------+-----------------+------+-----+---------+----------------+

+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| day_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| day | varchar(255) | NO | | NULL | |
| user-id-fk | int(10) unsigned | NO | | NULL | |
+------------+------------------+------+-----+---------+----------------+

如果 user-id-fk 是第二个表上的外键,引用第一个表上的 user_id,并且您将其设置为 restrict,如果不在第一个表中输入相同的 user_id,您将无法将任何记录添加到 user-id-fk 中。

假设第一个表上的 user_id 仅输入值 1、2 或 3。如果您尝试在第二个表中输入行4,它应该会出错,因为第一个表上没有引用的键。

注意:

您为这些表创建了不同大小的整数,因此在输入 10 人后可能会遇到问题。我建议将 user_id 上的整数大小设置为大于 1。

关于php - MySQL - 设置外键以请求正确数据的新手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29457552/

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