【问题标题】:INSERT ... ON DUPLICATE KEY UPDATE Inserts Wrong OrderINSERT ... ON DUPLICATE KEY UPDATE 插入错误的顺序
【发布时间】:2012-12-25 00:16:40
【问题描述】:

我正在尝试插入和更新数据。问题是它没有像我想象的那样插入。

foreach($urls as $key => $value)
    {
        $mysqli->query("INSERT INTO urls (url_id,parent_id,url) VALUES ('$key','$parent_id','$value') ON DUPLICATE KEY UPDATE url = '$value'");
    }   

表格应如下所示:

url_id   |   parent_id   |   url
1        |   1           |   http://cnn.com
2        |   1           |   http://msn.com
3        |   1           |   http://amazon.com

它最终看起来像:

url_id   |   parent_id   |   url
1        |   1           |   http://cnn.com
3        |   1           |   http://amazon.com
2        |   1           |   http://msn.com

如果插入另一行,它会在上面:

3        |   1           |   http://amazon.com

我知道SQL没有顺序,但是查询为什么会这样插入。

【问题讨论】:

  • SQL 中的表没有定义任何顺序,因此从字面上看,您不能以“错误的顺序”插入。
  • 好的,但我想知道为什么它会这样插入。
  • 嗯,这完全取决于实现。正如@AndreKR 所说,您想在查询数据时使用order by ;)

标签: php sql


【解决方案1】:

MySQL 表中没有固有的顺序。从中选择时使用ORDER BY url_id

【讨论】:

  • 谢谢。我知道我可以在选择时使用 ORDER BY。我一直在练习查询一段时间,但从未遇到过以这种方式插入的查询。它始终是 1,2,3,4 的顺序;从不 1,4,3,2。我只是想知道这是否有原因。
  • 你试过TRUNCATE TABLE不是DELETE FROM!)吗?通常在第一次之后它以线性顺序插入,直到表文件再次碎片化。
猜你喜欢
  • 2010-10-07
  • 1970-01-01
  • 2018-06-27
  • 2013-10-03
  • 2015-07-30
  • 2014-06-05
  • 1970-01-01
  • 2011-01-29
  • 2017-04-24
相关资源
最近更新 更多