mysql表的id可以以0开头吗?


Can the id of a mysql table start with 0?

我有一个数组,它给了我一个表中不同概念的顺序。因为它是一个数组,所以它以0开头。我有不同的选项来存储概念的顺序。我的问题是:

  1. 让MySql表的id从0开始是正确的吗?如果是这样,这将是最简单的选择

  2. 如果不是,我可以让数组从1开始吗?

  3. 第三种选择是创建一个仅用于存储订单的列。当用户创建一个新项目时,这会产生一个新问题。

$order = $_GET['order'];
print_r ($order); // this gives: Array ( [0] => first [1] => second [2] => third )
foreach($order as $key => $value) {
    mysqli_query($con,"UPDATE principal 
                       SET concept = $value
                       WHERE id = $key");
}

如果我理解正确的话,您显然希望将同一列用于两个完全不同的目的:

  • 唯一标识行
  • 存储其显示顺序

虽然这可能是可以做到的,但在我看来,这是令人困惑的,很难维护。从设计的角度来看,最好使用两列。它更简洁,并且当您需要设置不同的顺序时,它不会强制您更新所有链接表中的键。

关于AUTO_INCREMENT特性,它是一种机制,旨在生成唯一的递增无意义的数字。它主要是为代理键设计的,它不允许像重用值这样简单的事情。

你的其他问题:

让一个MySql表的id从0开始是正确的吗?

这没有什么错(我实际上现在这样做,然后),但MySQL有一个功能,使它很难做到:NO_AUTO_VALUE_ON_ZERO

如果不是,我可以让数组从1开始吗?

如果你输入数组:

$foo = array(1 => 'a', 'b', 'c', 'd');

如果你已经有了:

foreach($order as $key => $value) {
    mysqli_query($con,"UPDATE principal 
        SET concept = $value
        WHERE id = " . ($key+1));
}
$key = 0;
foreach($order as $value) {
    $key++;
    mysqli_query($con,"UPDATE principal 
        SET concept = $value
        WHERE id = $key");
}
foreach(array_values($order) as $key => $value) {
    mysqli_query($con,"UPDATE principal 
        SET concept = $value
        WHERE id = " . ($key+1));
}
// ...

让MySql表的id从0开始是正确的吗? - NO

如果不是,我可以让数组从1开始吗? - YES

MySql不接受2个自增列。 -你应该改变你的数据库设计,以便你可以关联主/外部数据。

现在我不知道你的确切要求是什么,但是你应该把数据分成两个不同的表,在两个表中有一个共同的列,作为两个表之间的主键/外键。


如果你想从1开始一个数组id,使用

<?php
    $arr = array("a","b","c");
    array_unshift($arr,"");
    unset($arr[0]);
    print_r($arr);