sql - PostgreSQL : Add constraint with mulitple conditions

标签 sql postgresql null syntax-error constraints

我在将具有两个约束条件的约束添加到现有表时遇到困难。我正在处理下面的两个关系,并且正在尝试将约束添加到“books”表中。

关系是:

  • 书籍((book_id),书名,author_id,subject_id)
  • 主题(((subject_id),主题,位置)

  • 括号中的键是主键,而斜体是外键。

    第一个标准/条件是 subject_id 不为NULL,并且在将新的book-tuple插入书籍中时 subject_id 已作为主键存在于Subject关系中。
    ALTER TABLE books ADD CONSTRAINT hasSubject 
        CHECK(subject_id IS NOT NULL AND subject_id REFERENCES subjects(subject_id))
    

    我不断收到错误消息:“'REFERENCES'或附近的语法错误”

    有任何想法吗?先感谢您!

    最佳答案

    REFERENCES是约束的独立类型。因此,您需要两个约束:

    ALTER TABLE books ADD CONSTRAINT chk_books_subject_id
        CHECK (subject_id IS NOT NULL);
    
    ALTER TABLE books ADD CONSTRAINT fk_books_subject_id
        FOREIGN KEY (subject_id) REFERENCES subjects(subject_id);
    

    我将它们放在两个ALTER TABLE语句中,以强调它们是不同的。它们可以合并为一个语句。

    编辑:

    在一个声明中:
    ALTER TABLE books
        ADD CONSTRAINT chk_books_subject_id CHECK (subject_id IS NOT NULL),
        ADD CONSTRAINT fk_books_subject_id FOREIGN KEY (subject_id) REFERENCES subjects(subject_id);
    

    关于sql - PostgreSQL : Add constraint with mulitple conditions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46058465/

    相关文章:

    mysql:select * where first and last name starts with the same letter

    c# - 在并行循环中使用 SMO 从 .net 中的 SQL Server 数据库编写对象定义脚本

    methods - 空指针异常错误作为方法参数

    SQL:计算学生就读的不同学校的数量

    mysql - 我需要在此 SQL 指令中添加什么来过滤某些项目?

    postgresql - 根据参数中的值列表更新和插入记录

    ruby-on-rails - rails + PostgreSQL : grouping together with a sum

    postgresql - 使用 go 和 sqlc 库创建 api 时,我在 postgresql 中的数据会自动加密

    elasticsearch - 我们如何处理具有特定含义的 NULL 值?

    json - 即使存在值,Go map 也会返回 nil 值