Ogu*_*nwu 3 php mysql sql insert
我想将Gmail中的记录导入表格,我不需要为每个帐户重复.
描述:
我有一个名为list的表,其定义如下:
id int(11),
account_id int(11),
email varchar(255),
phone varchar(30),
primary key(id),
FOREIGN KEY (account_id) REFERENCES accounts (id)
Run Code Online (Sandbox Code Playgroud)
此表包含不同帐户的记录,并且电子邮件可被视为对两个或多个帐户有效.这意味着电子邮件可以在表格中重复,但每个account_id只能显示一次.
我从Gmail导入了我的联系人(超过700个联系人,其他用户可能有更多).
挑战:
我可以选择运行两个查询(一个用于检查是否存在电子邮件或电话,第二个用于插入记录),每个记录在我的情况下是1,400个SQL查询,以便我能够插入所有导入的记录,确保每个记录都没有重复列表中的account_id.
我已经看了看MySQL的忽略和像类似的关键字重复键更新,但他们似乎并没有在这种情况下工作,我不能让电子邮件和电话列独一无二的,因为它们可以包含重复的内容.
插入这700条记录的最佳方法是什么,确保每个account_id不重复电子邮件和电话,而不必运行1,400个查询?
问题更新:
我不认为INSERT IGNORE可以在此处使用以下原因:
问题说明
我有两个办公室使用该表来存储他们的客户记录.有人可以成为两个办事处的客户.这意味着他的记录可以在表格中出现两次,但对于表格中的每个account_id只能出现一次.现在的挑战是在表中插入几条记录,确保每条account_id都不重复记录.
你想要实现的目标对我来说并不是很清楚,但它看起来非常像你只需要添加一些两列独特的约束.
email对于给定的一个必须是唯一的account_id:ALTER TABLE your_table ADD UNIQUE (account_id, email);
Run Code Online (Sandbox Code Playgroud)
phone number对于给定的一个必须是唯一的account_id:ALTER TABLE your_table ADD UNIQUE (account_id, phone);
Run Code Online (Sandbox Code Playgroud)
两个索引可能同时存在于您的表中.可能会引发"重复键违规"错误,并会触发插入IGNORE的ON DUPLICATE条款或条款.
话虽如此,您的结构中存在问题.您即将复制客户account_id与其业务往来的详细信息.
您应该有一个customers表格,其中包含您所有客户的联系方式(仅限于此),另一个accounts表格 - 您的"办公室",如果我理解正确 - 最后是一个关系表来模拟和之间的nn关系:customersaccounts
CREATE TABLE customers_accounts (
customer_id INT NOT NULL,
account_id INT NOT NULL,
PRIMARY KEY (customer_id, account_id),
FOREIGN KEY (customer_id) REFERENCES customers(id)
FOREIGN KEY (account_id) REFERENCES accounts(id)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
774 次 |
| 最近记录: |