我正在体验我的第一个mysql INSERT 测试,我正在使用这些表:
table employees
-> employee_id
-> employee_name
-> employee_surname
-> employee_url
table areas
-> area_id
-> area_city
-> area_address
-> area_country
table agencies
-> agency_id
-> agency_name
-> agency_url
table node_employees
-> node_id
-> employee_id
-> area_id
-> agency_id
我会将数据存储在 table_employee , table_areas 和 table_agency 中,但我不会被迫同时保存所有数据,所以我可以创建一名员工,随后创建一个代理机构或地址。
在单数据插入的情况下,我应该使用这样的东西还是shoud我直接使用表 node_employees ,如果是,我该怎么办?
INSERT INTO employees (employee_name, employee_surname, employee_url)
VALUES ('Roger', 'Waters', 'http://pinkfloyd.com')
INSERT INTO agencies (agency_name, agency_url)
VALUES ('Google', 'http://google.com')
INSERT INTO areas (area_city, area_address, area_country)
VALUES ('Rome', 'Via Roma, 123', 'Italy')
要相互链接我创建的 node_employees ,一个关系表。 我用它来链接一个区域或代理商的员工,那么我应该怎么做才能将数据与这个关系表链接起来呢?
SELECT employee_id FROM employees WHERE employee_name = 'Roger'
SELECT agency_id FROM agencies WHERE agency_name = 'Google'
// I'll get their ids in php
$php_employee_id
$php_agency_id
// and then
INSERT INTO node_employees (employee_id, agency_id)
VALUES ('$php_employee_id', '$php_agency_id')
我还有另一个疑问,如果我需要将员工与某个区域联系起来该怎么办?我使用不同的查询,所以查询每种可能性?
// so, not this
$php_employee_id = 12;
$php_agency_id = 7;
$php_area_id = null;
INSERT INTO node_employees (employee_id, agency_id, area_id)
VALUES ('$php_employee_id', '$php_agency_id', '$php_area_id') // will this remove the previous data with null in area_id?
答案 0 :(得分:1)
我假设代理商和地区是一对多的关系。换句话说,每个员工都可以分配到多个代理商和地区。如果没有,那么我只需将agency_id和area_id字段添加到employees表中,甚至不创建node_employees表。
考虑到上述情况......
根据您提供的说明,代理机构和区域似乎是相对静态的。因此,应在输入员工数据之前设置它们。
然后在插入员工时使用mysql_insert_id()返回刚刚创建的记录的id。 (我假设employee_id是一个自动增量字段)
然后按照你说的那样做
SELECT agency_id FROM agencies WHERE agency_name = 'Google'
// I'll get their ids in php
$php_employee_id <== from mysql_insert_id() after inserting employee record
$php_agency_id <== from above agency Select
// and then
INSERT INTO node_employees (employee_id, agency_id)
VALUES ('$php_employee_id', '$php_agency_id')
用于您的上一次查询
INSERT语句添加一条新记录,它不会替换现有记录。如果现有记录具有唯一索引,例如'employee_id',则它将失败并显示错误。您需要使用UPDATE来执行该操作或使用REPLACE语句更新记录(如果存在)或INSERT(如果记录不存在)。请确保您阅读它,因为它通过唯一索引工作。
DC
答案 1 :(得分:0)
为了相互链接行,我创建了node_employees,一个关系表。我用它来链接一个区域或代理商的员工,那么我应该怎么做才能将数据与这个关系表链接起来呢?
这应该是两个表 - 一个用于将员工与代理商联系,另一个用于将员工与区域相关联。你没有提到任何与代理商相关的领域,给人的印象是他们彼此独立......
无论如何,node_employees.employee_id
应该是EMPLOYEES.employee_id
的外键,以确保员工必须已作为系统中的有效值存在。同样地,对于agency_id
和node_employees
表之间的agencies
。
由于这些关系,EMPLOYEES
和AGENCIES
表中的值必须存在于NODE_EMPLOYEES
表中之前。这使得NODE_EMPLOYEES
表与其他两个表处于“子”关系,因此您的三个INSERT语句必须在子项之前插入父项,并使用子项中父项的值。