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)