【问题标题】:Foreign key column allows to insert value that is not in referenced column外键列允许插入不在引用列中的值
【发布时间】:2014-11-09 02:12:11
【问题描述】:

我必须要桌子:

CREATE TABLE `artist` (
    `name`  TEXT NOT NULL,
    `gender`    TEXT NOT NULL,
    `city`  TEXT NOT NULL,
    PRIMARY KEY(name)
);

create table artwork(
    title text,
    location text,
    artist text,
    primary key (title, artist),
    foreign key (artist) references artist(name)
    );

“艺术品”表中的“艺术家”列允许我插入不在引用列中的数据。

FOREIGN KEY 约束还可以防止无效数据 插入到外键列中,因为它必须是 它指向的表中包含的值。 (c) W3school

我做错了吗?

【问题讨论】:

  • name 的类型为TEXT,它是一个主键,只有指定长度才能将此列作为键。你的 create table 语句会报错。
  • 它不会给出错误。表格创建得很好,我可以看到它们。
  • 哪个版本的mysql?这些命令是从其他应用程序运行的吗?在这种情况下可能会使用一些默认长度。
  • 我正在使用 SQLIte,但感谢您的评论,它将在未来帮助我。

标签: sql sqlite foreign-keys


【解决方案1】:

你在使用 SQLite 吗?
如果是这样,你需要先运行

PRAGMA foreign_keys = ON;
虽然 SQLite 确实提供外键约束,但默认情况下它是禁用的。

【讨论】:

    【解决方案2】:

    外键约束中不支持文本列,因为它们无法被索引。根据官方文档:

    不支持外键列的索引前缀。一 这样做的结果是不能包含 BLOB 和 TEXT 列 在外键中,因为这些列上的索引必须始终包含 前缀长度。

    来源:http://dev.mysql.com/doc/refman/5.0/en/create-table-foreign-keys.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多