问题:
主键字段是'ID'
使用命令将数据插入/更新到其中REPLACE INTO
,这很容易使用,但不幸的是增加了'ID'
它正在替换的 Record 的值。
所以我需要一种完全重建ID
领域的方法,以便:
| ID | Name |
|===============
| 21 | deer |
| 8 | snow |
| 3 | tracks |
| 14 | arrow |
前往:
| ID | Name |
|===============
| 1 | deer |
| 2 | snow |
| 3 | tracks |
| 4 | arrow |
我需要通过 php 来完成。
当前尝试:
<?php
$reset = "SET @num := 0;
UPDATE `users` SET `ID` = @num := (@num+1);
ALTER TABLE `users` AUTO_INCREMENT =1;";
$con = mysql_connect("mysql2.000webhost.com","db_user","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("db_name", $con);
if (!mysql_query($reset,$con))
{
die('<h1>Nope:</h1>' . mysql_error());
}
mysql_close($con);
?>
并尝试:
$reset = "ALTER TABLE `users` DROP `ID`;
ALTER TABLE `users` AUTO_INCREMENT = 1;
ALTER TABLE `users` ADD `ID` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;`";
也没有结果。
这一切的陌生感
我尝试的两个$reset
命令都在 MySQL 中完美执行,但由于某种原因,它们无法从 PHP 中正确执行。
回答
正如答案所指出的那样,每个连接都会保留@变量,因此运行多个查询是完全合理的:
///Trigger multiple queries
$nope = '<h1>Nope:</h1> ';
$res1 = "SET @num := 0;";
$res2 = "UPDATE `users` SET `ID` = @num := (@num+1);";
$res3 = "ALTER TABLE `users` AUTO_INCREMENT =1;";
if (!mysql_query($res1,$con)) die($nope . mysql_error());
if (!mysql_query($res2,$con)) die($nope . mysql_error());
if (!mysql_query($res3,$con)) die($nope . mysql_error());
mysql_close($con);