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

Я пытаюсь создать таблицу с автоматически увеличивающим первичный ключ в 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.

Ответ 1

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

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

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

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

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

и используйте

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

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

Ответ 2

Да, это возможно. Согласно документам SQLite, "Столбец, объявленный INTEGER PRIMARY KEY, будет автоинкремент". (http://www.sqlite.org/autoinc.html)

Ответ 4

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

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

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

CREATE TABLE имя_таблицы (  column1 INTEGER AUTOINCREMENT,  column2 тип данных,  column3,  .....  columnN тип данных, );

Пример см. ниже: Рассмотрим таблицу КОМПАНИИ, которая будет создана следующим образом:

sqlite > CREATE TABLE TB_COMPANY_INFO (  ID INTEGER PRIMARY KEY AUTOINCREMENT,  NAME TEXT NOT NULL,  AGE INT NOT NULL,  АДРЕС CHAR (50),  SALARY REAL );

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

INSERT INTO TB_COMPANY_INFO (ИМЯ, ВОЗРАСТ, АДРЕС, ОТОБРАЖЕНИЕ) ЦЕННОСТИ ('MANOJ KUMAR', 40, 'Meerut, UP, INDIA', 200000.00);

Теперь выберите запись SELECT * FROM TB_COMPANY_INFO ИДЕНТИФИКАТОР НАЗВАНИЯ АДРЕС АДРЕС 1 Маной Кумар 40 Меерут, ВВЕРХ, ИНДИЯ 200000.00

Ответ 5

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

$ 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

Ответ 6

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

"Ключевое слово AUTOINCREMENT накладывает дополнительные ресурсы ЦП, память, дисковое пространство и служебные данные ввода-вывода на диске, и их следует избегать, если это не требуется строго. Обычно это не требуется".

Подробнее читайте здесь.

Ответ 7

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

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

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

Это работает на моем конце. Таким образом,

введите описание изображения здесь

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