主表中的Mysql自动插入记录(如果不存在)

时间:2016-07-20 07:34:32

标签: php mysql database triggers

如果在添加外键时记录不存在,是否可以自动将记录插入主表?

例如,假设这些表:   - 用户(身份证,姓名,年龄)   - 主题(id,name)   - post(userId,topicId,text,createdAt,updatedAt)

现在我从某个来源提取帖子并将记录保存在post表中。但有时返回的数据包含尚未在我的数据库中的userIdtopicId。因此,每当我必须检查是否存在usertopic记录时,如果不存在则保存。只有这样,我的post记录才有效并保存。

我希望能够保存post,即使其相关的usertopic不存在,并添加一个空行,其中这些表中包含的ID为已存储在post表格中。

示例:

当前用户表

+----+------+-----+
| id | name | age |
+----+------+-----+
| 15 | Paul | 26  |
+----+------+-----+
| 56 | John | 31  |
+----+------+-----+

当前主题表

+----+----------+
| id | name     |
+----+----------+
| 5  | Business |
+----+----------+
| 12 | General  |
+----+----------+

目前的帖子表:

+--------+---------+----------------+-------------+-------------+
| userId | topicId | text           | createdAt   | updatedAt   |
+--------+---------+----------------+-------------+-------------+
| 15     | 12      | blah blah blah | *timestamp* | *timestamp* |
+--------+---------+----------------+-------------+-------------+
| 56     | 5       | lorem ipsum... | *timestamp* | *timestamp* |
+--------+---------+----------------+-------------+-------------+

然后我从某些来源获取帖子,获取ID为72的用户在ID为2的主题中发布的新1 This is a new topic。源只返回id,并获取其余的详细信息对于用户,我应该向他们的api提出另一个请求。

后表:

+--------+---------+---------------------+-------------+-------------+
| userId | topicId | text                | createdAt   | updatedAt   |
+--------+---------+---------------------+-------------+-------------+
| 15     | 12      | blah blah blah      | *timestamp* | *timestamp* |
+--------+---------+---------------------+-------------+-------------+
| 56     | 5       | lorem ipsum...      | *timestamp* | *timestamp* |
+--------+---------+---------------------+-------------+-------------+
| 72     | 2       | This is a new topic | *timestamp* | *timestamp* |
+--------+---------+---------------------+-------------+-------------+

之后的用户表:

+----+------+-----+
| id | name | age |
+----+------+-----+
| 15 | Paul | 26  |
+----+------+-----+
| 56 | John | 31  |
+----+------+-----+
| 72 |      |     |
+----+------+-----+

后的主题表
+----+------------+
| id | name       |
+----+------------+
| 2  |            |
+----+------------+
| 5  | Business   |
+----+------------+
| 12 | General    |
+----+------------+

所以现在我有了这个,我可以向他们的api发出请求,为id为72的用户和id为2的话题的数据寻找数据。

1 个答案:

答案 0 :(得分:1)

人们对此可以有强烈的意见,我们可以恭敬地不同意。

参考评论说人们这样做(故意在表格中加载空白和空垃圾),如帖子Here中所见。

我说:

  

这个参考文献是一个人们不在乎的财团。写一个   帖子说人们想要听到什么,把棒棒糖放在他们的   嘴巴,不是一个体面的答案。事实上,它可以很漂亮   不负责任的。这个OP正在以错误的顺序做事。放东西   在一些临时表中,调用其他API,获取干净的东西,那   让我晚上睡得好。参照完整性具有意义。我们   不要扭曲它并且为了取悦他们而混淆每个人。

我们的一部分责任是以正确的顺序做正确的事情,以保持我们的数据清洁并支持参考完整性。并引导我们的同行走向相同而不是相反。 Prime指令的排序。