如何在mysql中更新子表

时间:2016-02-25 02:24:35

标签: mysql

我这里有一个示例表。

事件表

+-------------+----------------------+
| incident_id | incident_description |
+-------------+----------------------+
|           1 | Accident             |
|           2 | Homicide             |
|           3 | Theft                |
+-------------+----------------------+

incident_detail表:

+--------------------+-------------+-------------+
| incident_detail_id | person_name | incident_id |
+--------------------+-------------+-------------+
|                  1 | errol       |           1 |
|                  2 | neo         |           1 |
|                  3 | aj          |           1 |
|                  4 | mark        |           2 | 
|                  5 | calma       |           2 | 
|                  6 | allan       |           2 |  
|                  7 | dave        |           3 |  
|                  8 | paul        |           3 | 
+--------------------+-------------+-------------+

我提供了一个类似于视图的网格视图,允许用户删除和添加incident_detail表中的项目。我的问题是,如何更新incident_detail表?我可以添加新项目,但删除。我不知道。我应该清空整个表并插入用户添加的新项目。但问题是,未删除的现有项目将被删除并再次插入。

1 个答案:

答案 0 :(得分:0)

如果您不关心incident_detail_id列的增量超出其需要,您可以简单地删除并重新插入记录,无论您是否更改了事件的详细信息。

它使SQL代码更容易,但它确实意味着每次编辑时你的ID都会上升。假设你是自动递增的。

Homicide添加详细信息后,您最终会得到:

+--------------------+-------------+-------------+
| incident_detail_id | person_name | incident_id |
+--------------------+-------------+-------------+
|                  1 | errol       |           1 |
|                  2 | neo         |           1 |
|                  3 | aj          |           1 |
|                  9 | mark        |           2 | 
|                 10 | calma       |           2 | 
|                 11 | allan       |           2 |  
|                 12 | new         |           2 |  
|                  7 | dave        |           3 |  
|                  8 | paul        |           3 | 
+--------------------+-------------+-------------+

如果你对此感到满意:

DELETE FROM incident_detail WHERE incident_id = 2;

INSERT INTO incident_detail (person_name, incident_id)
VALUES
    ('mark', 2)
    ('calma', 2)
    ('allan', 2)
    ('new', 2);