INSERT IF COUNT () = 0 - PullRequest
       1

INSERT IF COUNT () = 0

0 голосов
/ 06 февраля 2012

Следующий синтаксис 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, если счетчик не равен нулю.

Edit: Мне удалось заставить его работать со следующим синтаксисом:

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

Есть ли лучший способ?

1 Ответ

1 голос
/ 06 февраля 2012

Во-первых: вы не можете INSERT в таблицу, которую вы используете для SELECT в подзапросе.

Во-вторых: даже если бы это работало синтаксически, это не сработало бы функционально:У вас огромное состояние гонки, если 2 таких запроса идут параллельно

В-третьих: MySQLs AUTO_INCREMENT делает именно это - вы рассматривали это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...