外键列允许插入不在引用列中的值

时间:2014-11-09 02:12:12

标签: sql sqlite foreign-keys

我需要表格:

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)
    );
'artwork'表中的'p''artist'列允许我插入不在引用列中的数据。

  

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

我做错了吗?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

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

  

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

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

相关问题