是否可以在同一个表中引用不同的列?

时间:2012-07-12 20:05:45

标签: sql create-table hierarchical

如果博客有“类别”表,例如以下内容:

CREATE TABLE categories
(
  id INTEGER PRIMARY KEY AUTO_INCREMENT,
  parent_id INTEGER NOT NULL,
  name VARCHAR(30) NOT NULL,
  description TEXT,
  count INTEGER NOT NULL DEFAULT 0
);

如果parent_id字段旨在引用类别表的'id'字段,那么我如何添加一个约束来确保插入parent_id的值引用id字段?

我只想确保只存在的类别ID值可以用作新插入类别的父级。

3 个答案:

答案 0 :(得分:11)

是的,您可以引用同一个表中的列。

但该列应该可以为空,否则您无法插入第一条记录。

CREATE TABLE categories
(
  id INTEGER PRIMARY KEY AUTO_INCREMENT,
  parent_id INTEGER NULL,
  name VARCHAR(30) NOT NULL,
  description TEXT,
  count INTEGER NOT NULL DEFAULT 0,
  FOREIGN KEY (parent_id) REFERENCES categories(id)
);

请注意,在REFERENCES关键字后,表名不是可选的,因此即使您在同一个表中引用列,也必须指定它。来自documentation

reference_definition:
    REFERENCES tbl_name (index_col_name,...)
      [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
      [ON DELETE reference_option]
      [ON UPDATE reference_option]

查看在线工作:sqlfiddle

答案 1 :(得分:1)

只需使用普通外键:

ALTER TABLE categories ADD CONSTRAINT FK_categories_Parent_ID 
REFERENCES categories (ID)

但是,Parent_ID应该可以为空,因为您永远无法插入记录

答案 2 :(得分:0)

您可以使用以下链接。它有你如何做Oracle数据库。

http://www.adp-gmbh.ch/ora/data_samples/hierarchic_yahoo.html

由于