自引用完整性约束是引用同一表中父键的外键。建表示例如下:
obclient> CREATE TABLE employee (
employee_id INT PRIMARY KEY,
employee_name VARCHAR(30),
salary VARCHAR(30),
manager_id INT,
CONSTRAINT sr_fk_emp_man FOREIGN KEY (manager_id) REFERENCES employee(employee_id)
);
manager 也是雇员的一种。所以 manager_id 引用了 employee_id 列作为自己的完整性约束。这就是自引用的一个例子。这种情况会让 DML 操作复杂很多,内核实现中要避免读 employee 表的时候并发更新 employee 表。