首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite检查重复行

SQLite检查重复行
EN

Stack Overflow用户
提问于 2018-06-17 11:08:58
回答 2查看 915关注 0票数 0

我有一个艺术展览的SQLite数据库。在“展品”表中,我有关于艺术品ID、展览空间ID、开始日期和结束日期的列。“结束日期”的默认值为空。当然,同一幅艺术品不能同时显示在两个不同的空间中。因此,我希望确保不创建带有艺术品ID的新行,除非所有具有相同艺术品ID的现有行都有一个非空结束日期。是否有某种约束、触发器等可以添加到表中以确保这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-17 11:31:21

我不是为SQLite编写触发器的专家,但是这样的东西应该能工作,

代码语言:javascript
复制
CREATE TRIGGER check_open_ended_exhibit BEFORE INSERT ON exhibits
BEGIN
  SELECT RAISE(ABORT, "Open ended exhibit exists") 
  WHERE EXISTS(SELECT * FROM exhibits WHERE artworkID = NEW.artworkID AND enddate IS NULL);
END
票数 0
EN

Stack Overflow用户

发布于 2018-06-17 11:32:31

根据您的信息,“艺术品”不能在同一展览中显示两次,这意味着当将EndTime与艺术品一起限制时,它是一个唯一的字段。因此,通过将这两者结合在一起,您将无法插入记录,如果您已经拥有“艺术品和空”。

所以,你可以在这两列上创建一个唯一的约束。

代码语言:javascript
复制
 CREATE TABLE testConstrain (
  id INTEGER NOT NULL,
  endDate DATETIME
)

CREATE UNIQUE INDEX testConstrain
ON testConstrain(id, endDate);

INSERT INTO testConstrain VALUES('1',null)
INSERT INTO testConstrain VALUES('2','01-01-2018')
INSERT INTO testConstrain VALUES('1','01-01-2018')
INSERT INTO testConstrain VALUES('1',null)

`

您将得到:开始在第11行执行查询(1行受影响) (1行受影响) (1行受影响) Msg 2601、14级、状态1、第4行不能使用唯一索引'testConstrain‘在对象'bginsburg.testConstrain’中插入重复的键行。重复的键值是(1,)。声明已被终止。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50896057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档