我有这样的简单表格
CREATE TABLE `adverts` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`original_id` int(10) unsigned NOT NULL COMMENT 'Original project advert id',
`owner_id` int(10) unsigned NOT NULL,
`project_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `original_id` (`original_id`,`owner_id`,`project_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
当我尝试执行
时INSERT INTO `adverts` (`id`, `original_id`, `owner_id`, `project_id`) VALUES (NULL, '1', '1', '');
多次因违反唯一索引而出错,但问题是auto_increment仍然上升,因此我可以有一行id为1,第二行有(例如)id为100。
执行查询时我使用PHP
$query = 'INSERT INTO `adverts` (`original_id`, `owner_id`, `project_id`) VALUES (?, ?, ?);';
if ($stmt = $sql->prepare($query)) {
// integer, integer, integer
$stmt->bind_param('iii', $input['id'], $input['owner_id'], $projects[$input['project_name']]);
$stmt->execute();
switch ($stmt->errno) {
case 1062:
throw new \Exceptions\Persistence\UniqueConstraintViolationException;
break;
}
$result = $stmt->insert_id;
$stmt->close();
}