在使用以下代码创建新的数据库表时,phpMyAdmin会报告一个冗余索引,如this post中所述。有没有办法避免这种行为,并且在创建表时只生成一个索引?我可以用ALTER TABLE mytest DROP INDEX id;删除第二个索引,但也许有一个更好的解决方案?
<?php
$sql = "CREATE TABLE IF NOT EXISTS `mytest` (
`id` SERIAL PRIMARY KEY,
`mytext` TEXT
) CHARSET=utf8";
mysqli_query($mysqli, $sql);
$sql = "SHOW INDEX FROM `mytest`";
if ($res = mysqli_query($mysqli, $sql)) {
while ($ds = mysqli_fetch_array($res)) {
echo "<pre>";
print_r($ds);
echo "</pre>";
}
} else echo mysqli_error($mysqli);
?>发布于 2014-12-26 21:33:39
根据文档:
SERIAL是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的别名。
因此,您的声明是:
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE PRIMARY KEY因此,您将获得一个UNIQUE的索引和一个PRIMARY KEY的索引。
简单的解决方案是不使用“缩写”,并且清楚地知道你想要什么:
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEYhttps://stackoverflow.com/questions/27657798
复制相似问题