我在PHP中工作。
请选择合适的方式将新记录插入到数据库中,该数据库具有唯一字段。我正在批量插入许多记录,我只希望插入新的记录,并且不希望重复的条目出现任何错误。
是否只有在SELECT没有返回任何记录的情况下,才能先进行SELECT操作并查看条目是否已经存在于INSERT之前?我真希望不是这样。
我想以某种方式告诉MySQL忽略这些插入,没有任何错误。
谢谢
发布于 2009-05-01 17:54:44
如果您不想在存在重复记录时执行任何操作,则可以使用INSERT... IGNORE语法。
如果您想用具有相同键的新记录覆盖旧记录,可以使用REPLACE INTO语法。
或者,如果您希望在遇到重复项时对记录执行更新,则可以使用INSERT... ON DUPLICATE KEY UPDATE语法。
编辑:我想添加一些示例。
示例
假设您有一个名为tbl
的表,其中有两列:id
和value
。有一个条目id=1和value=1。如果运行以下语句:
REPLACE INTO tbl VALUES(1,50);
你还有一张记录,是id=1 value=50。请注意,整个记录首先被删除,然后重新插入。然后:
INSERT IGNORE INTO tbl VALUES (1,10);
操作成功执行,但未插入任何内容。你还有id=1和value=50。最后:
INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;
您现在只有一条包含id=1和value=200的记录。
发布于 2009-05-01 17:52:11
您可以使用EXISTS条件确保不插入重复信息。
例如,如果您有一个名为clients的表,其主键为client_id,则可以使用以下语句:
INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);
此语句使用subselect插入多个记录。
如果要插入单个记录,可以使用以下语句:
INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);
使用dual表允许您在select语句中输入值,即使这些值当前未存储在表中。
发布于 2009-05-01 17:50:19
您可以使用triggers。
https://stackoverflow.com/questions/812437
复制相似问题