我正在寻找将数据插入多个 MySQL 表的最佳实践方法,其中某些列是外键依赖项。这是一个例子:
Table: contacts
--------------------------------------------------------------------
| contact_id | first_name | last_name | prof_id | zip_code |
--------------------------------------------------------------------
“联系人”表有主键(contact_id),它只是自动增量,还有外键(prof_id)引用“职业”表,外键(zip_code)引用“zip_code”表。这些表看起来像这样:
Table: profession
----------------------------
| prof_id | profession |
----------------------------
其中 'prof_id' 是 INT NOT NULL AUTO_INCRMENT PRIMARY KEY,并且
Table: zip_code
--------------------------------
| zip_code | city | state |
--------------------------------
其中“zip_code”是一个 INT(5) NOT NULL 主键。
我想为一个新人添加记录,比方说:
first_name = 'John', last_name = 'Doe', profession = 'Network Administrator', city = 'Sometown', state = 'NY', zip_code = 12345
这就是我想要做的:我想获取该信息并将其插入到适当的表和列中。为了防止列中出现重复值(例如职业),我首先要确保还没有“网络管理员”条目,如果有,我只想获取其键值,如果不是插入它然后获取它的键值。对于 zip_code、城市、州也是如此 - 如果存在,则只需使用该 zip_code 键,否则插入新数据并获取关联的键。最后,我想使用提供的信息将新联系人输入到“联系人”表,包括其他表中与职业和位置相关的适当键值。
我的问题是,最好的推荐方法是什么?我知道我可以坐在这里编写单个语句来检查给定的职业是否存在,如果不存在则输入它,然后获取密钥。对 zip_code 执行相同的操作。然后最后将所有这些插入到联系人中,但是我知道必须有一种更好的方法可以用更少(也许是一个)语句来完成此操作,特别是考虑到如果数据库在中间暂时离线,这可能会导致问题所有这一切。有没有一种方法可以将 JOIN 与此 INSERT 结合使用,从而使所有内容基本上级联到正确的位置?我应该用 TRANSACTION 系列语句来处理这个问题吗?
我正处于 SQL 的学习阶段,但我觉得到目前为止我使用的书籍和资源已经在假设我们已经填充了所有这些数据表的情况下跳转到使用嵌套查询和 JOINS。我什至愿意接受有关我应该通过谷歌搜索来更好地学习这一点的建议,或者任何可以帮助填补这一空白的资源。理想情况下,我希望看到一些有效的 SQL 代码来执行此操作。如果有必要,假设 PHP 作为与数据库交互的语言,但命令行 sql 是我的目标。提前谢谢,希望我把一切都说清楚了。