这个 SQL 表创建的约束有啥问题?

Posted

技术标签:

【中文标题】这个 SQL 表创建的约束有啥问题?【英文标题】:What's wrong with the constraint on this SQL table create?这个 SQL 表创建的约束有什么问题? 【发布时间】:2013-10-24 10:38:21 【问题描述】:

我正在尝试创建一个新的人行横道/交叉路口表 (synonyms):

    由一对 ID 组成(都是不同表的外键);和 具有唯一性约束,使得两个 ID(作为一对)在表中必须是唯一的

这是我的 SQL:

CREATE TABLE synonyms (
    base_word_id INTEGER NOT NULL,
    synonym_id INTEGER NOT NULL,

    CONSTRAINT fk_words_based_id FOREIGN KEY (base_word_id) REFERENCES words(word_id)
);

words 表包含(您猜对了)单词和有关这些单词的元数据。 synonyms 表是一个多对多表,保存单词及其同义词的关系,也就是其他单词。 synonym_id 是与base_word_id 表示的单词同义的单词的ID。

针对 H2 DB,我收到以下错误:

Error: Table "WORDS" not found; SQL statement:
CREATE TABLE synonyms(
base_word_id INTEGER NOT NULL,
synonym_id INTEGER NOT NULL,

CONSTRAINT fk_words_based_id FOREIGN KEY (base_word_id) REFERENCES words(word_id)
) [42102-173]
SQLState:  42S02
ErrorCode: 42102

在我的数据库中,WORDS 不是表,但words 是。所以看起来 H2 是大写的 wordsWORDS 可能吗?

【问题讨论】:

【参考方案1】:

看起来您像这样创建了“单词”表:

create table "words"(...)

如果你这样做,那么表名是区分大小写的,你必须总是引用它。为避免这种情况,请创建不带双引号的表:

create table words(...)

【讨论】:

以上是关于这个 SQL 表创建的约束有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

SQL中的外部键约束有啥用?

sqlserver外键关系有啥用?

这个 sql 命令有啥语法错误? [关闭]

SQL中Unique约束有啥用啊?

SQL中Unique约束有啥用啊?

在 oracle11g系统中 约束的类型都有哪些