Добавить префикс в поле sqlite auto_increment - PullRequest
0 голосов
/ 01 июля 2019

Есть ли способ добавить префикс в поле автоинкремента в sqlite, чтобы при добавлении новых записей значение автоинкремента содержало префикс?

Ответы [ 2 ]

2 голосов
/ 01 июля 2019

Есть ли способ добавить префикс в поле автоинкремента в sqlite, чтобы при добавлении новых записей значение автоинкремента содержало префикс?

Нет .

  • Такой столбец является специальным столбцом, который является псевдонимом столбца rowid .Такой столбец ДОЛЖЕН быть целочисленным значением.

  • Предполагается, что такой столбец действительно предназначен для уникальной идентификации строки.


НО .....

Однако было бы возможно всегда возвращать значение с префиксом, например, используя

SELECT 'prefix'||mycolumn FROM mytable;

Рабочий пример

: -

DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (mycolumn INTEGER PRIMARY KEY, myothercolumn TEXT);
INSERT INTO mytable (myothercolumn) VALUES('Fred'),('Mary'),('Jane'),('andsoon');
SELECT 'myprefix'||mycolumn, myothercolumn FROM mytable;
  • Обратите внимание, что нет необходимости в ключевом слове AUTOINCREMENT, которое только накладывает ограничение, но неэффективно AUTOINCREMENT

Результат

enter image description here

Подражая тому, что вы хотите

Можно было бы скопировать то, что вы хотите, например: -

DROP TRIGGER IF EXISTS mytable2manager;
DROP TABLE IF EXISTS mytable2;
CREATE TABLE IF NOT EXISTS mytable2 (mycolumn TEXT, myothercolumn TEXT);
CREATE TRIGGER IF NOT EXISTS mytable2manager AFTER INSERT ON mytable2 BEGIN
    UPDATE mytable2 SET mycolumn = 'myprefix'||(SELECT count() FROM mytable2) WHERE rowid = new.rowid;
END;
INSERT INTO mytable2 (myothercolumn) VALUES('Fred'),('Mary'),('Jane'),('andsoon');
SELECT * FROM mytable2;
  • Это создает таблицу вместе с TRIGGER, а затем вставляет те же данные, что и выше.
  • TRIGGER действует при каждой вставке строки, и в этом случае он имитирует автоматическую генерацию SQLite для rowidЗначение имеет префикс значения
    • , которое может альтернативно использовать SET mycolumn = 'myprefix'||rowid
    • Без TRIGGER myстолбец будет нулевым

Результат

enter image description here

Дополнительно

Вы можетедаже у TRIGGER в способе имитации применяются разные префиксы.В следующем примере используется другой префикс, когда значение в myothercolumn начинается с M

: -

DROP TRIGGER IF EXISTS mytable2manager;
DROP TABLE IF EXISTS mytable2;
CREATE TABLE IF NOT EXISTS mytable2 (mycolumn TEXT, myothercolumn TEXT);
CREATE TRIGGER IF NOT EXISTS mytable2manager AFTER INSERT ON mytable2 BEGIN
    UPDATE mytable2 SET mycolumn = CASE WHEN substr(new.myothercolumn,1,1) = 'M' THEN 'myprefix' ELSE 'myotherprefix' END||(SELECT count() FROM mytable2) WHERE rowid = new.rowid;
        -- UPDATE mytable2 SET mycolumn = 'myprefix'||rowid WHERE rowid = new.rowid;
END;
INSERT INTO mytable2 (myothercolumn) VALUES('Fred'),('Mary'),('Jane'),('andsoon');
SELECT * FROM mytable2; 

Результат

enter image description here

0 голосов
/ 01 июля 2019

Самый простой способ, вероятно, заключается в использовании представления:

create view v_t as
    select ('prefix' || id) as new_id, t.*
    from t;
...