php – 在某些条件下在一列上使用MySQL IGNORE
我想将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) 此表包含不同帐户的记录,并且电子邮件可被视为对两个或多个帐户有效.这意味着电子邮件可以在表格中重复,但每个account_id只能显示一次. 我从Gmail导入了我的联系人(超过700个联系人,其他用户可能有更多). 挑战: 我可以选择运行两个查询(一个用于检查是否存在电子邮件或电话,第二个用于插入记录),每个记录在我的情况下是1,400个SQL查询,以便我能够插入所有导入的记录,确保每个记录都没有重复列表中的account_id. 我查看了MySQL IGNORE和类似的关键字,如ON DUPLICATE KEY UPDATE但它们似乎在这种情况下不起作用,因为我无法使电子邮件和电话列唯一,因为它们可能包含重复内容. 插入这700条记录的最佳方法是什么,确保每个account_id不重复电子邮件和电话,而不必运行1,400个查询? 问题更新: 我不认为INSERT IGNORE可以在此处使用以下原因: >我不能发电子邮件和电话独特的列 问题说明 我有两个办公室使用该表来存储他们的客户记录.有人可以成为两个办事处的客户.这意味着他的记录可以在表格中出现两次,但对于表格中的每个account_id只能出现一次. 解决方法
你想要实现的目标对我来说并不是很清楚,但它看起来非常像你只需要添加一些两列独特的约束.
>对于一个给定的account_id,电子邮件必须是唯一的: ALTER TABLE your_table ADD UNIQUE (account_id,email); >对于一个给定的account_id,电话号码必须是唯一的: ALTER TABLE your_table ADD UNIQUE (account_id,phone); 两个索引可能同时存在于您的表中.可能会引发“重复键冲突”错误,并会触发插入的IGNORE或ON DUPLICATE子句. 话虽如此,您的结构中存在问题.您即将复制客户与其共同使用的每个account_id的详细信息. 您应该有一个客户表,其中包含所有客户的联系详细信息(仅限于此),另一个帐户表 – 您的“办公室”,如果我理解正确 – 最后是一个关系表,用于在客户和帐户之间建模n-n relationship: 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) ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |