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

Sql 是否可以在同一个表中引用不同的列?,sql,create-table,hierarchical,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字段旨在引用categories表的'id'字段,那么我如何添加一个约束以确保插

如果博客有如下“类别”表:

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字段旨在引用categories表的'id'字段,那么我如何添加一个约束以确保插入parent_id的值引用id字段


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

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

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

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关键字之后,表名不是可选的,因此即使引用同一表中的列,也必须指定它。从:

参考定义: 参考tbl_名称(索引col_名称,…) [完全匹配|部分匹配|简单匹配] [关于删除参考_选项] [关于更新参考_选项]
在线查看它的工作情况:

只需使用普通外键即可:

ALTER TABLE categories ADD CONSTRAINT FK_categories_Parent_ID 
REFERENCES categories (ID)

但是,父ID应该可以为空,因为您永远无法插入可在下面链接中使用的记录。它提供了如何使用Oracle数据库


谢谢

那么这是否意味着我应该执行类似的操作:parent_id INTEGER REFERENCES(id)?@JimJohnson:您需要指定表名。我从来都不知道外键也可以是同一个表中的列>。我可以将parent_id默认为0吗?@JimJohnson:您的表中有第0行吗?否则,如果尝试添加父项id为0的行,则外键约束将失败。但是你可以用NULL来代替。@Mark Byers我会用NULL来代替:D
ALTER TABLE categories ADD CONSTRAINT FK_categories_Parent_ID 
REFERENCES categories (ID)