当我尝试在表格中插入(假设)30行时。
例如
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES(
'Pep E. LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA'
),
(
'M. Martian',
'42 Galaxy Way',
'New York',
'NY',
'11213',
'USA'
), ... ;
而且cust_name必须是唯一的。然后,我如何识别未能插入的记录,因为它们的cust_name已经存在?
有可能归还吗?
答案 0 :(得分:5)
您可以使用3种不同的策略来处理多次插入中的UNIQUE
索引或PRIMARY KEY
错误:
如果在IGNORE
语句中使用INSERT
关键字,则执行INSERT
语句时发生的错误将被视为警告,而其他行将被插入。
如果您在ON DUPLICATE KEY UPDATE
语句中指定了INSERT
关键字,并且插入的行会导致UNIQUE
索引或PRIMARY KEY
中的重复值,如您在语句中提到的那样执行旧行的UPDATE
,例如,您可以在特殊情况下向先前插入的客户名称添加“(旧)”。
如果您使用REPLACE
关键字而不是INSERT
,如果UNIQUE
索引或PRIMARY KEY
中的值重复,则之前插入的行将是删除后,将插入新行。
阅读更多内容:
http://dev.mysql.com/doc/refman/5.1/en/insert.html
祝你好运。
答案 1 :(得分:4)
如果没有在insert语句中标记IGNORE子句,我会希望在尝试插入重复项时命令失败。使用IGNORE子句,该语句返回一个信息字符串,报告记录,重复项和警告的数量。
有关详细信息,请查看
并在页面上搜索“Duplicates”。这将带您到达详细解释的地方。但是,无法以这种方式获取有关哪些行失败的信息,并且我不知道有任何其他方法可以实现此目的。 mysqlimport实用程序和LOAD DATA INFILE语句也没有这样的选项。
因此,如果我真的需要这样做,我会为它编写一个脚本。
答案 2 :(得分:3)
不了解您的要求,但拥有独特的客户名称并不是一个好主意
答案 3 :(得分:0)
据我所知,这是不可能的。
如果您使用其他语言插入数据,则可以一次插入一行并循环播放。通过这种方式,您可以轻松判断哪些行已失败。
答案 4 :(得分:0)
如果要在一个查询中插入多个记录,则无法轻松找出哪个记录无法添加。然而,您可以将此更改为30个语句,每个语句只插入一个记录,然后如果一个记录失效,您将立即得到它。
答案 5 :(得分:0)
我不确定你是否在那里使用虚拟数据,但是有任何理由,cust_name必须是唯一的,我可以理解ID密钥或其他东西,但肯定会有名称冲突的时候。电话簿中充满了欺骗条目,您是否可以在桌面上使用cust_id来代替识别?