sqlite只存储唯一的项目

时间:2014-11-20 03:13:12

标签: sql bash sqlite

我想将我的SQLite数据库配置为无法存储重复的图像 在用户的图像表中。

PRAGMA foreign_keys = ON;
CREATE TABLE accounts (user VARCHAR PRIMARY KEY, password VARCHAR, ts TIMESTAMP);
CREATE TABLE images (user VARCHAR, image VARCHAR, FOREIGN KEY (user) REFERENCES accounts(user));

我一直在寻找一个选项来执行此操作,而不检查该项目是否已存在 但尚未发现一个。

例如,我目前看到与item1重复。我希望有item1和item2。

sqlite> SELECT * FROM images;
jon|item1
jon|item1
jon|item2

我从调用sqlite的shell脚本中将值插入数据库。

...
sqlite3 "$DB" "INSERT INTO images(user, image) values ('$USERNAME', '$ITEM');"

感谢任何帮助,这是我的第一个数据库项目。

2 个答案:

答案 0 :(得分:3)

(这个表格比你想象的还要错误 - 缺少not null个约束,缺少primary key约束......)

我猜你每个用户只需要一张图片。我错了。

CREATE TABLE images (
  user VARCHAR not null, 
  image VARCHAR not null unique, 
  primary key (user),
  FOREIGN KEY (user) REFERENCES accounts(user)
);

对于每个用户的多个图像,每个图像都是唯一值,只需更改主键即可。

CREATE TABLE images (
  user VARCHAR not null, 
  image VARCHAR not null, 
  primary key (image),
  FOREIGN KEY (user) REFERENCES accounts(user)
);

答案 1 :(得分:2)

如果您不想要重复项,请创建一个唯一索引:

create unique index idx_images_user_image on images(user, image);

这样可以防止重复插入。