避免重复输入增加

时间:2014-04-07 00:18:09

标签: mysql vb.net

我有一个包含3列的表,即数字(自动增量),名称(varchar),id(int)。问题是当我做INSERT IGNORE INTO table1 (name, id) SELECT name, id FROM table2 WHERE id = someid并忽略时,增量仍然会增加。有没有办法在忽略条目时如何防止增量(当然是重复的)。

2 个答案:

答案 0 :(得分:2)

MySQL确定您的语句将插入多少行。然后它预先预先分配自动增量值。这可以防止多个并发语句交错自动增量值。

如果分配了一个号码,则无法再次使用。这就是你的auto_increment值之间存在差距的原因。

你应该重写你的查询,这样它就不一定要依赖auto_increment值。依赖auto_increment值绝不是一个好主意。

或者执行以下操作:

从版本5.1开始,InnoDB具有可配置的自动增量锁定功能。

innodb_autoinc_lock_mode=0  (“traditional” lock mode) 
  

此锁定模式提供与以前相同的行为   innodb_autoinc_lock_mode存在。对于所有“INSERT-like”语句,a   获得特殊的表级AUTO-INC锁并保持到最后   该声明。这确保了由...指定的自动增量值   任何给定的陈述都是连续的。

Configurable InnoDB Auto-Increment Locking

在MySQL运行时无法更改innodb_autoinc_lock_mode。

您必须将其设置为服务器启动选项

--innodb_autoinc_lock_mode=0

或在配置文件(my.ini)

innodb_autoinc_lock_mode=0

InnoDB Startup Options and System Variables

答案 1 :(得分:0)

我已将表格引擎更改为MyISAM并在我的选项文件中将concurrent_insert设置为NEVER,从而解决了我的问题。

希望它有所帮助...