2009-07-09 2 views

ответ

14
CREATE TABLE Student(
    id INTEGER PRIMARY KEY, 
    first_name TEXT, 
    last_name TEXT 
); 

Из Sqlite спецификации:

одно исключение безличность SQLite - это столбец, тип которого INTEGER PRIMARY KEY. (И вы должны использовать «INTEGER», а не «INT». Столбец типа INT PRIMARY KEY безличен, как и любой другой.) Столбцы INTEGER PRIMARY KEY должны содержать 32-разрядное целое число . Любая попытка вставить нецелые данные приведет к ошибке .

http://www.sqlite.org/datatypes.html

Вы можете также поместить первичный ключ произвольного blobish данных, например:

CREATE TABLE Student(id PRIMARY KEY, name) 

его немного рискованное дело

INSERT INTO Student(1, "hello") 
INSERT INTO Student("1", "hello") 

приведет в два ряда.

Если вам нужно уникальное ограничение на других вещах, вы можете попробовать использовать команду Create Index

+0

Обратите внимание, что вы должны сделать это в инструкции CREATE TABLE. SQLite не может изменять ограничения в инструкции ALTER TABLE. –

+1

@ Синан: Дайте мне перерыв. Прежде всего, вы не можете иметь PK как нечто не целое в SQLite. Во-вторых, существует одна конвенция, в которой говорится о том, чтобы отделить значимые данные от идентификаторов строк. Поэтому вы должны добавить дополнительный столбец для идентификатора студента, а не использовать ПК. Наконец, вы предполагаете, что что-то о схеме OP не лучше, чем ответчик. Напишите новый ответ, но вы не имеете права отмечать это. –

+5

@Ic: «у вас не может быть PK, поскольку что-то не целое в SQLite» совершенно неверно - вы, конечно, можете иметь TEXT PK (конечно, это не может быть автоинкремент); откуда вы взяли эту идею? –

5
CREATE TABLE Students (
    StudentId INTEGER PRIMARY KEY, 
    Name VARCHAR(80) 
) 

один простой способ.

+0

@Sinan: Смотрите мой комментарий выше. Я также не вижу вашего лучшего предложения здесь ... –

+0

@Alex, note VARCHAR и TEXT полностью взаимозаменяемы в Sqlite. Предел varchar (80) бессмыслен и игнорируется Sqlite. –

+2

@Sam, конечно - «все строки» в любом случае в SQLite (за исключением того, что ограничение на первичный ключ полезно, будучи целым). Я по-прежнему предпочитаю писать свой тип схемы, поэтому я не собираюсь подниматься, когда я записывая их в MySQL, PostgreSQL и т. п. -) –

Смежные вопросы