Как вставить строки в SQLite, используя значения по умолчанию? - PullRequest
0 голосов
/ 04 ноября 2019

Обновление:

Вот что я узнал из ответов ниже ...

SQLite поддерживает определение значений по умолчанию для столбцов. Однако он не поддерживает какую-либо форму ключевого слова DEFAULT или функцию в запросах. Таким образом, фактически невозможно выполнить массовую вставку в стиле MySQL, когда столбец задан явно в некоторых строках, а столбец по умолчанию используется в других строках.

Ниже перечислены несколько творческих обходных путей,но для простоты я больше всего предпочитаю предложение Шона использовать оператор INSERT для каждой строки, возможно, все это заключено в оператор BEGIN TRANSACTION. Только это позволит вам использовать значения по умолчанию для столбцов.


Исходный вопрос:

У меня есть простая таблица SQLite с именем todo с этой схемой ...

schema

Я могу вставить строки в эту таблицу с помощью этого синтаксиса ...

INSERT INTO 'todo' ('title', 'complete', 'notes') VALUES
  ('Pickup dry cleaning', true, 'They close at 7pm'),
  ('Clean apartment', false, 'Floors have already been swept'),
  ('Finish homework', true, 'Chapters 3 and 4');

Однако

Я не могу понять, как опустить определенные значения и позволить базе данных использовать значение по умолчанию для этого столбца.

Например, столбец complete имеет значение по умолчанию 0,Было бы неплохо иметь возможность передать undefined в качестве одного из значений в моем запросе, таким образом сигнализируя SQLite, что я хотел бы использовать любой столбец по умолчанию, но я получаю ошибку Result: no such column: undefined, когда я пытаюсь это сделать.

null также не будет работать в этом случае, потому что иногда вы хотите явно установить значение ячейки в null. Вы не можете просто пропустить значение, потому что параметры позиционные.

Ответы [ 3 ]

0 голосов
/ 04 ноября 2019

То, что сказал Шон, плюс массовая проблема может быть решена с помощью значения DEFAULT , то есть, если вы вставляете все записи вручную, если вы хотите, чтобы это динамически проходило через цикл, например, вы должны объявить переменную по умолчаниюи измените на конкретное значение, если оно существует, и используйте эту переменную в запросе.

String var='DEFAULT';
if (Value exists) {var=Value;}

sql=inset into x(x,y,z) values (a,b,var);
0 голосов
/ 04 ноября 2019

Я не могу понять, как опустить определенные значения и позволить базе данных использовать значение по умолчанию для этого столбца.

На момент написания этой статьи SQLite не поддерживает default(_)функции, но вы можете использовать триггеры для достижения желаемого эффекта, хотя это немного громоздко.

Вот пример:

CREATE TRIGGER IF NOT EXISTS onnull
AFTER INSERT ON mytable
FOR EACH ROW
WHEN NEW.column = 'undefined'
BEGIN
    UPDATE mytable 
    SET column = 'mydefault' ;
END;
0 голосов
/ 04 ноября 2019

Вы просто оставляете это из вставляемых столбцов:

INSERT INTO todo(title, notes) VALUES ('Music practice', 'Not Elvis');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...