INSERT IF COUNT()= 0

时间:2012-02-06 11:58:50

标签: mysql insert

以下MySQL语法正常工作:

SELECT 
  IF (
    (SELECT COUNT(id) FROM preorder) = 0,
    1,
    (SELECT MAX(id) + 1 FROM preorder)
  ) AS X

这给了我一个值,我想在表中预先插入。如果我试试

INSERT INTO preorder (id) 
VALUES
  (SELECT 
    IF (
      (SELECT COUNT(id) FROM preorder) = 0,
      1,
      (SELECT MAX(id) + 1 FROM preorder)
    ) AS X)

它不再起作用了。 MySQL只是告诉我阅读这些内容: - )

语法的目的是能够创建自己的自动增量字段。如果计数为零,我想插入1,如果计数不为零,我想插入id列的最大值。

编辑: 我设法使用以下语法:

INSERT INTO preorder (id) 
VALUES
  (
    IF (
      (SELECT COUNT(id) FROM preorder AS Y) = 0,
      1,
      (SELECT MAX(id) + 1 FROM preorder AS X)
    )
  )

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

首先:您不能INSERT进入用于子查询中SELECT的表格。

第二:即使它会在系统上起作用,它也不会起作用:你有一个巨大的竞争条件,如果有两个这样的查询并行

第三:MySQL AUTO_INCREMENT完全正确 - 你有没有看过它?