在执行INSERT
包含多行的语句时,我想跳过重复的条目,否则它们会导致失败。经过研究后,我的选择似乎是使用以下任一方法:
ON DUPLICATE KEY UPDATE
这意味着要付出一定代价进行不必要的更新,或者 INSERT IGNORE
这暗示了其他类型的失败的邀请。 这些假设对吗?跳过可能导致重复的行并继续其他行的最佳方法是什么?
我建议使用INSERT...ON DUPLICATE KEY UPDATE
。
如果使用INSERT IGNORE
,那么如果该行导致重复键,则实际上不会插入该行。但是该语句不会产生错误。而是生成警告。这些情况包括:
PRIMARY KEY
或UNIQUE
约束的列中插入重复的键。 NOT NULL
约束的列中。如果使用REPLACE
,MySQL实际上会在内部执行,DELETE
然后执行INSERT
内部操作,这会产生一些意外的副作用:
REPLACE
。DELETE
不需要执行。修正: 既REPLACE
和INSERT...ON DUPLICATE KEY UPDATE
是非标准的,私有的发明具体到MySQL。ANSI
SQL 2003定义了MERGE
可以满足相同需求(甚至更多)的MERGE
语句,但是MySQL不支持该语句。
一位用户尝试编辑此帖子(主持人拒绝了该编辑)。修改尝试添加一个声明,该声明INSERT...ON DUPLICATE KEY UPDATE
导致分配了新的自动递增ID。确实会 生成 新的id ,但是更改后的行中不会使用它。
请参见下面的演示,该演示已通过Percona Server 5.5.28测试。配置变量innodb_autoinc_lock_mode=1
(默认):
mysql> create table foo (id serial primary key, u int, unique key (u));
mysql> insert into foo (u) values (10);
mysql> select * from foo;
+----+------+
| id | u |
+----+------+
| 1 | 10 |
+----+------+
mysql> show create table foo\G
CREATE TABLE `foo` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`u` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `u` (`u`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
mysql> insert into foo (u) values (10) on duplicate key update u = 20;
mysql> select * from foo;
+----+------+
| id | u |
+----+------+
| 1 | 20 |
+----+------+
mysql> show create table foo\G
CREATE TABLE `foo` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`u` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `u` (`u`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
上面的示例表明IODKU语句检测到重复项,并调用更新以更改的值u
。请注意,AUTO_INCREMENT=3
表示已生成ID,但未在行中使用。
而REPLACE
确实会删除原始行并插入新行,从而生成 并 存储新的自动增量ID:
mysql> select * from foo;
+----+------+
| id | u |
+----+------+
| 1 | 20 |
+----+------+
mysql> replace into foo (u) values (20);
mysql> select * from foo;
+----+------+
| id | u |
+----+------+
| 3 | 20 |
+----+------+
本文向大家介绍C ++ STL中的Emplace与Insert,包括了C ++ STL中的Emplace与Insert的使用技巧和注意事项,需要的朋友参考一下 插入操作避免了不必要的对象复制,并且比插入操作更有效地进行了插入。插入操作引用一个对象。 算法 范例程式码 输出结果
本文向大家介绍python append、extend与insert的区别,包括了python append、extend与insert的区别的使用技巧和注意事项,需要的朋友参考一下 最近在自学Python语言,看到向列表增加更多数据时被append(),extend(),insert()方法绕晕了。 append 和extend都只需要一个参数,并且自动添加到数组末尾,如果需要添加多个,可用数组
Attribute Name Type Required Default Description name string Yes n/a The name of the insert function (insert_name) assign string No n/a The name of the template variable the output will be assigned to
此函数沿给定轴和给定索引之前在输入数组中插入值。 如果将值的类型转换为插入,则它与输入数组不同。 插入没有到位,函数返回一个新数组。 此外,如果未提及轴,则输入数组变平。 insert()函数采用以下参数 - numpy.insert(arr, obj, values, axis) Where, Sr.No. 参数和描述 1 arr 输入数组 2 obj 要进行插入的索引 3 values 要插
问题内容: 我有一个带有列-ID,Property,Property_Value的SQL Server表RealEstate。该表大约有5到1千万行,并且将来还会增加。我只想在此表中不存在Id,Property,Property_Value的组合时插入行。 示例表- 不允许插入。但是,还可以。我很好奇,知道这样做的“最佳”方法和 原因 。为什么这部分对我来说最重要。两种检查方法是- 在应用程序级别
我们可以使用DB facade使用insert方法插入记录。 insert方法的语法如下表所示。 Syntax bool insert(string $ query,array $ bindings = array()) Parameters $ query(string) - 在数据库中执行的查询 $ bindings(array) - 要与查询绑定的值 Returns bool Descrip