MySQL插入,每个相同的id递增列值

时间:2016-08-14 13:01:52

标签: mysql

我有这张表relations

ID    Name    Parent   Pos
================================
1     Alex       1      1
2     Mary       1      2
3     John       1      3
4     Doe        2      1
5     Bob        2      2
6     Kate       2      3

在我执行insert查询之前,我选择Parent ID并获取最后Pos位置,然后按1递增。

$data = $DB2->query("SELECT * FROM relations 
            WHERE Parent='1' ORDER BY `Pos` DESC LIMIT 1");

            $results = $data->result_array();

            foreach($results as $row) {
                $pos = $row['Pos'];  //last position

            }


$pos = $pos + 1;
    $DB2->query("INSERT IGNORE INTO relations (Name,Parent,Pos) VALUES('test',1,'$pos')");

有没有办法可以自动增加每个Pos列的Parent列?或者我目前的方式效率最高?

1 个答案:

答案 0 :(得分:1)

如果您不担心竞争条件(同时发生两次插入),那么您可以在一个声明中执行此操作:

INSERT IGNORE INTO relations (Name, Parent, Pos) 
    SELECT 'test', 1, MAX(pos) + 1
    FROM relations
    WHERE Parent = 1;

但是,我肯定会建议您在(Parent, Pos)上添加唯一索引,并删除IGNORE - 如果发生错误,您想了解它。

您可以使用触发器进行分配,从而使此更安全。您还可以锁定表,以便在特定插入期间不会发生其他插入。这是一项昂贵的操作,如果交易负载很重,可能会降低系统速度。