MySQL外键设置

时间:2016-01-25 13:04:57

标签: mysql database foreign-keys foreign-key-relationship

新手到dba,我正在开发一个简单的库存数据库。这将列出设备,品牌,型号和状态(活动/非活动/丢失)项目。

我正在使用MySQL Workbench,PhpMyAdmin,XAMPP,PHP,MySQL来完成这个项目。

我不确定我是否正确接近这个,希望有人可以给我一些建议。

到目前为止,我有两张表 - itemsstatus

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表中看到,有两个有效项,还有一个无效项。

在前端应用程序中,表格将列出所有具有相应状态的项目(如下文所示)。

+--------+-------+------+-----------+--------+
| itemId | invNo | make | model     | status  |
+--------+-------+------+-----------+--------+
| 1      | 123   | HP   | 566       | Active  |
+--------+-------+------+-----------+--------+
| 2      | 432   | Dell | Precision | Active  |
+--------+-------+------+-----------+--------+
| 3      | 456   | Dell | Precision | Inactive|
+--------+-------+------+-----------+--------+

理想情况下,我希望能够在status表中更改状态类型,并相应地更新items

  • 一个项目只能有一个状态
  • 可以将一个statusType分配给多个项目

我是否需要使用外键关系?

这里的任何帮助或指示都会很棒。我想开始走上正轨!

2 个答案:

答案 0 :(得分:1)

您的设置正确无误。在状态表中,statusId是主键,在items表中,状态是外键。这意味着它是一个引用另一个表中主键的值。

要添加约束,您可以执行以下操作:

ALTER TABLE items ADD FOREIGN KEY (status) REFERENCES status(statusId);

答案 1 :(得分:1)

您可以在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