如何在Sqlite中指定主键

如何在Sqlite中指定主键,sqlite,primary-key,Sqlite,Primary Key,如何在student表中将StudentId等指定属性定义为sqlite中的主键 CREATE TABLE Student( id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT ); 从Sqlite规范: 有一个例外是 SQLite是类型为的列 整数主键。(您必须使用 “整数”不是“INT”。类型为 INT主键是无类型的,就像 任何其他整数主键 列必须包含32位带符号的 整数。任何试图插入 非整数数据将导致 错误 您还

如何在student表中将StudentId等指定属性定义为sqlite中的主键

CREATE TABLE Student(
  id INTEGER PRIMARY KEY,
  first_name TEXT, 
  last_name TEXT
);
从Sqlite规范:

有一个例外是 SQLite是类型为的列 整数主键。(您必须使用 “整数”不是“INT”。类型为 INT主键是无类型的,就像 任何其他整数主键 列必须包含32位带符号的 整数。任何试图插入 非整数数据将导致 错误

您还可以在任意blobish数据上放置主键,例如:

CREATE TABLE Student(id PRIMARY KEY, name)
这有点冒险

INSERT INTO Student(1, "hello") 
INSERT INTO Student("1", "hello") 
将生成两行

如果需要对其他内容进行唯一约束,可以尝试使用命令


这是一种简单的方法。

请注意,您必须在CREATETABLE语句中执行此操作。SQLite无法更改ALTER TABLE语句中的约束。@Sinan:让我休息一下。首先,在SQLite中,PK不能是整数以外的任何东西。其次,有一个约定是将有意义的数据从行ID中分离出来。因此,您应该为学生ID添加一个额外的列,而不是使用PK。最后,假设OP的模式并不比回答者好。写一个新的答案,但你无权记下它。@Ic:“你不能有PK,因为SQLite中没有整数”是非常错误的——你当然可以有一个文本PK(当然不能是自动递增的);你从哪里得到这个想法的?@Alex,注意VARCHAR和TEXT在Sqlite中是完全可交换的。varchar(80)的限制是没有意义的,Sqlite会忽略它。@Sam,当然--“一切都是一个字符串”无论如何在Sqlite中(除了主键有效地为整数的约束)--我仍然喜欢仔细地编写模式类型,这样在MySQL、PostgreSQL等中编写模式时就不会出错!-)
CREATE TABLE Students (
  StudentId INTEGER PRIMARY KEY,
  Name VARCHAR(80)
)