Есть ли автоматическое приращение в sqlite?



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



например:



CREATE TABLE people (id integer primary key auto increment, first_name varchar(20), last_name varchar(20));


затем, когда я добавляю значение, я надеялся только сделать:



INSERT INTO people
VALUES ("John", "Smith");


это вообще возможно?



Я sqlite3 под cygwin в Windows 7.

2448   8  

8 ответов:

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

Если вы включаете столбец типа INTEGER PRIMARY KEY, этот столбец указывает на (является псевдонимом) автоматический столбец ROWID.

ROWID (каким бы именем вы его ни называли) присваивается значение всякий раз, когда вы вставляете строку, как и следовало ожидать. Если вы явно назначите ненулевое значение при вставке, оно получит указанное значение вместо автоматического приращения. Если вы явно назначьте значение NULL при вставке, он получит следующее значение автоматического приращения.

кроме того, вы должны стараться избегать:

 INSERT INTO people VALUES ("John", "Smith");

и использовать

 INSERT INTO people (first_name, last_name) VALUES ("John", "Smith");

вместо. Первая версия очень хрупкая - если вы когда-либо добавляете, перемещаете или удаляете столбцы в своем определении таблицы, вставка либо завершится ошибкой, либо приведет к неправильным данным (со значениями в неправильных столбцах).

Да, это возможно. Согласно SQLite FAQ:

столбец объявлен INTEGER PRIMARY KEY будет автоувеличение.

вы это читали? Как создать поле автоинкремента.

INSERT INTO people
VALUES (NULL, "John", "Smith");

на сегодняшний день - июнь 2018


вот что официальная документация SQLite должен сказать по этому вопросу (жирный и курсив мой):

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

  2. в SQLite, столбец с типом целое число Первичный ключ-это псевдоним для ROWID (за исключением без таблиц ROWID), которая всегда является 64-разрядной подписью целое число.

  3. на вставке,если столбец первичного ключа ROWID или INTEGER не явно задано значение, то оно будет заполнено автоматически с неиспользуемое целое число, обычно один больше, чем самый большой ROWID в настоящее время в использовать. это верно независимо от того, является ли автоинкремент используется ключевое слово.

  4. Если автоинкремент ключевое слово после того, как целое число первичный ключ, что изменяет автоматический алгоритм назначения ROWID на предотвратить повторное использование идентификаторов строк за время существования базы данных. другими словами, цель автоинкремента-предотвратить повторное использование ROWIDs ранее удаленные строки.

SQLite AUTOINCREMENT-это ключевое слово, используемое для автоматического увеличения значения поля в таблице. Мы можем автоматически увеличивать значение поля с помощью ключевого слова AUTOINCREMENT при создании таблицы с определенным именем столбца для автоматического увеличения его.

ключевое слово AUTOINCREMENT можно использовать только с целочисленным полем. Синтаксис:

основное использование ключевого слова AUTOINCREMENT выглядит следующим образом:

создать таблицу имя_таблицы( столбец1 целое АВТОУВЕЛИЧЕНИЕ, столбец2 тип данных, тип столбец3 , ..... тип данных columnN, );

Например, См. Ниже: Рассмотрим таблицу компаний, которая будет создана следующим образом:

sqlite> создать таблицу TB_COMPANY_INFO( ИДЕНТИФИКАТОР ЦЕЛОЕ ЧИСЛО ПЕРВИЧНЫЙ КЛЮЧ АВТОИНКРЕМЕНТ, НАЗВАНИЕ ТЕКСТА НЕ NULL, ВОЗРАСТ INT НЕ NULL, АДРЕС CHAR (50), ЗАРПЛАТА РЕАЛЬНАЯ );

теперь вставьте следующие записи в таблицу TB_COMPANY_INFO:

ВСТАВИТЬ В TB_COMPANY_INFO (ИМЯ, ВОЗРАСТ, АДРЕС, ЗАРПЛАТА) Ценности ('MANOJ KUMAR', 40, 'Meerut, UP, INDIA', 200000.00 );

Теперь выберите запись ВЫБЕРИТЕ *ИЗ TB_COMPANY_INFO ID ИМЯ ВОЗРАСТ АДРЕС ЗАРПЛАТА 1 Manoj Kumar 40 Meerut, UP, Индия 200000.00

не нужно указывать AUTOINCREMENT ключевое слово возле PRIMARY KEY. Пример создания первичного ключа autoincrement и вставки:

$ sqlite3 ex1

CREATE TABLE IF NOT EXISTS room(room_id INTEGER PRIMARY KEY, name VARCHAR(25) NOT NULL, home_id VARCHAR(25) NOT NULL);

INSERT INTO room(name, home_id) VALUES ('test', 'home id test');

INSERT INTO room(name, home_id) VALUES ('test 2', 'home id test 2');

SELECT * FROM room;

даст:

1|test|home id test
2|test 2|home id test 2

рядом с rowid вы можете определить свое собственное поле автоматического приращения, но это не рекомендуется. Это всегда будет лучшим решением, когда мы используем rowid, который автоматически увеличивается.

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

читать здесь для получения подробной информации.

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

сейчас, оглядываясь на свой запрос, это должно быть что-то вроде этого.

CREATE TABLE people (id integer primary key autoincrement, first_name varchar(20), last_name varchar(20));

Он работает на моем конце. Вот так,

enter image description here

на всякий случай, если вы работаете с SQLite, я предлагаю вам проверить браузер БД для SQLite. Работает на разных платформах.

Comments

    Ничего не найдено.