使用以下代码创建新数据库表时,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);
?>
答案 0 :(得分:3)
根据文件:
SERIAL
是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
的别名。
因此,您的声明是:
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE PRIMARY KEY
因此,您将获得UNIQUE
的索引和PRIMARY KEY
的索引。
简单的解决方案是不使用&#34;缩写&#34;并明确你想要的东西:
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY