如果博客有“类别”表,例如以下内容:
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值可以用作新插入类别的父级。
答案 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)