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

时间:2014-07-26 14:49:58

标签: php mysqli

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

  1. 这是否正确使MySql表的id以0开头?如果是这样,那将是最简单的选择

  2. 如果没有,我可以让数组以1开头吗?

  3. 第三个选项是创建一个列来存储订单。当用户创建新项目时,这会产生新问题。由于MySql不接受2个自动增量列。

  4. $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");
    }
    

2 个答案:

答案 0 :(得分:1)

这是否正确使MySql表的id以0开头? -

如果没有,我可以让数组以1开头吗? -

由于MySql不接受2个自动增量列。 - 您应该更改数据库设计,以便可以将主要/外来数据联系起来。

现在我不知道你的具体要求是什么,但你应该将数据分成两个不同的表,两个表中都有一个公共列,它们将作为两者之间的主键/外键。


如果要从1开始使用数组ID而不是

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

Demo

答案 1 :(得分:1)

如果我说得对,你显然想要将两个完全不同的用途用于同一列:

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

虽然可能会这样做,但恕我直言,这令人困惑,难以维持。从设计的角度来看,最好只使用两列。它更干净,并且当您需要设置不同的订单时,它不会强制您更新所有链接表中的键。

关于AUTO_INCREMENT功能,它是一种旨在生成唯一递增无意义数字的机制。它主要是为surrogate keys设计的,它不允许像重用值那样简单。

您的其他问题:

  

这是否正确使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));
}

// ...