【发布时间】:2014-04-22 15:00:32
【问题描述】:
所以我在登录时使用 ON DUPLICATE KEY UPDATE - 我在每次登录时都使用它,因为我从外部页面获取数据并且用户只能在那里更新他们的设置。那是因为该页面上的软件缺少 api。
实际上我正在使用这个查询来更新他们的设置。如果该帐户未在我的数据库中列出,则会在成功时使用其凭据创建。
我的问题是,如果用户未在我的数据库中列出并将他们插入其中,则他们的 id(自动增量)不是 1、2、3、4 等等。它从 32 开始,然后到 54,然后是 185,依此类推。 ID 升得如此之快。这是我的查询中的问题还是实际上是一个错误?
这是我的问题
mysqli_query($database, " INSERT INTO `benutzer` (`id`, `login`, `vorname`, `nachname`, `gruppen`, `email`, `adresse`, `telefon`, `telefon2`, `telefon3`, `bemerkungen`)
VALUES (NULL, '".$userdata[0]."', '".$userdata[1]."', '".$userdata[2]."', '".implode(";", $gruppen)."', '".$userdata[3]."', '".$userdata[4]."', '".$userdata[5]."', '".$userdata[6]."', '".$userdata[7]."', '".$userdata[8]."')
ON DUPLICATE KEY UPDATE `vorname` = '".$userdata[1]."', `nachname` = '".$userdata[2]."', `gruppen` = '".implode(";", $gruppen)."', `email` = '".$userdata[3]."', `adresse` = '".$userdata[4]."', `telefon` = '".$userdata[5]."', `telefon2` = '".$userdata[6]."', `telefon3` = '".$userdata[7]."', `bemerkungen` = '".$userdata[8]."'") or die(mysql_error());
这是表格的结构
CREATE TABLE IF NOT EXISTS `benutzer` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(32) NOT NULL,
`vorname` text NOT NULL,
`nachname` text NOT NULL,
`gruppen` text NOT NULL,
`email` text NOT NULL,
`adresse` text NOT NULL,
`telefon` text NOT NULL,
`telefon2` text NOT NULL,
`telefon3` text NOT NULL,
`bemerkungen` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `login` (`login`),
KEY `login_2` (`login`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ;
提前致谢
【问题讨论】:
-
如果您不使用 ON DUPLICATE KEY UPDATE,您是否观察到相同的行为?了解您是否已明确将范围缩小到该功能可能会很有用。
-
另外,您能否发出
SHOW VARIABLES LIKE 'auto_increment_increment'并检查它报告的值为1 -
@Hammerite,不,如果我首先检查是否有使用该用户名的登录名,如果没有,则执行单个查询,它可以完美运行。所以当我使用两个查询时它可以工作。 “auto_increment_increment”为 1
-
login列上有两个键。您可以删除 login_2 索引。