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);
此语句使用子选择插入多个记录 .
如果要插入单个记录,可以使用以下语句:
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);
7 回答
如果要在重复记录时不执行任何操作,则可以使用INSERT... IGNORE语法 .
如果要使用具有相同键的新记录覆盖旧记录,则可以使用REPLACE INTO语法 .
或者,如果要在遇到重复时对记录执行更新,则可以使用INSERT... ON DUPLICATE KEY UPDATE语法 .
编辑:以为我会添加一些例子 .
例子
假设您有一个名为
tbl
的表,其中包含两列id
和value
. 有一个条目,id = 1和value = 1 . 如果您运行以下语句:您仍然有一条记录,id = 1 value = 50 . 请注意,整个记录首先是DELETED,然后重新插入 . 然后:
操作成功执行,但未插入任何内容 . 你仍然有id = 1和值= 50 . 最后:
您现在拥有一条id = 1且值= 200的记录 .
你可以使用triggers .
另请检查this introduction guide to triggers .
尝试创建一个重复的表,最好是一个临时表,没有唯一约束,并将批量加载到该表中 . 然后仅从临时表中选择唯一(DISTINCT)项并插入目标表 .
数据库架构是什么样的?
您可以为每个插入添加一个ID列auto increment,以保证唯一的行 .
问题:我正在与客户 Build 数据库 . 我知道您使用“insert”语句在数据库中插入信息,但是如何确保不再输入相同的客户端信息?
答:您可以确保不使用EXISTS条件插入重复信息 .
例如,如果您有一个名为clients的表,其主键为client_id,则可以使用以下语句:
此语句使用子选择插入多个记录 .
如果要插入单个记录,可以使用以下语句:
使用双表允许您在select语句中输入值,即使这些值当前未存储在表中 .
来自http://www.techonthenet.com/sql/insert.php