MySQL интеллектуальное значение по умолчанию - PullRequest
0 голосов
/ 01 августа 2011

Я добавляю материал в таблицу MySQL, и у каждого элемента есть position, который отображается в моей системе как номер вопроса.

Я мог бы узнать, что самое большое position, прежде чем добавить новый вопрос, +1 его, а затем добавить его, но мне было интересно, есть ли более разумный способ, который не требует второго запроса.

Что-то вроде INSERT INTO questions (id, position) values (0, MAX(position)).

Это поле не является первичным ключом, auto_increment не имеет смысла в этой ситуации.

Я не могу использовать position в качестве ключа, потому что ключ относится ко многим другим вещам, и position можно изменить в любое время.

Я довольно уверенный автор запросов MySQL, поэтому, пожалуйста, не предлагайте никаких предложений, кроме заданного вопроса - я знаю множество альтернатив, это всего лишь вопрос синтаксиса.

Я уверен, что вы меня поняли!

Приветствие.

Ответы [ 4 ]

0 голосов
/ 02 августа 2011

Кажется, нет способа установить значение по умолчанию для конкретного расчета.

0 голосов
/ 01 августа 2011

Лучшим способом было бы изменить свойства поля в MySQL, то есть позволить MySql выполнять работу без предоставления ввода.

TABLE <code>TableName CHANGE position position INT (11) NOT NULL AUTO_INCREMENT

Теперь при вставке не указывайте никаких значений для этого поля.

INSERT INTO questions (var1, var2) values (val1,val2)

MySQL автоматически увеличит значение позиции.Вы можете установить текущий счетчик, а также сбросить при необходимости.Таким образом, у вас вообще нет никаких карьеров.

0 голосов
/ 01 августа 2011

что-то вроде этого должно работать

INSERT INTO questions (id, position) SELECT 0, MAX(position)+1 FROM questions;

Очевидно, вам нужно будет обработать значение 0, как при установке его для чего-то подходящего, я просто скопировал это значение из вашего примера.

Вы также можете создать хранимую процедуру для использования в запросе или даже иметь триггер, который определяет МАКС (положение), добавляет его и сохраняет его во вновь созданной строке.

Там довольно много вариантов,Я бы пошел на вышеупомянутое решение, хотя (с индексом на позиции)

0 голосов
/ 01 августа 2011

Использовать auto_increment , как это делает большинство других людей?

Это разумный способ, поскольку он безопасен для параллелизма.

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