简介

  • sqlite3 常用技巧

设置唯一列 约束

在 SQLite3 中,可以通过添加 UNIQUE 约束来设置唯一列,确保列中的值在表中是唯一的。这意味着您不能在该列中插入重复的值。

以下是在 SQLite3 中设置唯一列的方法:

1
2
3
4
5
CREATE TABLE table_name (
  column1 data_type UNIQUE,
  column2 data_type,
  ...
);

在上述示例中,column1 被设置为唯一列。如果在 column1 中插入一个已经存在的值,SQLite3 将会抛出一个错误并拒绝插入。

需要注意的是,唯一约束可以应用于单个列,也可以应用于多个列。如果将多个列一起设置为唯一约束,这些列的组合值在表中将是唯一的。

例如,将多个列设置为唯一:

1
2
3
4
5
6
CREATE TABLE table_name (
  column1 data_type,
  column2 data_type,
  ...
  UNIQUE(column1, column2)
);

在上述示例中,column1column2 的组合值将是唯一的。

另外,如果您想在已有的表中添加唯一约束,可以使用 ALTER TABLE 命令。

1
2
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1);

请注意,在添加唯一约束之前,您需要确保列中的数据没有重复值,否则会导致添加约束失败。

总的来说,通过添加 UNIQUE 约束,可以在 SQLite3 中设置唯一列,确保表中的特定列的值是唯一的,避免插入重复的数据。

设置主键和自增

在 SQLite3 中,设置主键和自增可以通过以下方式实现:

设置主键:

在 SQLite3 中,主键可以通过在列定义中添加 PRIMARY KEY 约束来设置。

1
2
3
4
5
CREATE TABLE table_name (
  column1 data_type PRIMARY KEY,
  column2 data_type,
  ...
);

在上述示例中,column1 被设置为主键。

设置自增:

在 SQLite3 中,可以使用 INTEGER 数据类型和 AUTOINCREMENT 关键字来设置自增列。自增列在插入数据时会自动递增,确保数据的唯一性。

1
2
3
4
5
6
CREATE TABLE table_name (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  column1 data_type,
  column2 data_type,
  ...
);

在上述示例中,id 列被设置为自增列,并作为主键。需要注意的是,AUTOINCREMENT 关键字只适用于主键列,且如果列设置为自增,插入数据时不需要为该列提供值,数据库会自动为其生成递增的值。

请注意,在 SQLite3 中,如果不显式地指定主键和自增列,SQLite3 会默认为每个表创建一个名为 “rowid” 的隐藏列,它将作为主键并自动递增。因此,如果不特别需要指定主键名称,可以直接使用默认的 “rowid” 列。

总之,以上就是在 SQLite3 中设置主键和自增的方法。根据您的需求,可以选择显式地指定主键和自增列的名称,也可以使用默认的 “rowid” 列来满足自增的需求。

  • 示例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    algorithm       camera          task            user            warning_record
    sqlite> CREATE TABLE event_subscribers (id INT AUTO_INCREMENT PRIMARY KEY,  name TEXT, address TEXT, appKeyId TEXT, appKeySecret TEXT);
    sqlite> .schema event_subscribers 
    CREATE TABLE event_subscribers (id INT AUTO_INCREMENT PRIMARY KEY,  name TEXT, address TEXT, appKeyId TEXT, appKeySecret TEXT);
    sqlite> insert into event_subscribers (name, address, appKeyId, appKeyScret) values ("aaa", "http://helloworld.cn", "bbb", "ccc");
    Parse error: table event_subscribers has no column named appKeyScret
    sqlite>  insert into event_subscribers (name, address, appKeyId, appKeySecret) values ("aaa", "http://helloworld.cn", "bbb", "ccc");
    sqlite> select * from event_subscribers;
    |aaa|http://helloworld.cn|bbb|ccc
    sqlite> insert into event_subscribers (name, address, appKeyId, appKeySecret) values ("aaa", "http://helloworld.cn", "bbb", "ccc");
    sqlite> select * from event_subscribers;
    |aaa|http://helloworld.cn|bbb|ccc
    |aaa|http://helloworld.cn|bbb|ccc
    sqlite> drop event_subscribers;
    Parse error: near "event_subscribers": syntax error
    drop event_subscribers;
         ^--- error here
    sqlite> drop table event_subscribers;
    sqlite> CREATE TABLE event_subscribers (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, address TEXT, appKeyId TEXT, appKeySecret TEXT);
    sqlite> insert into event_subscribers (name, address, appKeyId, appKeySecret) values ("aaa", "http://helloworld.cn", "bbb", "ccc");
    sqlite> select * from event_subscribers;
    1|aaa|http://helloworld.cn|bbb|ccc
    sqlite> insert into event_subscribers (name, address, appKeyId, appKeySecret) values ("aaa", "http://helloworld.cn", "bbb", "ccc");
    sqlite> select * from event_subscribers;
    1|aaa|http://helloworld.cn|bbb|ccc
    2|aaa|http://helloworld.cn|bbb|ccc
    sqlite>