如何定义外键
Posted
技术标签:
【中文标题】如何定义外键【英文标题】:How to define a foreign key 【发布时间】:2018-04-23 07:21:13 【问题描述】:我的两个父母表是person和artwork。我按如下方式创建了他们的表:
create table person (
person_id number(20) primary key,
name varchar2(20),
address varchar(50),
contact_number number (10)
);
其他
create table artwork (
artwork_id number primary key,
barcode char (20),
title varchar2(20),
description varchar2(50));
当我尝试让子表投票时,它给出了这个错误。
create table vote
(
vote_id number(7) NOT NULL,
artwork_id number(20),
person_id number(20),
PRIMARY KEY (vote_id),
FOREIGN KEY (artwork_id) REFERENCES artwork(artwork_id),
FOREIGN KEY ( person_id) REFERENCES Person(person_id)
);
SP2-0734:以“FOREIGN KE...”开头的未知命令 - 忽略行的其余部分。
【问题讨论】:
【参考方案1】:你忘了在foreign key
之前提到constraint
:
create table vote
(
vote_id number(7) NOT NULL,
artwork_id number(20),
person_id number(20),
PRIMARY KEY (vote_id),
CONSTRAINT fk_artwork_id FOREIGN KEY (artwork_id) REFERENCES artwork(artwork_id),
CONSTRAINT fk_person_id FOREIGN KEY ( person_id) REFERENCES Person(person_id)
);
语法
使用 CREATE TABLE 语句创建外键的语法 是:
CREATE TABLE table_name
(
column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT fk_column
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n)
);
演示
http://sqlfiddle.com/#!4/3d141
说明
默认情况下,SQLPlus 不喜欢空行。但是我们可以轻松配置我们的 SQLPlus 环境以忽略它们:
SQL> set sqlblanklines on
我们也可以将设置放在 glogin.sql 文件中(假设我们可以编辑它,但并非总是如此)。
【讨论】:
SP2-0734:以“CONSTRAINT...”开头的未知命令 - 忽略行的其余部分。 首先运行set sqlblanklines on
命令,然后尝试@agam2104
运行上面的create table vote
查询一个是正确的代码
添加说明@agam2104【参考方案2】:
在创建投票表时删除约束定义之前的空白行:
create table vote
(
vote_id number(7) NOT NULL,
artwork_id number(20),
person_id number(20),
PRIMARY KEY (vote_id),
FOREIGN KEY (artwork_id) REFERENCES artwork(artwork_id),
FOREIGN KEY ( person_id) REFERENCES Person(person_id)
);
任何空白行都会阻止 SQL*Plus 接受输入行。
如果你想让它避免这种运行:
set sqlblanklines on
在任何其他指令之前。
【讨论】:
只是想用我的表格艺术品询问另一个查询我想将 artist_id 添加为 FK。create table artwork ( artwork_id number primary key, barcode char (20), title varchar2(20), description varchar2(50), artist_id varchar2(10), FOREIGN KEY (artist_id) REFERENCES artist(artist_id) );
** 第 7 行出现错误:ORA-02267:列类型与引用的列类型不兼容** 现已解决,我在另一个表的 artis_id 中使用了 diff 数据类型。以上是关于如何定义外键的主要内容,如果未能解决你的问题,请参考以下文章