MySQL 外键设置
MySQL foreign key setup
dba 新手,我正在处理一个简单的库存数据库。这将列出设备项目、品牌、型号和状态 (active/inactive/lost)。
我正在为这个项目使用 MySQL Workbench、PhpMyAdmin、XAMPP、PHP、MySQL。
我不确定我是否以正确的方式处理这个问题,希望有人能给我一些建议。
到目前为止我有两个 tables - items
和 status
.
items
+--------+-------+------+-----------+--------+
| itemId | invNo | make | model | status |
+--------+-------+------+-----------+--------+
| 1 | 123 | HP | 566 | 1 |
+--------+-------+------+-----------+--------+
| 2 | 432 | Dell | Precision | 1 |
+--------+-------+------+-----------+--------+
| 3 | 456 | Dell | Precision | 2 |
+--------+-------+------+-----------+--------+
status
+----------+------------+
| statusId | statusType |
+----------+------------+
| 1 | Active |
+----------+------------+
| 2 | Inactive |
+----------+------------+
| 3 | Lost |
+----------+------------+
(你可以看到上面我的items
table有两个Active项,一个Inactive 项).
在前端应用程序中,table 将列出所有项目及其相应的状态(如下文所示)。
+--------+-------+------+-----------+--------+
| itemId | invNo | make | model | status |
+--------+-------+------+-----------+--------+
| 1 | 123 | HP | 566 | Active |
+--------+-------+------+-----------+--------+
| 2 | 432 | Dell | Precision | Active |
+--------+-------+------+-----------+--------+
| 3 | 456 | Dell | Precision | Inactive|
+--------+-------+------+-----------+--------+
理想情况下,我希望能够更改我的 status
table 中的状态类型,并相应地更新我的 items
。
- 一个项目只能有一个状态
- 一个 statusType 可以分配给多个项目
我需要使用外键关系吗?
这里的任何帮助或指导都会很棒。我想在正确的轨道上开始!
您的设置是正确的。在状态 table 中,statusId 是主键,而在您的项目 table 中,状态是外键。这意味着它是一个引用另一个 table 中的主键的值。
要添加约束,您可以执行以下操作:
ALTER TABLE items ADD FOREIGN KEY (status) REFERENCES status(statusId);
您可以在 items.status 上添加一个外键:
ALTER TABLE items
ADD FOREIGN KEY (status)
REFERENCES status(statusid);
或者您可以添加:
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION
文档:https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html
dba 新手,我正在处理一个简单的库存数据库。这将列出设备项目、品牌、型号和状态 (active/inactive/lost)。
我正在为这个项目使用 MySQL Workbench、PhpMyAdmin、XAMPP、PHP、MySQL。
我不确定我是否以正确的方式处理这个问题,希望有人能给我一些建议。
到目前为止我有两个 tables - items
和 status
.
items
+--------+-------+------+-----------+--------+
| itemId | invNo | make | model | status |
+--------+-------+------+-----------+--------+
| 1 | 123 | HP | 566 | 1 |
+--------+-------+------+-----------+--------+
| 2 | 432 | Dell | Precision | 1 |
+--------+-------+------+-----------+--------+
| 3 | 456 | Dell | Precision | 2 |
+--------+-------+------+-----------+--------+
status
+----------+------------+
| statusId | statusType |
+----------+------------+
| 1 | Active |
+----------+------------+
| 2 | Inactive |
+----------+------------+
| 3 | Lost |
+----------+------------+
(你可以看到上面我的items
table有两个Active项,一个Inactive 项).
在前端应用程序中,table 将列出所有项目及其相应的状态(如下文所示)。
+--------+-------+------+-----------+--------+
| itemId | invNo | make | model | status |
+--------+-------+------+-----------+--------+
| 1 | 123 | HP | 566 | Active |
+--------+-------+------+-----------+--------+
| 2 | 432 | Dell | Precision | Active |
+--------+-------+------+-----------+--------+
| 3 | 456 | Dell | Precision | Inactive|
+--------+-------+------+-----------+--------+
理想情况下,我希望能够更改我的 status
table 中的状态类型,并相应地更新我的 items
。
- 一个项目只能有一个状态
- 一个 statusType 可以分配给多个项目
我需要使用外键关系吗?
这里的任何帮助或指导都会很棒。我想在正确的轨道上开始!
您的设置是正确的。在状态 table 中,statusId 是主键,而在您的项目 table 中,状态是外键。这意味着它是一个引用另一个 table 中的主键的值。
要添加约束,您可以执行以下操作:
ALTER TABLE items ADD FOREIGN KEY (status) REFERENCES status(statusId);
您可以在 items.status 上添加一个外键:
ALTER TABLE items
ADD FOREIGN KEY (status)
REFERENCES status(statusid);
或者您可以添加:
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION
文档:https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html