我想将我的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');"
感谢任何帮助,这是我的第一个数据库项目。
答案 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);
这样可以防止重复插入。